乐趣区

关于java:docker专栏7容器自启动与守护进程停止后容器保活

本文为大家介绍容器自启动以及 docker 守护过程挂掉或者 docker 降级的状况下,如何保障容器服务的失常运行。次要蕴含三个局部

一、守护过程开机自启

在咱们装置 docker 的时候,介绍过启动 docker 守护过程的命令如下,须要人工手动执行。

systemctl start docker

如果咱们心愿在 linux 服务器启动的时候,就主动启动 Docker 守护过程,无需人工干预,就应用上面的命令即可

systemctl enable docker.service;

上面的两个命令大家依据本人的须要,在适合的场景下应用即可。

# 删除 docker 守护过程开机自启动配置
systemctl disable docker.service;
# 重新配置 docker 守护过程开机自启动
systemctl reenable docker.service;

二、容器自启动

docker 守护过程主动启动之后,如果咱们心愿某些容器可能随之也自启动提供并服务,在容器创立时应用如下命令即可:

# 留神 `--restart unless-stopped` 是可能实现自启动的要害参数
docker run -d --restart unless-stopped nginx

如果咱们曾经存在一个运行时容器,想让它减少容器自启动的能力,应用如下命令即可

docker update --restart unless-stopped nginx

重启策略阐明

unless-stopped 是笔者比拟罕用的重启策略,除此之外 docker 还提供了其余的重启策略,--restart的值能够是以下任何一种:

重启策略标记 形容
no 不要主动重启容器。(默认)
on-failure[:max-retries] 如果容器因程序运行谬误退出 (非正常退出),则重新启动容器。可选项配置:max-retries 示意尝试重新启动容器的最大次数,超过这个次数还启动失败就不重启了。
always 如果容器处于进行状态,则始终重新启动容器。例外情况:如果该容器是运维人员手动进行的,只有在 Docker 守护过程产生重启或者容器自身手动重启之后,才会持续 always 重启策略。
unless-stopped 在进行 Docker 守护程序之前曾经处于进行状态的容器,不会执行重启。其余的和 always 一样。

为什么我经常应用 unless-stopped 重启策略?

  • 一个服务器上有很多容器,其中一些是我手动进行的(被动行为)。这些容器即便重启服务器或重启 docker 守护过程之后,我也不心愿它们主动运行。所以我不必 always。
  • 在重启服务器或重启 docker 守护过程之前,处于良好运行状态的容器,在重启服务器或重启 docker 守护过程之后,通常也不会呈现因程序运行谬误导致的无奈重启的问题,所以我不必 on-failure。

三、守护过程进行期间保障容器服务失常

本文以上探讨的都是服务器重启、docker 守护过程重启之后如何保障容器的运行状态,并且尽量不须要人工参加。本大节次要阐明的内容是:如果咱们要降级 docker 的版本,咱们要进行 docker 的守护过程,然而咱们不想影响容器向用户提供服务。即:docker 守护过程停了,想要保障 docker 容器过程依然运行,这该怎么做?

默认状况下,当 Docker 守护过程终止时,它会敞开基于它运行的所有容器。然而能够通过配置形式,在守护程序过程不可用时放弃容器运行。此性能称为live-restore。live-restore 有助于缩小因为守护过程解体、打算中断或降级导致的容器进行服务的工夫。

{"live-restore": true}

配置形式就是在 /etc/docker/daemon.json 配置文件中退出下面的一行,这样守护过程进行之后,容器不会进行服务。
欢送关注我的布告号:字母哥杂谈,回复 003 赠送本文所在专栏《docker 修炼之道》的 PDF 版本,30 余篇精品 docker 文章。字母哥博客:zimug.com

退出移动版