1

我试图了解容器的生命周期。下载 alpine 镜像,使用“docker container run”命令构建容器,所有这些容器都运行并处于“Exited”状态。在使用“docker container start”命令时,一些容器处于启动状态(正在运行),一些容器或立即退出。关于为什么围绕状态的这种行为存在差异的任何想法?我观察到的一个区别是,保持启动状态的容器根据基本映像的文件结构进行了修改。

希望我能够将场景与适当的背景联系起来。帮助我理解这个概念。

4

1 回答 1

2

长序列如下:

  1. docker create是一个具有各种设置的容器。某些设置可能继承自底层图像。它处于“已创建”状态;它的文件系统存在,但没有运行。
  2. docker start是容器。如果容器有一个入口点(DockerfileENTRYPOINT指令,docker create --entrypoint选项),则运行该入口点,将命令作为参数;否则直接运行命令(Dockerfile指令,图像名称CMD后的任何选项)。docker create此进程在容器中获取进程 ID 1 以及随之而来的权利和责任。容器处于“运行”状态。
  3. 主进程退出,或管理员明确退出docker stop。容器处于“退出”状态。
  4. 或者,您可以重新启动一个停止的容器(虽然 IME 这很不寻常);转到第 2 步。
  5. docker rm是停止的容器。容器文件系统中的任何内容都将永久丢失,并且不再出现在docker ps -a其他任何地方。

通常,您会使用docker run将这些步骤组合在一起。 docker run它自己一起完成前两个步骤(创建一个容器然后启动它)。如果您docker run --rm执行上面列出的所有操作。

(所有这些命令都与命令相同docker container ...,但我习惯了略短的形式。)

这里的关键是容器运行了一些主进程。通常这是某种守护进程或服务器进程,通常在映像的 Dockerfile 中指定。例如,如果您是docker run ... nginx,则其 Dockerfile 以

CMD ["nginx", "-g", "daemon off;"]

这成为主要的容器进程。

docker run --rm -it alpine在早期的探索中,只运行一些基本的分发镜像(在标准使用中,您希望使用Dockerfile来构建自定义映像,并且有一个关于该主题的非常好的 Docker 教程

于 2019-04-12T17:58:00.587 回答