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发生问题导致不可用的情况,减少容器的停机时间,不过其也有一定的限制。
-
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
相关文章
- 微服务之springCloud-docker-feign-hystrix(六)
- 【Docker】docker安装GitLab
- Docker退出容器不关闭容器的方法
- 前后端项目部署-3, flask+Gunicorn+gevent+supervisor,docker部署,以及supervisor的使用
- docker镜像构建,Docker 镜像和容器的导入导出
- Docker - 构建镜像:使用docker build命令和Dockerfile文件
- [Docker] Run Short-Lived Docker Containers
- Docker详解(六)——Docker高级控制命令
- Docker 鸟瞰docker生态系统
- docker 每次都得source /etc/profile以及如何查看Docker容器环境变量、向容器传递环境变量
- 利用阿里云容器服务实现Docker微服务间的负载均衡和服务发现
- 【docker】解决 Failed with result ‘exit-code‘和Start request repeated too quickly和Failed to start Docker
- docker从零开始网络(四 ) host网络
- Docker使用阿里云docker镜像加速
- 79.第十七章 企业级容器技术docker -- Docker 镜像制作和管理、Docker 数据管理(七)
- 【云原生之Docker实战】使用docker部署Monica个人开源CRM系统
- 【云原生之Docker实战】使用docker部署短链接服务YOURLS
- 【云原生之Docker实战】安装docker镜像分析工具Dive
- docker 启动redis/nginx
- Docker----执行docker pull 下载镜像时报dial tcp: lookup registry-1.docker.io on 192.168.1.1:53: no such host错
- Docker学习笔记01:docker简介与架构
- Docker OCI容器标准和引擎架构
- Docker 镜像安全
- Ubuntu20.04二进制安装docker
- Docker学习笔记(三):查看docker 拉取的镜像位置和位置参数