站长资讯网
最全最丰富的资讯网站

揭开Docker的面纱 – 基础理论梳理和安装流程演示

前言

​ 本文将围绕以下几个方面来揭开docker的面纱:

  • 什么是docker?
  • 为什么需要docker?
  • docker的核心概念

什么是docker?

​基于Linux而言,docker是在其中运行应用的一款开源工具,可以认为是一种轻量级的虚拟机。docker的logo是一条载着集装箱的鲸鱼(旧版的logo),新版的logo则是直接简化了细节,更改了颜色,如下图。

揭开Docker的面纱 - 基础理论梳理和安装流程演示

从图片中就可以看出来,docker的创建和开发者们的意图。鲸鱼——宿主机,块状箱——隔离的容器(后面介绍什么是docker容器)。而docker的宗旨:Build、Ship and Run Any APP,Anywhere。具体而言,就是通过对应应用组件的封装、发布、部署、运行等生命周期的管理,从而达到应用组件级别的“一次封装、处处运行”的目的。

​ 举个例子就好比自己开发了一款应用软件,希望它在任何地点,任何时间、任何操作系统中都可以使用的时候,就可以将它基于docker来实现。当然,对于docker而言,这个组件可以是一个应用,也可以是一个配置,甚至可以是一个完整的操作系统。

为什么需要docker?

​其实docker的出现对于开发人员是莫大的福音。设想目前或未来基于云平台的应用或软件的开发,脱离了底层的硬件,而使用者需要在任何时间、任何地点都可以获取相关的资源,那么docker便可以提供这样的诉求。

下面直接给出docker容器与传统虚拟机的比较

特性 Docker容器 虚拟机
启动速度 秒级 分钟级
计算机性能损耗 几乎不损耗 损耗一半左右
性能 接近原生 弱之
系统支持量 上千个 几十个
隔离性 资源限制 完全隔离

​ docker核心解决的问题是利用容器实现类似VM的功能,从而以更加节省的硬件资源给用户提供更多的计算资源,并且docker操作方便,还可以通过Dockerfile配置文件支持灵活的自动化创建和部署。

​接下来看一下Docker与传统虚拟机架构的对比:

揭开Docker的面纱 - 基础理论梳理和安装流程演示

​ 通过上图发现,虚拟机是在物理资源层面实现的隔离,相对于虚拟机,Docker是基于APP层面实现的隔离,并且省去了虚拟机操作系统,从而节省了一部分的系统资源。

​ Docker守护进程可以直接与主操作系统进行通信,为各个Docker容器分配资源;它还可以将容器与主操作系统隔离(为了安全),并将各个容器互相隔离。虚拟机启动需要数分钟,而Docker容器可以在数毫秒内启动。由于没有臃肿的从操作系统,Docker可以节省大量的磁盘空间以及其他系统资源。

​ 简单来说,虚拟机和docker的区别就在于虚拟机需要通过Hypervisor对硬件资源也进行虚拟化,而docker是直接使用宿主机的硬件资源的,因此虚拟机的隔离性更加彻底,而docker的隔离性次之。

Docker的核心概念

1、镜像——image

​ 可以理解为类似我们虚拟机中的快照,是创建容器的基础,可以说无镜像,不容器。

2、容器——container

​ 基于镜像创建的运行实例,可以被启动、停止和删除。每个容器之间都是相互隔离、互不可见的。

3、仓库——repository

​ 保存镜像的地方,可以理解为镜像囤积地。可以将自己创建的进行推送到仓库中,方便随时随地拉取使用。

​ 仓库注册服务器(registry)是存放仓库的地方,其中包含了多个仓库,每个仓库中存放一类镜像,并且使用不同的标签(tag)来区分。目前最大的公共仓库就是Docker Hub,其中存放了数量庞大的镜像给用户下载使用。

这边补充说明一下docker架构:

​ Docker使用客户端-服务器架构。Docker 客户端与Docker 守护进程进行对话,该守护进程完成了构建,运行和分发Docker容器的繁重工作。Docker客户端和守护程序可以 在同一系统上运行,或者您可以将Docker客户端连接到远程Docker守护程序。Docker客户端和守护程序在UNIX套接字或网络接口上使用REST API进行通信。

架构图示:

揭开Docker的面纱 - 基础理论梳理和安装流程演示

Docker的安装流程

基于Linux/CentOS7的安装部署流程如下:

操作系统版本:centos7.7

1、环境部署

[root@localhost ~]# hostnamectl  set-hostname docker  [root@localhost ~]# su  [root@docker ~]# cat /etc/RedHat-release   CentOS Linux release 7.7.1908 (Core)    [root@docker ~]# systemctl stop firewalld && systemctl disable firewalld  Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.  Removed symlink /etc/systemd/system/dbus-org.Fedoraproject.FirewallD1.service.  [root@docker ~]# setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config  [root@docker ~]# echo "net.ipv4.ip_forward=1" > /etc/sysctl.conf #开启路由转发  [root@docker ~]# sysctl -p #加载路由转发功能  net.ipv4.ip_forward = 1  [root@docker ~]# systemctl restart network

2、安装依赖包

[root@docker ~]# yum install -y yum-utils device-mapper-persistent-data lvm2  ...  更新完毕:    lvm2.x86_64 7:2.02.185-2.el7_7.2                                                                           作为依赖被升级:    device-mapper.x86_64 7:1.02.158-2.el7_7.2             device-mapper-event.x86_64 7:1.02.158-2.el7_7.2     device-mapper-event-libs.x86_64 7:1.02.158-2.el7_7.2  device-mapper-libs.x86_64 7:1.02.158-2.el7_7.2      lvm2-libs.x86_64 7:2.02.185-2.el7_7.2                    完毕!  

说明:

安装yum-utils软件包是为了提供一个yum-config-manager单元,同时安装的device-mapper-persistent-data和lvm2用于存储设备映射必须的两个软件包。

3、设置稳定的存储库

[root@docker ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  已加载插件:fastestmirror, langpacks  adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  grabbing file https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo  repo saved to /etc/yum.repos.d/docker-ce.repo  [root@docker ~]# ls /etc/yum.repos.d/ #查看是否加入了一个docker源  CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo  CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo  docker-ce.repo  

4、安装docker引擎

[root@docker ~]# yum install -y docker-ce   ...  已安装:    docker-ce.x86_64 3:19.03.8-3.el7                                                                           作为依赖被安装:    container-selinux.noarch 2:2.107-3.el7              containerd.io.x86_64 0:1.2.13-3.1.el7                 docker-ce-cli.x86_64 1:19.03.8-3.el7                   完毕!

5、创建docker目录,配置镜像加速服务

[root@docker ~]# mkdir /etc/docker -p  [root@docker ~]# tee /etc/docker/daemon.json <<-'EOF'  > { > "registry-mirrors": ["https://5m9y9qbl.mirror.aliyuncs.com"] > } > EOF  {    "registry-mirrors": ["https://5m9y9qbl.mirror.aliyuncs.com"]  }  

说明:tee命令——从标准输入写往文件和标准输出,即把标准输入的数据复制到每一个文件FILE, 同时送往标准输出。

6、开启服务,查看版本

[root@docker ~]# systemctl daemon-reload   [root@docker ~]# systemctl restart docker.service   [root@docker ~]# docker -v  Docker version 19.03.8, build afacb8b    [root@docker ~]# docker version  Client: Docker Engine - Community   Version:           19.03.8   API version:       1.40   Go version:        go1.12.17   Git commit:        afacb8b   Built:             Wed Mar 11 01:27:04 2020   OS/Arch:           linux/amd64   Experimental:      false    Server: Docker Engine - Community   Engine:    Version:          19.03.8    API version:      1.40 (minimum version 1.12)    Go version:       go1.12.17    Git commit:       afacb8b    Built:            Wed Mar 11 01:25:42 2020    OS/Arch:          linux/amd64    Experimental:     false   containerd:    Version:          1.2.13    GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429   runc:    Version:          1.0.0-rc10    GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd   docker-init:    Version:          0.18.0    GitCommit:        fec3683  

总结

​ 本文主要介绍了docker的作用,将之与传统虚拟机进行特性对比,以及架构层面的对比,接着讲述有关docker的核心三大组成,最终给出基于Linux下Centos7操作系统中docker的安装流程。

赞(0)
分享到: 更多 (0)
网站地图   沪ICP备18035694号-2    沪公网安备31011702889846号