1. RyoMa_0923

    No comment

    RyoMa_0923
Changes in tags
Changes in body
Source | HTML | Preview
@@ -1,213 +1,217 @@
-Ubuntuでインストールしたdockerはデフォルトでは/var/lib/docker配下にイメージを格納します。
+Ubuntuでインストールしたdockerはデフォルトでは
+/var/lib/docker配下にイメージを格納します。
-とは言うでも/var/lib/dockerのマウントしてるボリュームサイズそんなに大きくないよ!なんてことあると思います。
+とは言うでも/var/lib/dockerを含んだ
+ボリュームのサイズがそんなに大きくないよ!
+なんてことあると思います。
その変更方法。(とハマった部分)
# (失敗例) /etc/defaults/dockerを変更
## dockerの向き先の変更
dockerの各種ファイルの格納先を変更するには、
/etc/defaults/dockerを編集するらしい。
DOCKER_OPTSを変更すればよし。
```Bash:/etc/defaults/dockerの変更内容
DOCKER_OPTS="-g /opt/docker"
```
## 変更の反映
```Bash:変更の反映
sudo systemctl restart docker
```
よし、これで... **反映されてない**。
## そして失敗
/etc/defaults/dockerファイルを見てみるとこんな記述が。
```txt:dockerファイルの記述
#
# THIS FILE DOES NOT APPLY TO SYSTEMD
#
# Please see the documentation for "systemd drop-ins":
# https://docs.docker.com/engine/articles/systemd/
#
```
はい、死んだ。:cry:
systemdではこのファイルは読まれませんとの注意書きが...... :skull:
# (成功例) docker.serviceを変更
じゃあ、systemdからdockerのプロセス立ち上げるときに
設定を入れればいいよねということで、systemdからdockerプロセス
を立ち上げる際の設定を確認する。
-そもそもsystemdのdockerプロセス立ち上げの設定がどこにあるのか分からないので、まずはそこから探してみる。
+そもそもsystemdのdockerプロセス立ち上げの設定が
+どこにあるのか分からないので、まずはそこから探してみる。
-systemdのdocker.serviceの設定を覗いてみる
+systemdのdocker.serviceの設定を覗く(チラチラ)
```Bash:docker.serviceの状態
sudo systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2016-07-10 09:52:28 UTC; 20min ago
Docs: https://docs.docker.com
Main PID: 2061 (docker)
Tasks: 17
Memory: 14.5M
CPU: 685ms
CGroup: /system.slice/docker.service
├─2061 /usr/bin/docker daemon -H fd://
└─2068 docker-containerd -l /var/run/docker/libcontainerd/docker-containerd.sock --runtime docker-runc --start-timeout 2m
```
-設定ファイルは/lib/systemd/system/docker.serviceにあるみたい。
+設定ファイルは **/lib/systemd/system/docker.service** にあるみたい。
## docker.serviceの中身
```ini:docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=docker.socket
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/docker daemon -H fd://
MountFlags=slave
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
[Install]
WantedBy=multi-user.target
```
ExecStartの設定を変えると良さそう。
ということで変更。
```ini:docker.service(変更後)
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=docker.socket
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/docker daemon -H fd:// -g /opt/docker
MountFlags=slave
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
[Install]
WantedBy=multi-user.target
```
## docker再起動と確認、そして成功
```Bash:docker再起動
sudo systemctl restart docker
```
```Bash:出力メッセージ
Warning: docker.service changed on disk. Run 'systemctl daemon-reload' to reload units.
```
...そーいや、systemdの構成ファイル変更したらsystemctl daemon-reloadいるんでした。
```Bash:docker再起動(正しい版)
sudo systemctl daemon-reload
sudo systemctl restart docker
```
特に何もなくプロンプトが戻ってきた。
```Bash:dockerプロセスの状態確認
ps -ef | grep docker
root 2891 1 3 10:23 ? 00:00:00 /usr/bin/docker daemon -H fd:// -g /opt/docker
root 2899 2891 0 10:23 ? 00:00:00 docker-containerd -l /var/run/docker/libcontainerd/docker-containerd.sock --runtime docker-runc --start-timeout 2m
ubuntu 2955 1465 0 10:23 pts/0 00:00:00 grep --color=auto docker
```
ちゃんと指定した部分が反映されている。よかった。
念のため、-gで指定したディレクトリの中も覗いてみる。
```Bash:/opt/dockerディレクトリのチェック
ls /opt/docker
aufs containers image network tmp trust volumes
```
/var/lib/docker配下と同等のディレクトリ構成が確認できた。
多分これでいいはず。
**イメージ以外の部分も変更されちゃってるけどそこは勘弁してください。**
# もっと行儀の良い方法(追記版)
docker.serviceファイルのExecStartの値を直接いじっていたけれどもできれば今後、dockerのデーモン立ち上げの際のオプションについては色々検討したいのでいじれるようにしたい。
けども、 **docker.serviceファイルは直接いじりたくない** ので
ExecStartの中で指定している **dockerコマンドのオプション部分だけ外部化したい**。
ということで、こんな感じにdocker.serviceファイルを変更してみた。
```ini:docker.serviceファイルの内容(抜粋・変更前)
[Service]
Type=notifycgroup feature set required
ExecStart=/usr/bin/docker daemon -H fd:// -g /opt/docker
```
```ini:docker.serviceファイルの内容(抜粋・変更後)
[Service]
Type=notify
EnvironmentFile=/opt/config/docker
ExecStart=/usr/bin/docker daemon $OPTIONS
```
EnvironmentFileで/opt/config/dockerに記載の環境変数を読み込むように変更。
```Bash:/opt/config/dockerの内容
OPTIONS="-H fd:// -g /opt/docker"
```
で、dockerを再起動。今度はしくじらぬぞ。
```Bash:docker再起動
sudo systemctl daemon-reload
sudo systemctl restart docker
```
```Bash:dockerプロセスの確認
ps -ef | grep docker
root 4034 1 0 11:45 ? 00:00:00 /usr/bin/docker daemon -H fd:// -g /opt/docker
root 4040 4034 0 11:45 ? 00:00:00 docker-containerd -l /var/run/docker/libcontainerd/docker-containerd.sock --runtime docker-runc --start-timeout 2m
ubuntu 4098 1465 0 11:46 pts/0 00:00:00 grep --color=auto docker
```
OK.OKこれで安心。