Docker核心技术和安装教程

Docker核心技术

Docker底层依赖的核心技术:包括Docker基本架构、Linux操作系统的命名空间(namespace)、控制组(control group)、联合文件系统(union file system) 和虚拟化支持等。

Docker基本架构

Docker采用了标准的C/S架构,包括客户端、服务端两大核心组件,同时通过镜像仓库来存储镜像。客户端和服务端可以运行在一个机器上,也可以通过socket或者RESTful API来进行通信。

1.服务端
Docker服务端一般在宿主主机后台运行,dockerd作为服务端接受来自客户的请求,并通过containerd具体处理与容器相关的请求,包括创建、运行、删除容器等。
服务端主要包括四个组件:
1)dockerd:为客户端提供RESTful API,响应来自客户端的请求,采用模块化的架构,通过专门的Engine模块来分发管理各个来自客户端的任务。
2)docker-proxy:dockerd的子进程,当需要进行容器端口映射时,docker-proxy完成网络映射配置。
3)containerd:是dockerd的子进程,提供gRPC接口响应来自dockered的请求,对下管理runC镜像和容器环境。
4) containerd-shim:是containerd的子进程,为runC容器提供支持,同时作为容器内进程的根进程。

2.客户端
Docker客户端为用户提供一系列可执行命令,使用这些命令可实现与Docker服务端交互。
用户使用的Docker可执行命令即为客户端程序,客户端发送命令后,等待服务端返回,一旦收到返回后,客户端立刻执行结束并退出。用户执行新的命令,需要再次调用客户端命令。

3.镜像仓库
镜像是使用容器的基础,Docker使用镜像仓库(Registry)在大规模场景下存储和分发的Docker镜像。镜像仓库提供了对不同存储后端的支持,存放镜像文件,并且支持RESTful API,接收来自dockerd的命令,包括拉取、上传镜像等。

命名空间

要想实现虚拟化,要实现对内存、CPU、网络IO、硬盘IO、存储空间等限制,还要实现对文件系统、网络、PID、UID、IPC等的相互隔离。
命名空间是Linux内核的一个强大特性,为容器虚拟化的实现带来极大便利,利用这一特性,每个容器都可以拥有自己单独的命名空间,命名空间机制保证了容器之间彼此互不影响。
Docker容器每次启动时候,通过调用func setNamespaces(daemon *Daemon,s *specs.Spec,c *container.Container) error方法来完成对各个命名空间的配置。

控制组

控制组(CGroups)是Linux内核的一个特性,主要用来对共享资源进行隔离、限制、审计等。只有将分配到容器的资源进行控制,才能避免多个容器同时运行时对宿主机系统的资源竞争。每个控制组是一组对资源的限制,支持层级化结构。

控制组提供如下功能:
1)资源限制:可将组设置一定的内存限制。
2)优先级:通过优先级让一些组优先得到更多的CPU等资源。
3)资源审计:用来统计系统实际上把多少资源用到适合的目的上,可以使用cpuacct子系统记录某个进程组使用的CPU时间。
4)执行挂起、恢复和重启动等操作。
Docker容器每次启动的时候,通过调用func setCapabilities(s *specs.Spec,c *container.Container) error方法来完成对各个命名空间的配置。

联合文件系统

联合文件系统是一种轻量级的高性能分层文件系统,支持将文件系统中的修改信息作为一次提交,并层层叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,应用看到的是挂载的最终结果。联合文件系统是实现Docker镜像的技术基础。

1)Docker存储原理
Docker镜像可以通过分层来进行继承。例如:用户基于基础镜像来制作各种不同的应用镜像。这些镜像共享同一个基础镜像曾,提高了存储效率。
Docker镜像自身就是由多个文件层组成。可以通过docker history查看一个镜像由哪些层组成。
对于Docker镜像来说,这些层的内容都是不可修改的、只读的,当Docker利用镜像启动一个容器时,将在镜像文件系统的最顶端再挂载一个新的可读写的层给容器。容器中的内容更新将会发生在可读写层。对于IO敏感型应用,一般推荐将容器要修改的数据通过volume方式挂载,在宿主机上进行修改,而不是之间修改镜像内数据。

2)Docker存储结构
所有的镜像和容器都存储在Docker指定的存储目录下。

3)文件系统种类
Docker目前支持的联合文件系统种类包括AUFS、Device Mapper。
Device Mapper::RedHat公司和Docker团队一起开发用于支持RHEL的文件系统,内核支持,性能略慢,成熟度高。

Linux网络虚拟化

Docker的本地网络实现其实就是利用了Linux上的网络命名空间和虚拟网络设备。
要实现网络通信,机器需要至少一个网络接口(物理接口或虚拟接口)与外界相通,并可以收发数据包。
Docker中的网络接口默认都是虚拟接口。虚拟接口的最大优势就是转发效率极高。这是因为Linux通过在内核中进行数据复制来实现虚拟接口之间的数据转发,即发送接口发送缓存中的数据包将被直接复制到接收接口的接收缓存中,而无需通过外部物理设备进行交换。
Docker容器网络就很好地利用了Linux虚拟网络技术,在本地主机和容器内分别创建一个虚拟接口veth,并连通。

Docker安装教程

Docker提供了两个版本:社区版(CE)和企业版(EE)。企业版收费,一般安装社区版就能满足需求。

操作系统要求
以Centos7为例,Docker要求操作系统必须为64位,且centos内核版本为3.1及以上

查看内核版本信息

uname -r
3.10.0-514.el7.x86_64

一.准备工作

查看是否安装过docker

yum list installed | grep docker
docker-ce.x86_64                 3:18.09.6-3.el7                installed
docker-ce-cli.x86_64             1:18.09.6-3.el7                installed

卸载docker旧版本

yum -y remove docker-ce.x86_64
yum -y remove docker-ce-cli.x86_64

卸载后将保留/var/lib/docker的内容(镜像、容器、存储卷和网络等)

rm -rf /var/lib/docker

安装依赖软件包

yum install -y yum-utils device-mapper-persistent-data lvm2

二 在线安装和离线安装docker

1)在线安装
查看系统内已经拥有的仓库

yum repolist all

使用yum-config-manger --add-repo添加docker的yum仓库
yum-config-manager命令在yum-utils包里

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

更新yum软件包索引

yum makecache fast

安装指定版本的docker-ce,可以使用下面的命令查看docker-ce版本

# --showduplicates参数列出所有版本
# sort -r将数字当做字符进行排序
yum list docker-ce.x86_64 --showduplicates | sort -r

安装docker-ce

yum install -y docker-ce
# 安装完成后查看docker版本
docker version

2)离线安装
下载rpm包离线安装
在这里插入图片描述
1 安装container-selinux
下载container-selinux-2.107-3.el7.noarch.rpm

rpm -ivh container-selinux-2.107-3.el7.noarch.rpm

在这里插入图片描述
2 安装libseccomp
docker-ce依赖libseccomp,安装docker-ce前先安装libseccomp

#下载libseccomp的rpm包到指定目录/moudle/temp/下
yumdownloader --resolve --destdir=/moudle/temp/ libseccomp-2.3.1-3.el7.x86_64
rpm -ivh libseccomp-2.3.1-3.el7.x86_64.rpm

在这里插入图片描述
3 安装containerd.io,docker-ce-cli,docker-ce

下载最新版本的docker-ce和两个依赖包containerd.io,docker-ce-cli
containerd.io-1.2.13-3.2.el7.x86_64.rpm
docker-ce-19.03.11-3.el7.x86_64.rpm
docker-ce-cli-19.03.11-3.el7.x86_64.rpm
docker下载地址
在这里插入图片描述

rpm -ivh containerd.io-1.2.13-3.2.el7.x86_64.rpm
rpm -ivh docker-ce-cli-19.03.11-3.el7.x86_64.rpm
rpm -ivh docker-ce-19.03.11-3.el7.x86_64.rpm

在这里插入图片描述
在这里插入图片描述

查看是否安装成功

docker version

如下如所示,则安装成功
在这里插入图片描述

启动docker

systemctl enable docker
systemctl start docker
systemctl status docker

在这里插入图片描述
再次查看docker版本,发现已经同时具有客户端、服务端了
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章