Docker实战笔记
建立持久化的容器
自动重启容器
创建容器时使用--restart标志,就可以通知Docker完成以下操作:
从不重新启动
检测到故障时尝试重新启动
当检测到故障时,在一段预定的时间后重新开始尝试重启
不管任何条件,始终重新启动容器
Docker 针对定时尝试重新启动,采取了指数回退策略(将花在前一次等待连接尝试的时间加倍):
例如:
Docker run -d --name backoff-detector --restart always busybox date
接着在几秒钟后,使用尾随日志功能来观察回退和重新启动:
Docker logs -f backoff-detector
但是在补偿期间,容器并没有运行,容器等待重新启动的时候,仍是在重新启动的状态。在回退探测容器时,尝试运行另一个进程:
Docker exec backoff-deteor echo Just a Test
运行该命令会导致的错误,这意味着那些处于运行状态时才能做到的事情此时都无法做到,比如在容器中执行其他命令。
- 使用init和supervisor进程维持容器的运行状态
init或supervisor进程,用于启动和维护其他程序状态。
在linux中,PID#1是init进程。
启动示例容器:
Docker run -d -p 80:80 --name lamp-test tutum/lamp
使用docker top命令,该容器中能看到哪些进程正运行着:
Docker top lamp-test
其中top显示的是PID值。
如需要获得该列表,运行以下exec子命令
Docker exec lamp-test ps
运行该命令时,PID列中的值会有所不同
插入PID:
Docker exec lamp-test kill <PID>
使用init或supervisor程序的一个常见代替方法是使用一个脚本。
因此可以在启动wordpress进程前,运行脚本验证和设置默认环境变量,来启动创建的wordpress容器。
可以通过覆盖容器启动脚本,例如,使用命令来查看启动脚本内容:
Docker run wordpress:4 cat /entrypoint.sh
但是会失败。将命令设置为cat/entrypoint.sh,docker容器仍会在运行该命令之前会先执行人口点命令。重新尝试可以使用--entrypoint标志来运行指定程序,并传递参数:
Docker run --entrypoint=”cat” \
Wordpress:4 /entrypoint.sh
这里使用cat命令作为容器的执行的入口,将/entrypoint.sh作为cat命令的参数。