1. manabuishiirb

    Posted

    manabuishiirb
Changes in title
+docker run --restart=alwaysがどれくらいrestartしてくれるか調べた
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,145 @@
+# 目的
+
+この記事では、docker run --restart=alwaysをつけて起動したコンテナは、dockerデーモンの再起動や、マシンの再起動をしたときに、どうなるのかを調べました。
+
+# 結論
+
+--restart=alwaysをつけて起動すると、
+
+* dockerデーモンの再起動
+* マシンの再起動
+
+どちらでも、コンテナが再起動してくれました。
+
+# 環境
+
+docker-machineを使って用意しました
+```
+docker-machine create -d virtualbox local
+```
+
+|ソフトウェア|version|
+| -------- |-------|
+|docker|1.8.1|
+|docker-machine|0.4.0 (9d0dc7a)|
+
+
+# 動機とか、docker run --restart=always について
+
+最初にこのオプションを知ったのは、docker private registry をたてようと思って以下の記事を読んだときです。
+
+* [Deploying a registry server](https://docs.docker.com/registry/deploying/#running-on-localhost)
+
+その後、調べたら以下の記事があったので、いろいろ勉強になりました。
+
+* [Dockerの再起動オプション | SOTA](http://deeeet.com/writing/2014/09/17/docker-1-2-restart/)
+* [Docker run reference](https://docs.docker.com/reference/run/#restart-policies-restart)
+
+
+もともと常に起動していてほしいコンテナ(private registry, squid, gitbucket,,,)がいくつかあり、systemdとかにするかなとか考えていたのですが、どうもこのオプションでやりたいことができそうでした。
+
+
+# 検証
+
+## --restart=alwaysをつけて起動してみる。
+まずは起動してみます
+```
+docker@local:~$ docker run -d -p 5000:5000 --restart=always --name registry regi
+stry:2
+1bb83bafc038a138e3f60e77433886c8b82f98c1d4ad0e8fb71bbc26071e7b58
+```
+
+## オプションを確認してみる。
+
+```
+docker@local:~$ docker inspect registry
+```
+必要なところだけ抜粋すると次のような感じになっています。
+```
+ "RestartPolicy": {
+ "Name": "always",
+ "MaximumRetryCount": 0
+ },
+```
+
+--restart=alwasys
+
+をつけないで、別のコンテナを起動してみたら次のような感じになりました。
+
+```
+ "RestartPolicy": {
+ "Name": "no",
+ "MaximumRetryCount": 0
+ },
+```
+
+RestartPolicyのName のところが、変わっていることがわかると思います。
+
+# dockerデーモンの再起動
+
+### 現状確認
+実際にはstopしてstartしますが、そのまえに、今の状況を確認しておきます。
+
+```
+docker@local:~$ docker ps
+CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
+6a6e723d792a registry:2 "/bin/registry /etc/d" 6 minutes ago Up 6 minutes 0.0.0.0:15000->5000/tcp registry_no_restart
+1bb83bafc038 registry:2 "/bin/registry /etc/d" 8 minutes ago Up 8 minutes 0.0.0.0:5000->5000/tcp registry
+```
+コンテナが2つ動いています。
+
+### dockerデーモンを停止させる
+
+docker デーモンを止めます。
+
+```
+docker@local:~$ sudo /etc/init.d/docker stop
+```
+dockerの状況を確認します
+```
+docker@local:~$ docker ps
+Get http:///var/run/docker.sock/v1.20/containers/json: dial unix /var/run/docker.sock: no such file or directory.
+* Are you trying to connect to a TLS-enabled daemon without TLS?
+* Is your docker daemon up and running?
+```
+止まっているのでコンテナなどはみえません。
+
+### dockerデーモンを起動する
+dockerデーモンを起動します。
+```
+docker@local:~$ sudo /etc/init.d/docker start
+Need TLS certs for local,127.0.0.1,10.0.2.15,192.168.99.104
+-------------------
+```
+状況を確認します
+```
+docker@local:~$ docker ps
+CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
+1bb83bafc038 registry:2 "/bin/registry /etc/d" 11 minutes ago Up 3 seconds 0.0.0.0:5000->5000/tcp registry
+```
+たしかに立ち上がっています
+
+# マシンを再起動してみる
+
+再起動してみました。
+
+```
+docker@local:~$ uptime
+ 07:24:03 up 0 min, 2 users, load average: 5.93, 1.58, 0.53
+```
+状況を確認してみます。
+```
+docker@local:~$ docker ps
+CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
+1bb83bafc038 registry:2 "/bin/registry /etc/d" 14 minutes ago Up 15 seconds 0.0.0.0:5000->5000/tcp registry
+```
+たしかに動いています。
+
+# その他
+
+このオプションは起動中に変更できるのか調べてみましたが、docker 1.8.1 の時点ではできないようです。
+
+参考記事
+
+* [Setting and re-setting the restart policy of a Docker container — Brand Pending](http://www.brandpending.com/blog/2014/11/21/setting-and-re-setting-the-restart-behaviour-of-a-docker-container)
+* [Change container restart policy during run time - Google Groups](https://groups.google.com/forum/#!topic/docker-user/A4IXKC665cM)