各システムの Docker 設定と実行¶
Docker のインストールに成功したら、 docker
デーモンはデフォルトの設定で動いています。
プロダクション環境では、システム管理者は組織における必要性に従い、 docker
デーモンの設定を変更し、起動・停止するでしょう。ほとんどの場合、システム管理者は docker
デーモンの起動・停止のために SysVinit
、 Upstart
、 systemd
といったプロセス・マネージャを設定するでしょう。
docker デーモンを直接実行¶
docker
デーモンは dockerd
コマンドで直接操作できます。デフォルトでは Unix ソケット unix:///var/run/docker.sock
をリッスンします。
$ dockerd
INFO[0000] +job init_networkdriver()
INFO[0000] +job serveapi(unix:///var/run/docker.sock)
INFO[0000] Listening for HTTP on unix (/var/run/docker.sock)
...
...
docker デーモンを直接設定¶
プロセス・マネージャの代わりに、docker daemon
コマンドを使って docker
デーモンを直接実行できます。 docker
をコマンドで直接実行時に、オプション設定を追加可能です。 docker
デーモンを設定するための他のオプションも追加できます。
デーモンで利用可能なオプション:
フラグ | 説明 |
---|---|
-D , --debug=false |
デバッグ・モードの有効化と無効化。デフォルトは false |
-H , --host=[] |
デーモンが接続するソケット |
--tls=false |
TLS の有効化と無効化。デフォルトは false |
以下は docker
デーモンに設定オプションを付けて実行する例です。
$ dockerd -D --tls=true --tlscert=/var/docker/server.pem --tlskey=/var/docker/serverkey.pem -H tcp://192.168.59.3:2376
3つのオプションがあります:
-D
(デバッグ)モードの有効化tls
を有効にするため、サーバ証明書と鍵を--tlscert
と--tlskey
で個々に指定tcp://192.168.59.3:2376
への接続をリッスン
コマンドライン・リファレンスの デーモンのフラグ一覧 に説明があります。
デーモンのデバッグ¶
更に捕捉しますと、管理者やオペレータがデーモンの実行時の挙動に関して、更に詳細な情報を得るには、デーモンのログレベルを「debug」に設定するか、 -D
オプションを付けてデバッグ・モードにします。デーモンからの応答が無くても、Docker デーモンに対して SIGUSR1
シグナルを送信することで、デーモンのログに追加された全てのスレッドを強制的に追跡します。Linux システム上でシグナルを送る一般的な方法は kill
シグナルを使います。例えば kill -USR1 <デーモンのpid>
を実行したら、デーモンのプロセスに SIGUSR1
シグナルを送信し、スタック・ダンプをデーモンのログに追加します。
注釈
スタック・トレースをログに保存するには、 デーモンのログレベルの設定は少なくとも「info」レベル以上にする必要があります。デフォルトのデーモンのログレベルは「info」に設定されています。
デーモンは SIGUSR1
シグナルを受け取った後、スタック・トレースをダンプしてログに出力します。スタック・トレースはデーモン内部の全ての goroutine の状態とスレッドの把握に使えます。
Ubuntu¶
Ubuntu 14.04
からはプロセス・マネージャに Upstart を使います。デフォルトでは、Upstart のジョブは /etc/init
に保管され、 docker
Upstart ジョブは /etc/init/docker.conf
にあります。
Ubuntu で Docker のインストール に成功した後、Upstart で稼働状態を確認するには、次のようにします。
$ sudo status docker
docker start/running, process 989
コンテナの実行¶
docker
デーモンは次のように開始・停止・再起動できます。
$ sudo start docker
$ sudo stop docker
$ sudo restart docker
Docker の設定¶
以下の例は、プロセス・マネージャに upstart
を使い Docker システムを設定する方法です。Ubuntu 15.04 以降はプロセス・マネージャに systemd
を使います。Ubuntu 15.04 以降は、 systemd における Docker の設定と管理 をご覧ください。
システム上にある docker
デーモンの設定は、 /etc/default/docker
ファイルを編集します。ここに DOCKER_OPTS
環境変数を指定可能です。
Docker オプションの設定を変更するには:
- ホストに
sudo
やroot
特権を持つユーザでログインします。
- ホスト上に
/etc/default/docker
ファイルがなければ作成します。Docker のインストール方法によっては、既にファイルが作成されている場合があります。
- 任意のエディタでファイルを開きます。
$ sudo vi /etc/default/docker
DOCKER_OPTS
変数に、次のオプションを指定します。これらのオプションはdocker
デーモンを実行する時に追加されます。
DOCKER_OPTS="-D --tls=true --tlscert=/var/docker/server.pem --tlskey=/var/docker/serverkey.pem -H tcp://192.168.59.3:2376"
これらのオプションの意味は:
-D
(デバッグ)モードの有効化tls
を有効にするため、サーバ証明書と鍵を--tlscert
と--tlskey
で個々に指定tcp://192.168.59.3:2376
への接続をリッスン
コマンドライン・リファレンスの デーモンのフラグ一覧 に説明があります。
- ファイルを保存して閉じます。
docker
デーモンを再起動します。
$ sudo restart docker
docker
デーモンが指定したオプションで実行しているか、ps
コマンドで確認します。
$ ps aux | grep docker | grep -v grep
ログ¶
Upstart ジョブのログは、デフォルトでは /var/log/upstart
に保管されており、 docker
デーモンのログは /var/log/upstart/docker.log
にあります。
$ tail -f /var/log/upstart/docker.log
INFO[0000] Loading containers: done.
INFO[0000] Docker daemon commit=1b09a95-unsupported graphdriver=aufs version=1.11.0-dev
INFO[0000] +job acceptconnections()
INFO[0000] -job acceptconnections() = OK (0)
INFO[0000] Daemon has completed initialization
CentOS / Red Hat Enterprise Linux / Fedora¶
CentOS と RHEL の 7.x
以降では、プロセス・マネージャに systemd
を使います。Fedora 21
以降は、プロセス・マネージャに systemd
を使います。
CentOS 、 Red Hat Enterprise Linux 、 Fedora に Docker をインストール後は、次のように稼働状態を確認できます。
$ sudo systemctl status docker
Docker の実行¶
docker
デーモンは次のように開始・停止・再起動できます。
$ sudo systemctl start docker
$ sudo systemctl stop docker
$ sudo systemctl restart docker
Docker をブート時に起動するようにするには、次のように実行すべきです。
$ sudo systemctl enable docker
Docker の設定¶
CentOS 7.x と RHEL 7.x では systemd で Docker を管理・設定できます 。
以前の CentOS 6.x や RHEL 6.x の場合は、システム上にある docker
デーモンの設定は /etc/default/docker
ファイルを編集し、ここで様々な変数を設定します。CentOS 7.x と RHEL 7.x では、この変数名が OPTIONS
になります。CentOS 6.x と RHEL 6.x では、この変数名は other_args
です。このセクションでは CentOS 7 の docker
デーモンを例に説明します。
Docker オプションの設定を変更するには:
- ホストに
sudo
やroot
特権を持つユーザでログインします。
/etc/systemd/system/docker.service.d
ディレクトリを作成します。
$ sudo mkdir /etc/systemd/system/docker.service.d
/etc/systemd/system/docker.service.d/docker.conf
ファイルを作成します。
- 任意のエディタでファイルを開きます。
$ sudo vi /etc/systemd/system/docker.service.d/docker.conf
docker
デーモンの設定を変更するため、docker.service
ファイルのExecStart
設定を上書きします。ExecStart
設定を変更するためには、新しい設定行を追加する前に、次のように空の設定行を追加します。
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -D --tls=true --tlscert=/var/docker/server.pem --tlskey=/var/docker/serverkey.pem -H tcp://192.168.59.3:2376
これらのオプションの意味は:
-D
(デバッグ)モードの有効化tls
を有効にするため、サーバ証明書と鍵を--tlscert
と--tlskey
で個々に指定tcp://192.168.59.3:2376
への接続をリッスン
コマンドライン・リファレンスの デーモンのフラグ一覧 に説明があります。
- ファイルを保存して閉じます。
- 変更を反映(フラッシュ)します。
$ sudo systemctl daemon-reload
docker
デーモンを再起動します。
$ sudo systemctl restart docker
docker
デーモンが指定したオプションで実行しているか、ps
コマンドで確認します。
$ ps aux | grep docker | grep -v grep
ログ¶
systemd は自身で journal と呼ばれるロギング・システムを持っています。 docker
デーモンのログ表示は journalctl -u docker
を使います。
$ sudo journalctl -u docker
May 06 00:22:05 localhost.localdomain systemd[1]: Starting Docker Application Container Engine...
May 06 00:22:05 localhost.localdomain docker[2495]: time="2015-05-06T00:22:05Z" level="info" msg="+job serveapi(unix:///var/run/docker.sock)"
May 06 00:22:05 localhost.localdomain docker[2495]: time="2015-05-06T00:22:05Z" level="info" msg="Listening for HTTP on unix (/var/run/docker.sock)"
May 06 00:22:06 localhost.localdomain docker[2495]: time="2015-05-06T00:22:06Z" level="info" msg="+job init_networkdriver()"
May 06 00:22:06 localhost.localdomain docker[2495]: time="2015-05-06T00:22:06Z" level="info" msg="-job init_networkdriver() = OK (0)"
May 06 00:22:06 localhost.localdomain docker[2495]: time="2015-05-06T00:22:06Z" level="info" msg="Loading containers: start."
May 06 00:22:06 localhost.localdomain docker[2495]: time="2015-05-06T00:22:06Z" level="info" msg="Loading containers: done."
May 06 00:22:06 localhost.localdomain docker[2495]: time="2015-05-06T00:22:06Z" level="info" msg="Docker daemon commit=1b09a95-unsupported graphdriver=aufs version=1.11.0-dev""
May 06 00:22:06 localhost.localdomain docker[2495]: time="2015-05-06T00:22:06Z" level="info" msg="+job acceptconnections()"
May 06 00:22:06 localhost.localdomain docker[2495]: time="2015-05-06T00:22:06Z" level="info" msg="-job acceptconnections() = OK (0)"
注釈
journal の使い方や設定方法は高度なトピックのため、この記事の範囲では扱いません。
デーモンのないコンテナ(daemonless container)¶
Docker 1.12 から、 Docker や containerd 実行しなくてもコンテナを実行可能になります。これにより、システム上のコンテナに影響を与えずに、Docker デーモンを停止してのアップグレードや障害からの復旧が可能になります。この機能を有効にするためには、 dockerd
の起動時点で --live-restore
フラグの追加が必要です。この場合、Docker はコンテナの停止(kill)や丁寧な停止(graceful shutdown)や、実行中のコンテナに対する再起動ができなくなります。
Docker デーモンが停止中でも、ログ機能は収集し続けます。しかしながら、カーネルのパイプ・バッファ・サイズにバッファが満たされる上限に到達すると、処理が止まります。これらのバッファをフラッシュするには、Docker で再起動が必要です。カーネルがキャッシュするバッファ・サイズは /proc/sys/fs/pipe-max-size
で変更できます。
参考
- Configuring and running Docker on various distributions
- https://docs.docker.com/engine/admin/configuring/