我试图了解容器的生命周期。下载 Alpine 图像,使用“docker container run”命令构建容器,所有这些容器均已运行且处于“已退出”状态。使用“docker container start”命令时,一些容器处于启动状态(运行),而某些或立即退出。关于为何这种行为围绕状态的差异有何想法?我观察到的一个区别是,相对于基础镜像中的文件结构,修改了处于启动状态的容器。
希望我能够在适当的情况下提出方案。帮助我理解概念。
最佳答案
长序列如下:
docker create
具有各种设置的容器。某些设置可能是从基础图像继承的。它处于“已创建”状态;它的文件系统存在,但没有任何运行。 docker start
容器。如果容器有一个入口点(Dockerfile ENTRYPOINT
指令,docker create --entrypoint
选项),则该入口点将以命令作为参数运行;否则,将直接运行命令(Dockerfile CMD
指令,docker create
镜像名称后的任何选项)。此过程在容器中获取过程ID 1,并附带相应的权利和责任。容器处于“运行”状态。 docker stop
退出。容器处于“退出”状态。 docker rm
已停止的容器。容器文件系统中的所有内容都将永久丢失,并且不再显示在docker ps -a
或其他任何位置。 通常,您将使用
docker run
将这些步骤组合在一起。 docker run
单独执行前两个步骤(创建一个容器,然后启动它)。如果您使用docker run --rm
,它会执行上面列出的所有操作。(所有这些命令都与
docker container ...
命令相同,但是我习惯于简短一些的形式。)这里的关键点是容器运行着一些主要过程。通常,这是某种守护进程或服务器进程,通常在镜像的Dockerfile中指定。例如,如果您是
docker run ... nginx
,则为its Dockerfile ends withCMD ["nginx", "-g", "daemon off;"]
这成为主要的容器过程。
在早期探索中,仅运行一些基本分发镜像(
docker run --rm -it alpine
)是很常见的,但这并不是很有趣:生命周期序列的末尾是删除容器,一旦这样做,容器中的所有内容都会丢失。在标准使用中,您需要使用Dockerfile来构建自定义图像,并且在主题上有一个pretty good Docker tutorial。
关于docker - 如何理解容器状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55656753/