前言
有一个朋友最近面试docker相关岗位,面试完之后和我说,非常不好面试官问的都不知道。我就好奇了,现在的面试关到底面试什么问题,仔细询问之后,才了解到,问的问题是基础的docker策略。那么我们今天就聊聊docker相关的策略,以docker的重启策略为例。
start策略&stop策略
在讲restart策略之前我们要介绍一下start和stop策略。
所为的容器,可以理解为运行在物理服务器上的一个进程(守护进程)。我们用dockerrun命令创建一个容器(进程),使用dockerstart命令启动一个容器(进程),使用dockerstop命令停止一个容器(进程)。
这些命令通过向容器这个进程发送一个信号(SIGTERM),容器接收到这个信号执行相应的操作。如果希望快速停止容器,我们可以使用dockerkill命令,发送SIGKILL信号。
restart策略
策略一:no,默认策略,在容器退出时不重启容器
策略二:on-failure,在容器非正常退出时(退出状态非0),才会重启容器
策略三:on-failure:3,在容器非正常退出时重启容器,最多重启3次
策略四:在容器退出时总是重启容器
策略五:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
总共有5个策略,所以当我们使用dockerrestar命令时,并不一定是执行了dockerstop&dockerstart命令。也解释了日常工作环境中,运维人员使用dockerrestart无法实现容器重启。那么现在我们知道restart默认策略是策略一,如果我们希望改一下restart策略就应该在dockerrun中指定。
dockerrun-itd--restart=alwayscentos
根据我们的日常业务需求,给docker设置其相应的策略。
退出的状态码
当容器退出的时候会有相应的状态码
0:表示正常退出
非0:表示异常退出(退出状态码采用chroot标准)
125:Docker守护进程本身的错误
126:容器启动后,要执行的默认命令无法调用
127:容器启动后,要执行的默认命令不存在
总结:
docker的每一个参数都涉及到很多学问,平时在使用这些参数创建容器时候,我们需要好好研究一下用到的参数。不然被有人问到,就会被diss了。