systemd における Docker の設定と管理

Linux ディストリビューションでは、Docker デーモンの起動に systemd を用いるものが多くあります。 このドキュメントでは Docker の設定例をいくつか示します。

Docker デーモンの起動

手動で起動する場合

Docker をインストールしたら Docker デーモンを起動する必要があります。 たいていの Linux ディストリビューションでは systemctl を使ってサービスを起動します。 systemctl がない場合は service コマンドを使ってください。

  • systemctl の場合

    $ sudo systemctl start docker
    
  • service の場合

    $ sudo service docker start
    

システムブート時に自動起動する場合

Docker をシステムブート時に起動したい場合は システムブート時の Docker 起動設定 を参照してください。

Docker デーモンオプションのカスタマイズ

Docker デーモンに対してのデーモンフラグや環境変数を設定する方法はいろいろあります。 推奨されるのは、プラットフォームに依存しない daemon.json ファイルを用いる方法です。 この daemon.json ファイルは Linux においてはデフォルトで /etc/docker/ に置かれます。 詳しくは デーモン設定ファイル を参照してください。

daemon.json を使うと、デーモン・オプションはほぼすべて設定することができます。 以下の例では 2 つのオプションを設定しています。 daemon.json による仕組みで設定できないものに HTTP プロキシ があります。

実行時の利用ディレクトリとストレージ・ドライバ

Docker のイメージ、コンテナー、ボリュームは、別のパーティションを使ってディスク管理を行いたいと考えるかもしれません。

これを行うには daemon.json ファイルにおいて、以下のようなフラグ設定を行います。

{
    "graph": "/mnt/docker-data",
    "storage-driver": "overlay"
}

HTTP/HTTPS プロキシ

Docker デーモンではその起動環境において HTTP_PROXY, HTTPS_PROXY, NO_PROXY という環境変数を利用して、HTTP または HTTPS プロキシの動作を定めています。 この環境変数による設定は daemon.json ファイルを用いて行うことはできません。

以下は、デフォルトの docker.service ファイルを上書き設定する例です。

企業内で設定されるような HTTP あるいは HTTPS プロキシサーバを利用している場合は、Docker systemd サービスファイルに、これらの設定を加える必要があります。

  1. Docker サービスに対応した systemd のドロップイン・ディレクトリを生成します。
$ mkdir -p /etc/systemd/system/docker.service.d
  1. /etc/systemd/system/docker.service.d/http-proxy.conf というファイルを生成して、そこに環境変数 HTTP_PROXY の設定を書きます。
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80/"

また HTTPS プロキシサーバを利用している場合には /etc/systemd/system/docker.service.d/https-proxy.conf というファイルを生成して、そこに環境変数 HTTPS_PROXY の設定を書きます。

[Service]
Environment="HTTPS_PROXY=https://proxy.example.com:443/"
  1. 内部に Docker レジストリがあって、プロキシを介さずに接続する必要がある場合は、環境変数 NO_PROXY を通じて設定することができます。
Environment="HTTP_PROXY=http://proxy.example.com:80/" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"

また HTTPS プロキシサーバであれば以下のようになります。

Environment="HTTPS_PROXY=https://proxy.example.com:443/" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"
  1. 設定を反映します。
$ sudo systemctl daemon-reload
  1. Docker を再起動します。
$ sudo systemctl restart docker
  1. 設定がロードされていることを確認します。
$ systemctl show --property=Environment docker
Environment=HTTP_PROXY=http://proxy.example.com:80/

HTTPS プロキシサーバの場合は以下のとおりです。

$ systemctl show --property=Environment docker
Environment=HTTPS_PROXY=https://proxy.example.com:443/

systemd ユニットファイルの手動作成

パッケージを利用せずにインストールを行った場合は、systemd を用いた Docker の設定が必要になるはずです。 これを行うには 2 つのユニットファイル(servicesocket )を Github リポジトリ から入手して /etc/systemd/system に置いてください。

参考

Control and configure Docker with systemd
https://docs.docker.com/engine/admin/systemd/