当执行 docker run
指令后,Docker 会启动一个新的容器实例。这个过程中会涉及多个进程和组件的交互。以下是 docker run
指令执行后生成的主要进程和组件:
- Docker Daemon(守护进程):
- Docker Daemon 是 Docker 的后台服务,它长期运行并管理 Docker 容器、镜像、网络和卷等资源。
- 当执行
docker run
指令时,客户端(CLI 或其他 Docker API 调用者)会向 Docker Daemon 发送请求。
- Docker Containerd:
- Docker Containerd 是 Docker Daemon 的一部分,它负责容器的生命周期管理,如创建、启动、停止和删除容器。
- 当 Docker Daemon 接收到
docker run
请求后,它会调用 Docker Containerd 来创建和启动容器。
- Docker Containerd-Shim:
- Docker Containerd-Shim 是一个轻量级的进程,它作为容器运行时和 Docker Containerd 之间的中介。
- 每个容器都会有一个与之关联的 Docker Containerd-Shim 进程,它负责监听容器的状态变化,并将这些变化报告给 Docker Containerd。
- 容器内进程:
- 当容器启动时,它会根据 Dockerfile 中的
CMD
或ENTRYPOINT
指令来运行一个或多个进程。 - 这些进程是容器内的主要工作负载,它们执行容器所需的任务。
- 其他辅助进程(如需要):
- 根据容器的配置和需要,可能还会启动其他辅助进程,如日志收集器、监控代理等。
综上所述,在 Linux 系统中,你可以使用 ps
命令或 docker top
命令来查看容器内的进程列表。这些命令会显示容器内正在运行的进程及其相关信息。需要注意的是,Docker 使用了 Linux 的内核特性(如 cgroups 和 namespaces)来实现进程隔离和资源限制,因此容器内的进程和宿主机上的其他进程是相互隔离的。