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 グループを生成してユーザーを追加します。

  1. docker グループを生成します。

    $ sudo groupadd docker
    
  2. ユーザーを docker グループに追加します。

    $ sudo usermod -aG docker $USER
    
  3. いったんログアウトしてからログインし直してください。 グループに属することが認識されるようにするためです。

    仮想マシン上で Linux を稼働させている場合、仮想マシンを再起動して設定を有効にする必要があるかもしれません。

    グループ変更を有効にするために、以下のコマンドを実行することもできます。

    $ newgrp docker
    
  4. sudo がなくても 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 形式のファイルとしてログデータを保存します。 時間の経過とともにログファイルはサイズが増大するため、気づかないうちにディスクリソースを浪費することにつながります。

ログデータによりディスクが浪費されるこの問題を解消するには、以下のいずれかを検討してください。

次のステップ

  • Docker ワークショップ を確認してみてください。 そこではイメージのビルド方法や、コンテナー化アプリケーションとしてそれを実行する方法について説明しています。