2.2.5、自动启动容器

自动启动容器

从Docker 1.2起,重启策略作为Docker内置机制,为了重启那些处于退出状态的容器。如果设置了重启策略,在Docker守护进程启动的时候会被触发,一般发生在系统重启后。重启策略将保证连接容器的启动顺序。

如果重启策略不符合你的需求(例如,依赖Docker容器的非Docker进程),你可以使用一个类似upstartsystemd 或 supervisor 进程管理器来替代。 

使用一个进程管理器

Docker默认情况下,不会设置任何的重启策略,但是要注意,它们和大多数的进程管理器不兼容。所以,如果你正在使用一个进程管理器,请不要设置重启策略。

注意:在Docker 1.2之前的版本,Docker容器的重启必须要Prior to Docker 1.2, Docker容器的重启策略默认呢是打开的,需要显示设置禁用它。你可以参考以前版本的相关文档了解相关的细节。

当你构建完你的镜像,且对于你运行中的容器感到很满意了,你可以附加一个进程管理器去管理它。当你执行docker start -a时,Docker将会附加到正在运行的容器,或启动它。如果需要转发所有的信号以便进程管理器可以探测,当一个容器停止和正确重启。

这里提供几个upstartsystemd和Docker整合实例脚本。

例子

后面的例子中,将向你展示两个流行的进程管理器(upstartsystemd)的配置文件。在这些例子里,我们假定我们已经创建一个使用了 --name=redis_server参数、运行着Redis的容器。这些文件定义了一个新的服务,它会在Docker守护进程启动后启动。

upstart

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

systemd

[Unit]Description=Redis containerRequires=docker.serviceAfter=docker.service
[Service]Restart=alwaysExecStart=/usr/bin/docker start -a redis_serverExecStop=/usr/bin/docker stop -t 2 redis_server
[Install]WantedBy=local.target

如果你需要传递选项到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 ; /usr/bin/docker rm -f redis_server
...

 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值