Docker底座
Posted 以太坊者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker底座相关的知识,希望对你有一定的参考价值。
Docker的组成
Docker使用了C/S架构,Docker客户端通过REST API与Docker后台常驻进程交互,Docker后台常驻进程 (即dockerd
) 监听客户端请求并管理Docker对象,如镜像,容器,网络,卷。同时dockerd还可以和其他dockerd组成集群用于管理 Docker服务。
Docker客户端
Docker客户端(即docker
) 是用户使用docker的主要方式,通过docker命令行发送请求到dockerd进行相应的管理。
Docker镜像仓库
Docker registry 用于存放镜像,Docker Hub和Docker Cloud是官方的公用镜像仓库,docker默认从Docker Hub查找镜像,内网用户通常会建立私有镜像仓库,需要通过daemon.json配置。当执行docker pull或
docker run
操作时,docker会从配置的镜像仓库下载相应的镜像文件,当执行 docker push时
,docker会将镜像推送到配置的镜像仓库。
Docker对象
IMAGE
镜像是一个包含创建容器指令的只读的模板,通常会基于一个基准镜像,如很多镜像就是基于ubuntu镜像,然后在这之上添加其他应用。可以使用Dockerfile文件编译镜像,Dockerfile包含了一组特定的语法用于描述创建镜像的步骤,每个指令都会创建一个层 。
CONTAINER
容器即一个运行着的镜像实例,一个容器的生命周期包括了:创建、启动、停止、删除。不同容器可以通过网络进行通信,可以通过卷的概念为容器挂载不同的文件系统,还可以基于容器创建新的镜像。
SERVICE
docker服务可以让我们跨多个dockerd管理容器,多个dockerd组成了一个集群,包括一个管理节点和多个工作节点,docker服务可以灵活地制定容器的实例数,并且自动提供了负载均衡的功能,对于外部来说就像只有一个应用实例一样。
VOLUME
数据卷是一种docker容器用于持久化数据的机制,因为docker容器本身的读写层在容器删除后就消除了,所以docker容器需要有保存数据的方式,除了用数据卷,docker容器还可以使用挂载点的方式。相比挂载点,docker管理的数据卷方式有以下优点:更便于数据迁移;可以使用docker命令管理数据卷;Linux和Windows都可以支持数据卷;数据卷更适合多个容器共享;数据卷还可以存储在远程主机或云提供商上面。同时数据卷可以不受容器生命周期的影响。
Docker底层使用了Linux内核的几个特性来实现它强大的隔离机制。
Namespaces
Docker使用了 namespaces
来提供隔离的空间,当启动一个docker容器时Docker底层创建了一组namespace用于提供各方面的隔离功能。Docker Engine使用到了以下几种namespaces:
pid
namespace: 进程隔离 (PID: Process ID).net
namespace: 管理网络接口 (NET: Networking).ipc
namespace: 管理IPC资源的访问 (IPC: InterProcess Communication).mnt
namespace: 管理文件系统挂载点 (MNT: Mount).uts
namespace: 内核隔离和版本标识符 (UTS: Unix Timesharing System).
Control groups
Docker Engine使用的另一个Linux机制是control groups (cgroups
)。cgroup限制了应用可以访问的资源。Control groups使 Docker Engine可以让容器共享可用的硬件资源,同时可以做出强制的资源约束.
Union file systems
UnionFS,即联合文件系统,是docker容器底层使用的文件系统,它使得创建docker容器更加轻量,Docker Engine可以通过存储驱动器指定不同的UnionFS,如AUFS, btrfs, vfs和DeviceMapper.
Container format
Docker Engine将namespace, control group,UnionFS整合成一个容器格式,默认的容器格式是 libcontainer
,之后还可能会整合BSD Jail或 Solaris Zone。
以上是关于Docker底座的主要内容,如果未能解决你的问题,请参考以下文章
Docker删除报错:Error response from daemon: conflict: unable to delete 08b152afcfae (must be forced)(代码片段