Docker操作实践(2):Docker的安装及架构介绍

江枫思渺然 提交于 2019-11-30 10:56:53

上篇我们分享了一下容器的演进,然后用进程隔离、文件隔离、namespace、cgroups、libcontainer的几个角度展开容器的本质,本篇文章会对Docker的版本安装进行讲解并简介Docker的技术架构。

 

如果你还没看过前面的内容:可以点击《容器的本质是什么?容器从何而来?》

 

Docker版本

Docker在1.13之后,采用时间线作为版本号标识。Docker的版本分为社区版(CE)和企业版(EE)。企业版会提供额外的收费服务,比如包括一些经过官方认证的插件、容器等。

 

社区版又分为三种版本:

稳定版本:stable。一般我们使用此版本。

预发布版:test

待发布版:nightly

 

 

Docker安装

 

1.卸载docker

卸载主机上已有的docker版本

 

2. 安装前准备

配置yum

1. 安装yum工具及devicemapper存储驱动

 

 

2. 配置yum

 

 

yum makecache的过程中,可以看到可以安装使用的包是dockerr-ce-stable版本,也就是repo中默认只开启stable仓库。

 

此时如果我们需要安装test或nightly版本,可以使用yum-config-manger –enable docker-ce-test开启此仓库。

 

安装docker

可以使用yum list查看仓库中docker的版本:

 

 

1. 安装docker

 

 

2. 启动docker

systemctl start docker

systemctl enable docker

 

3. 查看docker版本

 

 

 

Docker镜像下载Accelerator的配置

可配置阿里镜像Accelerator,配置方法参考链接:

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

 

针对docker客户端版本大于1.10.0的,可通过修改/etc/docker/daemon.json文件来使用Accelerator。

 

如果该文件不存在,则直接创建。

 

操作命令:

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{

  "registry-mirrors": ["镜像Accelerator地址(可从上面阿里云链接地址中获取)"]

}

 

EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

 

 

Docker架构

Docker采用了传统的client-server架构模式,总架构图如下:

 

 

用户通过docker client与docker daemon建立通信,并将请求发送给后者。Docker daemon中的模块是松耦合结构,各模块各司其职并有机组合,完成用户的请求。

 

API:用于接收docker client的请求,然后根据不同的请求分发给daemon的不同模块执行相关的工作。

 

Docker client:是一个泛称,用来向指定的docker daemon发起请求。可以是docker命令行工具,也可以是任何遵循了docker api的客户端。

 

Graph:作为容器镜像的保管者。不论是docker下载的镜像,还是docker构建的镜像,都由graph统一管理。

 

Execdriver:是对linux操作系统的namespace、cgroups、apparmor、SELinux等容器运行所需的系统操作进行的一层二次封装,其本质作用类似于LXC,但是功能要更全面。这也就是为什么LXC会作为execdriver的一种实现而存在。不过目前,execdriver最主要的实现也是默认的实现是libcontainer库

 

Networkdriver:对容器网络环境操作所进行的封装。对于容器来说,网络设备的配置相对比较独立,并且应该允许用户进行更多的配置,所以在docker中,这一部分是单独作为一个driverr来设计和实现的。这些操作具体包括创建容器通信所需的网络,这个网络所需的虚拟网上,分配通信所需的IP,服务访问的端口和容器与宿该机之间的端口映射,设置hosts、resolv.conf、iptables等。

 

Graphdriver:是所有与容器镜像相关操作的最终执行者。包括从远程docker registry上下载镜像并进行存储,也包括本地构建完镜像后的存储。当用户下载指定的容器镜像时,graphdriver将容器镜像分层存储在本地的指定目录下;同时当用户需要使用指定的容器镜像来创建容器时,graphdriver从本地镜像存储目录中获取指定的容器铝合金,并按特定规则为容器准备rootfs;另外,当用户需要通过指定dockerfile构建全新镜像时,graphdriver会负责新镜像的存储管理。目前graphdriver支持对接四种不同的文件存储:aufs、btrfs、vfs、devmapper。

 

 

Docker VS 虚拟机

 

1. Docker与虚拟机的架构对比

Docker架构与虚拟机架构对比情况如下图。最直观的差别在于docker容器中是没有独立的os,而是与宿主机共用同一个内核。然后通过隔离技术,让我们在进入每一个容器时,所看到的内容和操作的环境就像是在一个虚拟机中一样。

 

2. 容器与虚拟机的优劣对比

容器与虚拟机的对比情况如下:

 

 

在安全性上,虚拟机肯定是比容器要好的,显而易见,虚拟机毕竟拥有着独立的操作系统。

 

在计算资源开销和镜像大小对比上,容器优势更大,从而实现了硬件资源的节约。

 

在启动速度、快速扩展能力上,容器优势更大,从而实现了容器化应用的快速部署/扩容,从而提高业务的敏捷性

 

在跨平台迁移能力上,容器优势更大,这对于容器化应用在企业的不同云环境之间的迁移提供了非常大的便利性。

 

基于以上的种种优势,容器实现了对微服务架构和devops的更好的支持。

 

作者:沈晓龙

 

好文推荐

容器的本质是什么?容器从何而来?

使用sqlplus进行Oracle数据库批量自动发布

业务复杂、数据庞大、应用广怎办?了解下分布式事务的解决思路!

赣州银行增强科技创新,实现一键灾备切换

SaaS设计:自动化服务启停设计示例 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!