手机版

Docker管理指南(2) – 自动启动容器

时间:2020-03-19 来源:互联网 编辑:宝哥软件园 浏览:
使用进程管理器示例upstartsystemd

docker 1.2版本,docker机制内置了当容器退出时重启它们的重启策略。如果设置了,重启策略会在docker daemon启动时使用,如经典场景系统启动时。同时重启策略会确保链接容器以正确的顺序启动。
如果重启策略没有满足你的需求(如你可能有非docker进程依赖docker容器),你可以使用进程管理器,如upstart,systemd或supervisor。

使用进程管理器

docker默认不会设置任何的重启策略,不过需要注意它们会与大多数的进程管理器冲突。所以如果你使用了进程管理器就不要设置重启策略了。
当你设置好你的镜像并已经运行容器,你可以把它们附加到进程管理器来管理。当你执行docker start -a,docker就会自动附着所有运行的容器,或按需启动并转向所有信号以便进程管理器在一个容器停止能探测到并正确重启它。

示例

下面的示例显示两个进程管理器的配置,upstart和systemd。在这个示例中我们假设你已经启动了一个Redis容器,命名为redis_server。这些文件定义了当docker daemon启动时自动启动容器。

upstart

description "Redis container"
author "Me"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
  /usr/bin/docker start -a redis_server
end script

systemd

[Unit]
Description=Redis container
Requires=docker.service
After=docker.service
 
[Service]
Restart=always
ExecStart=/usr/bin/docker start -a redis_server
ExecStop=/usr/bin/docker stop -t 2 redis_server
 
[Install]
WantedBy=default.target

如果你想设置为一个系统服务,把上面的内容放到/etc/systemd/system目录下的一个文件,如/etc/systemd/system/docker-redis_server.service。
如果你需要传递选项到redis容器,如–env,那么你需要使用docker run而不是docker start来启动容器。这个会每次服务启动时创建一个新的容器,这容器当服务停止时会自动停止和删除。

[Service]
...
ExecStart=/usr/bin/docker run --env foo=bar --name redis_server redis
ExecStop=/usr/bin/docker stop -t 2 redis_server
ExecStopPost=/usr/bin/docker rm -f redis_server
...

要使用这个服务,重载systemd和启动服务:

systemctl daemon-reload
systemctl start docker-redis_server.service

设置开机启动:

systemctl enable docker-redis_server.service

版权声明:Docker管理指南(2) – 自动启动容器是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

相关文章推荐