0
点赞
收藏
分享

微信扫一扫

docker组件介绍与分析

墨香子儿 2023-09-05 阅读 46

一.命令行工具介绍

默认执行yum install -y docker后会安装以下docker命令行工具

[root@localhost bin]# ls -l | grep docker
-rwxr-xr-x. 1 root root   33069608 8月  21 2018 docker
-rwxr-xr-x. 1 root root   38088856 8月  21 2018 docker-containerd
-rwxr-xr-x. 1 root root   20895160 8月  21 2018 docker-containerd-ctr
-rwxr-xr-x. 1 root root    4173632 8月  21 2018 docker-containerd-shim
-rwxr-xr-x. 1 root root   68608880 8月  21 2018 dockerd
-rwxr-xr-x. 1 root root     849224 8月  21 2018 docker-init
-rwxr-xr-x. 1 root root    2411096 8月  21 2018 docker-proxy
-rwxr-xr-x. 1 root root    7639448 8月  21 2018 docker-runc

1.docker     docker client用来发送客户端指令

2.dockerd     docker daemon 守护进程,用来管理所有docker进程,被删除后已创建的docker应用将被停止

3.docker-containerd   实际管理docker的进程,被删除后,dockerd会将其拉起,主要实现功能:日志,镜像,存储,网络等

4.docker-containerd-ctr        containerd命令行工具

5.docker-containerd-shim    实际docker应用的载体,表现形式为docker ps -a看到的进程,可以使用ps aux | grep nginx查看对应进程

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

7.docker-proxy                     负责端口转发,ps aux | grep docker可以查看到具体进程

8.docker-runc                        负责实际执行容器启停的命令行工具,执行dockerfile后会退出,被containerd调用

二.调用关系图

docker组件介绍与分析_docker

docker(客户端CLI命令)   ->  dockerd(服务端)  -> containerd -> 创建 containerd-shim  -> runc工具

Docker将单体引擎拆分为三部分,分别为runC、containerd和dockerd,其中runC主要负责容器的运行和生命周期的管理(低层运行时)、containerd主要负责容器镜像的下载和解压等镜像管理功能(高层运行时)、dockerd主要负责提供镜像制作、上传等功能同时提供容器存储和网络的映射功能,同时也是Docker服务器端的守护进程,用来响应Docker客户端(命令行CLI工具)发来的各种容器、镜像管理的任务。

三.以下演示进程之间的关系

A.创建一个nginx应用:

docker run -dit -p 30071:80 —name nginx nginx


[root@localhost bin]# ps aux | grep docker
root      3470  0.1 12.0 628228 60168 ?        Ssl  10:01   0:01 /usr/bin/dockerd      # 守护进程
root      3476  0.1  5.4 336436 27224 ?        Ssl  10:01   0:01 docker-containerd --config /var/run/docker/containerd/containerd.toml    # 实际干活的进程
root      3618  0.0  0.5 108968  2636 ?        Sl   10:02   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 30071 -container-ip 172.17.0.2 -container-port 80  #端口转发
root      3623  0.0  0.6   7488  3160 ?        Sl   10:02   0:00 docker-containerd-shim -namespace moby -workdir    /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/ea01d464ff89d29a275818bb86444bbfdcff3b76e38aca02fb83c22a0cdb1e46 -address /var/run/docker/containerd/docker-containerd.sock -containerd-binary /usr/bin/docker-containerd -runtime-root /var/run/docker/runtime-runc  # 实际容器应用载体和runc工具
[root@localhost bin]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
ea01d464ff89        nginx               "/docker-entrypoint.…"   21 minutes ago      Up 18 minutes       0.0.0.0:30071->80/tcp   nginx

B.删除dockerd守护进程,docker应用无法使用

[root@localhost bin]# ps aux | grep docker
root      4079  1.7 10.5 609208 52796 ?        Ssl  10:24   0:00 /usr/bin/dockerd
root      4085  0.5  5.2 317580 25952 ?        Ssl  10:24   0:00 docker-containerd --config /var/run/docker/containerd/containerd.toml
root      4241  0.0  0.1 112824   980 pts/0    S+   10:24   0:00 grep --color=auto docker
[root@localhost bin]# kill -9 4079
[root@localhost bin]# ps aux | grep docker
root      4243 13.0 10.3 599956 51556 ?        Ssl  10:25   0:00 /usr/bin/dockerd
root      4249  3.0  5.2 317516 26144 ?        Ssl  10:25   0:00 docker-containerd --config /var/run/docker/containerd/containerd.toml
[root@localhost bin]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                   NAMES
ea01d464ff89        nginx               "/docker-entrypoint.…"   26 minutes ago      Exited (0) 56 seconds ago   0.0.0.0:30071->80/tcp   nginx

C.删除docker-contained,将会被自动拉起,不影响应用使用

[root@localhost bin]# ps aux | grep docker | grep -v grep
root      4243  0.2 11.1 619772 55560 ?        Ssl  10:25   0:00 /usr/bin/dockerd
root      4249  0.1  5.3 317580 26652 ?        Ssl  10:25   0:00 docker-containerd --config /var/run/docker/containerd/containerd.toml
root      4394  0.0  0.5 108968  2636 ?        Sl   10:27   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 30071 -container-ip 172.17.0.2 -container-port 80
root      4399  0.0  0.5   8896  2808 ?        Sl   10:27   0:00 docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/ea01d464ff89d29a275818bb86444bbfdcff3b76e38aca02fb83c22a0cdb1e46 -address /var/run/docker/containerd/docker-containerd.sock -containerd-binary /usr/bin/docker-containerd -runtime-root /var/run/docker/runtime-runc
[root@localhost bin]# kill -9 4249
[root@localhost bin]# ps aux | grep docker | grep -v grep
root      4243  1.1 13.6 631720 68060 ?        Ssl  10:25   0:02 /usr/bin/dockerd
root      4394  0.0  0.5 108968  2636 ?        Sl   10:27   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 30071 -container-ip 172.17.0.2 -container-port 80
root      4399  0.0  0.5   8896  2808 ?        Sl   10:27   0:00 docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/ea01d464ff89d29a275818bb86444bbfdcff3b76e38aca02fb83c22a0cdb1e46 -address /var/run/docker/containerd/docker-containerd.sock -containerd-binary /usr/bin/docker-containerd -runtime-root /var/run/docker/runtime-runc
[root@localhost bin]# ps aux | grep docker | grep -v grep
root      4243  2.8 13.8 632840 69172 ?        Ssl  10:25   0:05 /usr/bin/dockerd
root      4394  0.0  0.5 108968  2636 ?        Sl   10:27   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 30071 -container-ip 172.17.0.2 -container-port 80
root      4399  0.0  0.5   8896  2808 ?        Sl   10:27   0:00 docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/ea01d464ff89d29a275818bb86444bbfdcff3b76e38aca02fb83c22a0cdb1e46 -address /var/run/docker/containerd/docker-containerd.sock -containerd-binary /usr/bin/docker-containerd -runtime-root /var/run/docker/runtime-runc
root      4485  0.6  5.1 381996 25712 ?        Ssl  10:28   0:00 docker-containerd --config /var/run/docker/containerd/containerd.toml
[root@localhost bin]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
ea01d464ff89        nginx               "/docker-entrypoint.…"   30 minutes ago      Up About a minute   0.0.0.0:30071->80/tcp   nginx

D.删除docker-proxy,docker-proxy将变成僵尸进程,且应用无法访问,此时需要删除dockerd,僵尸进程才可以删除

[root@localhost bin]# !ps
ps aux | grep docker | grep -v grep
root      4243  1.8 13.8 632840 69172 ?        Ssl  10:25   0:05 /usr/bin/dockerd
root      4394  0.0  0.5 108968  2636 ?        Sl   10:27   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 30071 -container-ip 172.17.0.2 -container-port 80
root      4399  0.0  0.5   8896  2840 ?        Sl   10:27   0:00 docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/ea01d464ff89d29a275818bb86444bbfdcff3b76e38aca02fb83c22a0cdb1e46 -address /var/run/docker/containerd/docker-containerd.sock -containerd-binary /usr/bin/docker-containerd -runtime-root /var/run/docker/runtime-runc
root      4485  0.1  5.2 383116 25972 ?        Ssl  10:28   0:00 docker-containerd --config /var/run/docker/containerd/containerd.toml
[root@localhost bin]# kill -9 4394
[root@localhost bin]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
ea01d464ff89        nginx               "/docker-entrypoint.…"   32 minutes ago      Up 3 minutes        0.0.0.0:30071->80/tcp   nginx
[root@localhost bin]# ps aux | grep docker | grep -v grep
root      4243  1.6 13.8 632840 69172 ?        Ssl  10:25   0:05 /usr/bin/dockerd
root      4394  0.0  0.0      0     0 ?        Z    10:27   0:00 [docker-proxy] <defunct>
root      4399  0.0  0.5   8896  2808 ?        Sl   10:27   0:00 docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/ea01d464ff89d29a275818bb86444bbfdcff3b76e38aca02fb83c22a0cdb1e46 -address /var/run/docker/containerd/docker-containerd.sock -containerd-binary /usr/bin/docker-containerd -runtime-root /var/run/docker/runtime-runc
root      4485  0.1  5.2 383116 25972 ?        Ssl  10:28   0:00 docker-containerd --config /var/run/docker/containerd/containerd.toml
[root@localhost bin]# ps aux | grep docker | grep -v grep
root      4243  1.6 13.8 632840 69172 ?        Ssl  10:25   0:05 /usr/bin/dockerd
root      4394  0.0  0.0      0     0 ?        Z    10:27   0:00 [docker-proxy] <defunct>
root      4399  0.0  0.5   8896  2808 ?        Sl   10:27   0:00 docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/ea01d464ff89d29a275818bb86444bbfdcff3b76e38aca02fb83c22a0cdb1e46 -address /var/run/docker/containerd/docker-containerd.sock -containerd-binary /usr/bin/docker-containerd -runtime-root /var/run/docker/runtime-runc
root      4485  0.1  5.2 383116 25972 ?        Ssl  10:28   0:00 docker-containerd --config /var/run/docker/containerd/containerd.toml
[root@localhost bin]# !curl
curl http://localhost:30071
curl: (7) Failed connect to localhost:30071; 拒绝连接

E.删除docker-shim,该docker应用无法使用

[root@localhost bin]# ps aux | grep docker | grep -v grep
root      4617  0.4 10.8 619772 54160 ?        Ssl  10:35   0:00 /usr/bin/dockerd
root      4623  0.1  5.3 317580 26672 ?        Ssl  10:35   0:00 docker-containerd --config /var/run/docker/containerd/containerd.toml
root      4801  0.0  0.5 108968  2632 ?        Sl   10:36   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 30071 -container-ip 172.17.0.2 -container-port 80
root      4806  0.0  0.4   7360  2488 ?        Sl   10:36   0:00 docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/ea01d464ff89d29a275818bb86444bbfdcff3b76e38aca02fb83c22a0cdb1e46 -address /var/run/docker/containerd/docker-containerd.sock -containerd-binary /usr/bin/docker-containerd -runtime-root /var/run/docker/runtime-runc
[root@localhost bin]# kill -9 4806
[root@localhost bin]# ps aux | grep docker | grep -v grep
root      4617  0.3 11.0 619772 54960 ?        Ssl  10:35   0:00 /usr/bin/dockerd
root      4623  0.1  5.3 317580 26672 ?        Ssl  10:35   0:00 docker-containerd --config /var/run/docker/containerd/containerd.toml
[root@localhost bin]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
ea01d464ff89        nginx               "/docker-entrypoint.…"   38 minutes ago      Exited (137) 11 seconds ago                       nginx

举报

相关推荐

0 条评论