上篇我们分享了一下容器的演进,然后用进程隔离、文件隔离、namespace、cgroups、libcontainer的几个角度展开容器的本质,本篇文章会对Docker的版本安装进行讲解并简介Docker的技术架构。
如果你还没看过前面的内容:可以点击《容器的本质是什么?容器从何而来?》
Docker在1.13之后,采用时间线作为版本号标识。Docker的版本分为社区版(CE)和企业版(EE)。企业版会提供额外的收费服务,比如包括一些经过官方认证的插件、容器等。
社区版又分为三种版本:
稳定版本:stable。一般我们使用此版本。
预发布版:test
待发布版:nightly
卸载主机上已有的docker版本
配置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版本
可配置阿里镜像加速器,配置方法参考链接:
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
针对docker客户端版本大于1.10.0的,可通过修改/etc/docker/daemon.json文件来使用加速器。
如果该文件不存在,则直接创建。
操作命令:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["镜像加速器地址(可从上面阿里云链接地址中获取)"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart 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架构与虚拟机架构对比情况如下图。最直观的差别在于docker容器中是没有独立的os,而是与宿主机共用同一个内核。然后通过隔离技术,让我们在进入每一个容器时,所看到的内容和操作的环境就像是在一个虚拟机中一样。
容器与虚拟机的对比情况如下:
在安全性上,虚拟机肯定是比容器要好的,显而易见,虚拟机毕竟拥有着独立的操作系统。
在计算资源开销和镜像大小对比上,容器优势更大,从而实现了硬件资源的节约。
在启动速度、快速扩展能力上,容器优势更大,从而实现了容器化应用的快速部署/扩容,从而提高业务的敏捷性
在跨平台迁移能力上,容器优势更大,这对于容器化应用在企业的不同云环境之间的迁移提供了非常大的便利性。
基于以上的种种优势,容器实现了对微服务架构和devops的更好的支持。
作者:沈晓龙
容器的本质是什么?容器从何而来?
使用sqlplus进行Oracle数据库批量自动发布
业务复杂、数据庞大、应用广怎办?了解下分布式事务的解决思路!
这里有份选择云服务商的攻略,请查收…
SaaS设计:自动化服务启停设计示例
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。