1. manabuishiirb

    No comment

    manabuishiirb
Changes in body
Source | HTML | Preview
@@ -1,159 +1,186 @@
# 目的
この記事では、docker run --restart=alwaysをつけて起動したコンテナは、dockerデーモンの再起動や、マシンの再起動をしたときに、どうなるのかを調べました。
## 2016-09-02
1.12.1 に関しても調べ始めました。
# 結論
--restart=alwaysをつけて起動すると、
* dockerデーモンの再起動
* マシンの再起動
どちらでも、コンテナが再起動してくれました。
# 環境
docker-machineを使って用意しました
```
docker-machine create -d virtualbox local
```
|ソフトウェア|version|
| -------- |-------|
|docker|1.8.1|
|docker-machine|0.4.0 (9d0dc7a)|
## 1.12.1
```
docker-machine create --virtualbox-boot2docker-url "https://github.com/boot2docker/boot2docker/releases/download/v1.12.1/boot2docker.iso" -d virtualbox docker1.12.1
```
|ソフトウェア|version|
| -------- |-------|
|docker|1.12.1|
|docker-machine|0.5.6, build 61388e9|
# 動機とか、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 registry:2
1bb83bafc038a138e3f60e77433886c8b82f98c1d4ad0e8fb71bbc26071e7b58
```
## オプションを確認してみる。
+
+
```
docker@local:~$ docker inspect registry
```
必要なところだけ抜粋すると次のような感じになっています。
```
"RestartPolicy": {
"Name": "always",
"MaximumRetryCount": 0
},
```
--restart=alwasys
をつけないで、別のコンテナを起動してみたら次のような感じになりました。
+起動
+
+```
+docker run -d -p 80:80 --name nginx nginx:latest
+```
+
+RestartPolicy
+
```
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
```
RestartPolicyのName のところが、変わっていることがわかると思います。
+### 1.12.1
+
+1.12.1でも同じ。
+
# 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?
```
止まっているのでコンテナなどはみえません。
+#### 1.12.1
+
+1.12.1 でも同じ
+
+
### 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
```
たしかに立ち上がっています
+#### 1.12.1
+
+1.12.1でも同じ
+
# マシンを再起動してみる
再起動してみました。
```
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
```
たしかに動いています。
+## 1.12.1
+
+1.12.1 でも同じでした
+
# その他
このオプションは起動中に変更できるのか調べてみましたが、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)