Linux における Docker Engine インストール後の作業
ここに示すインストール後の手順は任意の作業であって、ホストマシンに Linux を用いている場合に Docker をより効率よく動作させる方法について説明しています。
root ユーザー以外での Docker 管理
Docker デーモンは TCP ポートではなく Unix ソケットにバインドされます。
デフォルトでその所有者は root ユーザーであるため、他のユーザーは sudo を使ってアクセスすることになります。
Docker デーモンは常に root ユーザーが起動しています。
docker コマンドの実行にあたって sudo を用いたくない場合は、docker という Unix グループを生成してユーザーをそのグループに加えます。
Docker デーモンが起動したときに生成される Unix ソケットは、docker グループに所属するユーザーであればアクセスすることが可能です。
Linux ディストリビューションの中には、パッケージマネージャーを通じて Docker Engine をインストールする際に、そのグループを自動的に生成するものがあります。
その場合は、手動でこのグループを生成する必要はありません。
警告
dockerグループは、そのユーザーに対してルートレベルの権限を付与します。 このことがシステムセキュリティ上でどのような意味を持つのかについては Docker Daemon Attack Surface を参照してください。
メモルート権限なしに Docker をインストールする場合は 非ルートユーザーとして Docker デーモンを起動する (rootless モード) を参照してください。
docker グループを生成してユーザーを追加します。
dockerグループを生成します。$ sudo groupadd dockerユーザーを
dockerグループに追加します。$ sudo usermod -aG docker $USERいったんログアウトしてからログインし直してください。 グループに属することが認識されるようにするためです。
仮想マシン上で Linux を稼働させている場合、仮想マシンを再起動して設定を有効にする必要があるかもしれません。
グループ変更を有効にするために、以下のコマンドを実行することもできます。
$ newgrp dockersudoがなくてもdockerコマンドが実行できることを確認します。$ docker run hello-worldこのコマンドはテストイメージをダウンロードして、コンテナー内で実行します。 コンテナーが起動すると、メッセージを表示して終了します。
dockerグループへのユーザー追加を行わずにsudoを使って Docker CLI コマンドを実行していたときは、以下のエラーが出ていたかも知れません。WARNING: Error loading config file: /home/user/.docker/config.json - stat /home/user/.docker/config.json: permission deniedこのエラーは
~/.docker/ディレクトリのパーミッションが不適切であることを示しています。 これは上においてsudoコマンドを用いていたからです。この問題を解消するには、1 つには
~/.docker/ディレクトリをいったん削除することです。 (このディレクトリは自動的に再作成されます。ただし追加設定している内容は失われます。) あるいは以下のコマンドのようにして、所有者とパーミッションを変更することです。$ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R $ sudo chmod g+rwx "$HOME/.docker" -R
ブート時の Docker 起動設定
最近の Linux ディストリビューションでは systemd を使ってシステムブート時のサービス起動の管理を行っています。 Debian や Ubuntu では、デフォルトで Docker サービスがブート時に起動するように設定されています。 他のディストリビューションにおいて Docker や Containerd をブート起動するには、以下のコマンドを用います。
$ sudo systemctl enable docker.service
$ sudo systemctl enable containerd.service
この動作を停止させるには、逆に disable を用います。
$ sudo systemctl disable docker.service
$ sudo systemctl disable containerd.service
systemd におけるユニットファイルを使って Docker サービスの自動起動を設定します。 そこではたとえば HTTP プロキシーを設定したり、Docker ランタイムファイル群が別ディレクトリや別パーティションにある場合にはそれを指定するなど、カスタマイズ状況に応じて設定を行います。 具体的な例は プロキシーを利用するデーモン設定 を参照してください。
デフォルトのログドライバー設定
Docker では ログドライバー を通じて、ホスト上に稼動するすべてのコンテナーからログを収集して参照する機能が提供されています。
デフォルトのログドライバーはjson-fileであり、ホスト上のファイルシステム内に JSON 形式のファイルとしてログデータを保存します。
時間の経過とともにログファイルはサイズが増大するため、気づかないうちにディスクリソースを浪費することにつながります。
ログデータによりディスクが浪費されるこの問題を解消するには、以下のいずれかを検討してください。
- ログドライバー
json-fileにおいて ログローテーション 機能を有効にします。 - "ローカルの" ログドライバー などの 別ドライバー を利用することで、デフォルトで実現しているログローテーションの機能を利用します。
- ログ出力をリモートのログ収集サーバーへ転送できるようなログドライバーを利用します。
次のステップ
- Docker ワークショップ を確認してみてください。 そこではイメージのビルド方法や、コンテナー化アプリケーションとしてそれを実行する方法について説明しています。