乐趣区

关于docker:DOCKER特性-LIVE-RESTORE

咱们都晓得 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 产生问题导致不可用的状况,缩小容器的停机工夫,不过其也有肯定的限度。

  1. Docker 版本升级限度

    Live Restore 仅反对 Docker 补丁版本升级时可用,也就是 YY.MM.x 最初一位发生变化的降级,而不反对大版本的降级。在进行大版本升级后,可能会导致 Daemon 无奈从新连贯到运行中容器的问题,这时候须要手动进行运行的容器。

  2. Daemon 选项变更

    也就是说 Live Restore 仅仅在某些 Daemon 级别的配置选项不产生扭转的状况工作,例如 Bridge 的 IP 地址,存储驱动类型等。如果在重启 Daemon 时候,这些选项产生了扭转,则可能会到 Daemon 无奈从新连贯运行中的容器,这时也须要手动进行这些容器。

  3. 影响容器的日志输入

    如果 Daemon 长时间进行,会影响运行容器的日志输入。因为默认状况下,日志管道的缓冲区大小为 64k,当缓冲写满之后,必须启动 Daemon 来刷新缓冲区。

  4. 不反对 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

退出移动版