关于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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理