Docker-核心组件

359 阅读2分钟

1:Docker架构

  • Docker整体是采用C/S模式,主要由客户端和服务端组成,客户端负责发送操作指令,服务端负责接收并处理客户端操作,并将结果返回给客户端

2:组件:docker

  • docker是Docker客户端的一种实现,它是一个二进制文件,对用户可见的操作形式是docker命令,通过docker可以完成所有Docker客户端与服务端的通信,当然还可以通过REST API,SDK等多种形式与Docker服务端进行通信

3:组件:dockerd

  • dockerd是真正处理Docker接收客户端请求,执行具体的处理任务,处理完成后将结果返回给客户端

4:组件:docker-init

  • 如果你熟悉linux系统,那应该知道Linux系统中,1号进程是init进程,是所有进程的父进程。主机上的进程出现问题时,init进程可以帮我们回收这些进程,同样的,在容器内部,当我们自己的业务进程没有回收子进程的能力时,在执行docker run启动容器的时候加上 --init参数,此时Docker会使用docker-init作为1号进程,帮你管理容器内的子进程,例如回收僵尸进程等

5:组件:docker-proxy

  • docker-proxy主要是用来做端口映射的,当我们使用docker run的时候,如果使用了-p参数,docker-proxy组件就会把容器内的相应的端口映射到主机上来,底层是依赖于iptables实现的

6:组件:containerd

  • containerd从Docker1.11版本正式从dockerd中剥离出来,它的诞生完全遵循与OCI标准,是容器标准化的产物。
  • containerd不仅管理着容器的生命周期,同时还负责其它的一些功能
    • 1:镜像管理:例如容器运行前从镜像仓库拉取镜像到本地
    • 2:接收dockerd请求:通过适当的参数调用runc启动容器
    • 3:管理存储相关资源
    • 4:管理网络相关资源

7:组件:containerd-shim

  • containerd-shim主要的作用是将containerd和真正的容器进行解耦,使用containerd-shim作为容器的父进程,从而实现重启containerd不影响已经启动的容器进程

8:组件:ctr

  • ctr实际上是containerd-ctr,它是containerd的客户端,主要用来开发和调试,在没有dockerd的情况下,ctr可以作为Docker的客户端,直接向containerd守护进程发送操作容器的请求

组件:runc

  • runc是一个命令行工具,可以直接用来创建和运行容器