小白快速上手 Docker 02 | Docker 容器生命周期

容器生命周期

下图显示了容器生命周期的简化状态。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • Created
  • Running
  • Paused
  • Stopped
  • Deleted

现在让我们逐一讨论容器生命周期的每个状态:

创建状态(Created)

这是容器生命周期的第一个状态,在这个阶段,容器被创建但尚未启动。

通过运行docker create命令,我们可以在指定的镜像上创建一个薄的可写层,并准备运行主进程(由 CMD 和/或 ENTRYPOINT 定义)。需要注意的是,在创建状态下,容器已经存在,但并没有开始执行。

例如,以下命令使用nginx:alpine镜像创建一个名为app1的容器:

docker create --name app1 nginx:alpine

如果创建成功,终端会打印出新容器的ID。

运行状态(Running)

顾名思义,运行状态表示容器正在主动运行。在这个阶段,主进程已经开始执行。对于已经创建或停止的容器,我们可以使用docker start命令来启动它。

例如,要启动之前创建的app1容器,我们可以运行:

docker start app1

如果你不想先创建再启动容器,可以直接使用docker run命令,这样可以同时完成这两个步骤。以下命令将在后台创建并启动一个名为app2的容器:

docker run -d --name app2 nginx:alpine

暂停状态(Paused)

在某些情况下,我们可能需要暂停正在运行的容器。可以使用docker pause命令来暂停指定容器中所有的进程。

暂停时,容器的状态保持完整,包括磁盘和内存的内容。

需要注意的是,暂停的容器并不知道自己已经被暂停。

要暂停app1,可以运行:

docker pause app1

要恢复暂停的容器,我们可以使用docker unpause命令:

docker unpause app1

停止状态(Stopped)

停止状态表示容器不再主动运行其主进程。在该状态下,容器的磁盘部分会保留下来,但内存部分会被清除。这是暂停状态和停止状态之间的主要区别。

容器可以通过四种主要方式停止:

  • 使用docker stop命令。
  • 使用docker kill命令。
  • 当主容器进程退出或完成时。
  • 遇到“内存不足异常”(OOME)时。

让我们分别讨论一下 这几种方式。

1. 使用docker stop命令

此命令非常简单:

docker stop app1

当执行此命令时,主容器进程会接收到一个 SIGTERM 信号,允许其安全地关闭。如果在默认的宽限期(通常为 10 秒)内进程没有结束,系统会强制发送一个 SIGKILL 信号,立即终止进程。

2. 使用docker kill命令

与docker stop不同,docker kill直接将SIGKILL信号发送到主容器进程:

docker kill app2

这意味着docker stop允许容器安全终止(在宽限期内),而则docker kill立即终止进程。docker kill还可以使用–signal或-s发送任何信号,而不仅仅是 SIGKILL。例如,发送 SIGINT 信号:

docker kill -s SIGINT app1
3. 当主进程退出/完成时

如果容器的主进程已退出或完成,则容器可以自动停止。

这可能是因为主进程遇到异常、中断,或者在某个时刻执行的任务完成(而不是像服务器那样无限循环)。例如:

docker run alpine echo "hi"

在此命令中,echo "hi"在 alpine 容器内执行,打印“hi”后立即退出,导致容器自动停止。

4. 当遇到“内存不足异常”(OOME)时

如果容器尝试使用超过系统可用内存的数量,可能会遇到内存不足异常(OOME)。在这种情况下,某些容器甚至 Docker 守护进程可能会被加载终止。为了避免这种情况,确保应用在拥有足够内存的主机上运行是非常重要的。可以通过以下命令限制容器的最大内存使用:

docker run -m 50m redis:alpine

通过这个命令,Redis容器的内存使用不会超过50MB,超出部分可能会导致OOME。

已删除状态(Deleted)

对于状态或停止状态的容器可以使用docker rm命令删除。这将导致与容器相关的所有数据被删除,包括进程、文件系统、卷和网络映射创建。例如,要删除已经停止的app1容器,可以运行:

docker rm app1

如果容器正在运行或暂停时尝试删除,会收到错误提示说明,容器需要先停止。如果您确定要强制删除正在运行的容器,可以使用:

docker rm -f app1

容器生命周期高级部分

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值