前面我们研究了Docker容器的本质是一个特殊的进程,那么这个特殊进程是如何创建、如何终止的那?也就是说是谁来管理这个容器进程的生命周期的那?
在mac操作系统中我们可以通过活动监视器来观察操作系统里面有哪些进程,以及通过活动监视器我们可以让指定的进程终止运行。活动监视器本身也是一个进程,其之所以可以管理进程,是因为其保存了所有进程的信息,比如进程的名称,进程PID等信息。
同理在Docker的设计中,也存在一个叫做Docker daemon的进程,Docker daemon运行在Docker host上,负责创建、运行、监控容器,以及负责构建、存储容器镜像。那么Docker daemon在Docker的设计中处于什么位置那?我们来看下Docker的架构:
如上图为Docker的架构图,可知其使用了Client/Server架构:
其中Docker daemon运行在Docker 主机上,负责创建、运行、监控容器,以及负责构建、存储容器镜像。
Docker客户端是为开发者提供的操作docker镜像和容器的客户端,比如我们最常使用的是docker 命令,使用docker build命令构建镜像,使用docker pull命令拉取镜像,使用docker run命令运行容器等。
Docker镜像本质为静态的文件,我们可以认为其是模板,基于其我们可以创建运行时的容器,关于Docker镜像里面包含了什么,我们在文章Docker镜像里到底是什么东西已经讲解过了。我们可以使用docker build来创建一个镜像,使用docker pull来拉取镜像
Docker 容器,即docker镜像在运行时的产物,我们可以使用docker run基于某个镜像启动一个容器运行,使用docker stop 命令来终止一个运行时的容器
Registry,存放docker镜像的仓库。
总结:
Docker采用了Client/Server架构,当我们启动Docker服务时,其实就启动一个daemon服务进程用来等待接受客户端的请求;当我们使用docker client的docker build命令构建一个镜像时,其实是把请求发送给了daemon服务,其收到请求后执行具体的镜像构建工作;当我们使用docker client的docker run命令启动一个容器时,其实是把请求发送给了daemon服务,其收到请求后获取对应的镜像内容,然后基于镜像启动一个对应的容器;
Docker daemon服务会负责维护每个容器进程的生命周期,会保存所有运行时容器的信息,以及容器进程标识等信息。所以当我们使用docker client启停容器时,其实是委托Docker daemon具体来执行容器进程的启停。
戳下面阅读
👇
我的第三本书 我的第二本书 我的第一本书
程序员的办公神器 ForkJoinPool K8s网络模型
我的视频号
点亮再看哦👇