咱们都晓得 Docker 是 C / S 模式架构,通过客户端(CLI)拜访 Docker Daemon 来创立和治理容器的。在默认状况下,当 daemon 终止的时候,会进行所有运行的容器。
因而咱们须要对 Docker Daemon 进行降级或者某些须要重启的保护操作时,都须要导致运行着的容器跟着重新启动。
Live Restore
其实,Docker 提供了一个个性,能够使得在 Daemon 不可用的时候,放弃容器持续运行,这样就缩小了在 Daemon 进行降级或者呈现问题的时候容器的停机工夫。那这个个性就叫做 Live Restore。
通过为 Docker Daemon 减少以下配置来开启 Live Restore 个性。在 Linux 上,默认的配置文件 /etc/docker/daemon.json 里增加
{"live-restore": true}
而后重启 docker 服务。如果应用 systemd 治理服务,能够通过 reload 来防止重启 docker 服务
sudo systemctl reload docker.service
其余状况下,能够发送 SIGHUP 信号给 dockerd 过程。
对于 Windows 和 MacOS 上的 Docker Desktop,能够通过 Desktop 节目的 Daemon 高级配置来开启 Live Restore。
配置实现后,能够尝试重启 Docker Daemon 来查看容器是否会放弃持续运行。重启之前查看容器的启动工夫
WSL - mengz docker container inspect portainer_edge_agent -f '{{.State.StartedAt}}'
2021-12-18T09:50:59.761725785Z
而后执行 sudo systemctl restart docker.service
,在查问一次容器的启动工夫,将发现启动工夫未发生变化,这阐明了容器并没有重启。
Live Restore 的限度
以后的 Live Restore 个性能够在进行 Daemon 保护,或者在 Daemon 产生问题导致不可用的状况,缩小容器的停机工夫,不过其也有肯定的限度。
-
Docker 版本升级限度
Live Restore 仅反对 Docker 补丁版本升级时可用,也就是 YY.MM.x 最初一位发生变化的降级,而不反对大版本的降级。在进行大版本升级后,可能会导致 Daemon 无奈从新连贯到运行中容器的问题,这时候须要手动进行运行的容器。
-
Daemon 选项变更
也就是说 Live Restore 仅仅在某些 Daemon 级别的配置选项不产生扭转的状况工作,例如 Bridge 的 IP 地址,存储驱动类型等。如果在重启 Daemon 时候,这些选项产生了扭转,则可能会到 Daemon 无奈从新连贯运行中的容器,这时也须要手动进行这些容器。
-
影响容器的日志输入
如果 Daemon 长时间进行,会影响运行容器的日志输入。因为默认状况下,日志管道的缓冲区大小为 64k,当缓冲写满之后,必须启动 Daemon 来刷新缓冲区。
-
不反对 Docker Swarm
Live Restore 只是独立 Docker 引擎的个性,而 Swarm 的服务是由 Swarm 管理器治理的。当 Swarm 管理器不可用时,Swarm 服务是能够在工作节点上持续运行的,只是不同通过 Swarm 管理器进行治理,直到 Swarm 治理复原工作。
总结
通过 Docker Daemon 的 live-restore 个性,咱们能够运行无守护过程(daemonless)的容器,这能够减小容器利用在对 Docker Daemon 进行保护时候的停机工夫,不过在应用时也有肯定的限度,例如对于降级引擎版本的限度。如果关注无守护过程的容器,能够进一步理解 Podman。
以上内容大部分来自 Docker 的官网文档,更具体的信息请参考 https://docs.docker.com/confi…。
该文章同步公布在 Mengz’s Blog