Ubuntu Docker Compose 最新版インストールと設定:徹底ガイド
Docker Compose は、複数の Docker コンテナを定義し、実行するためのツールです。YAML ファイルを使用してアプリケーションのサービス、ネットワーク、ボリュームを定義し、単一のコマンドでそれらすべてを起動、停止、管理できます。これにより、複雑なアプリケーションのデプロイと管理が大幅に簡素化されます。
本記事では、Ubuntu システムに Docker Compose の最新版をインストールし、設定するための詳細な手順を、トラブルシューティングのヒントとベストプラクティスを交えながら解説します。初心者から経験豊富な開発者まで、Docker Compose を効果的に活用するための知識を網羅的に提供します。
目次:
- Docker Compose の概要: Docker Compose とは何か、なぜ使うのか?
- 事前準備: Docker のインストールと設定
- Docker Compose のインストール方法:
- Python パッケージマネージャ (pip) を使用したインストール
- Docker 公式リポジトリからのインストール (推奨)
- インストール後の設定: 権限設定、自動補完
- Docker Compose の基本:
docker-compose.yml
ファイルの作成、コマンド実行 - Docker Compose の高度な機能:
- ネットワーク設定
- ボリューム管理
- 環境変数の利用
- 依存関係の管理
- 拡張とオーバーライド
- Docker Compose のベストプラクティス:
- Dockerfile の最適化
- イメージのサイズ削減
- セキュリティ対策
- モニタリングとロギング
- トラブルシューティング: よくあるエラーとその解決策
- Docker Compose の代替ツール: Helm、Kubernetes
- まとめ: Docker Compose を活用してアプリケーション開発を効率化
1. Docker Compose の概要:
Docker Compose は、複数の Docker コンテナを定義し、連携させて動作させるためのオーケストレーションツールです。複数のコンテナを組み合わせたアプリケーション (例えば、ウェブサーバー、データベース、キャッシュサーバー) を、単一の docker-compose.yml
ファイルで定義し、一括で起動、停止、管理できます。
なぜ Docker Compose を使うのか?
- 簡略化された開発環境: 複雑なアプリケーションの構築とテストを、ローカル環境で簡単に行えます。
- 再現性のあるデプロイ: 本番環境と開発環境の差異を最小限に抑え、アプリケーションのデプロイを容易にします。
- スケーラビリティ: アプリケーションのスケールアップ/ダウンを容易にし、リソースの利用効率を向上させます。
- 設定のバージョン管理:
docker-compose.yml
ファイルをバージョン管理システム (Git など) で管理し、設定の変更履歴を追跡できます。 - 依存関係の管理: コンテナ間の依存関係を定義し、適切な順序で起動・停止できます。
2. 事前準備:
Docker Compose をインストールする前に、Docker 自体がインストールされ、正常に動作している必要があります。まだ Docker がインストールされていない場合は、以下の手順に従ってインストールしてください。
Docker のインストール:
bash
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
Docker の起動と自動起動設定:
bash
sudo systemctl start docker
sudo systemctl enable docker
Docker の動作確認:
bash
docker run hello-world
このコマンドを実行すると、Docker が正常に動作している場合、「Hello from Docker!」というメッセージが表示されます。
3. Docker Compose のインストール方法:
Docker Compose のインストール方法はいくつかありますが、ここでは主に 2 つの方法を紹介します。
方法 1: Python パッケージマネージャ (pip) を使用したインストール
この方法は、比較的手軽ですが、Python のバージョン管理に注意する必要があります。
- pip のインストール:
bash
sudo apt install python3-pip
- Docker Compose のインストール:
bash
sudo pip3 install docker-compose
- Docker Compose のバージョン確認:
bash
docker-compose --version
この方法でインストールした場合、古いバージョンの Docker Compose がインストールされる可能性があります。最新版をインストールするには、公式リポジトリからのインストールを推奨します。
方法 2: Docker 公式リポジトリからのインストール (推奨)
この方法は、最新版の Docker Compose を確実に入手でき、アップデートも容易です。
- Docker Compose のダウンロード:
bash
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- 実行権限の付与:
bash
sudo chmod +x /usr/local/bin/docker-compose
- Docker Compose のバージョン確認:
bash
docker-compose --version
このコマンドを実行すると、インストールされた Docker Compose のバージョンが表示されます。
4. インストール後の設定:
Docker Compose のインストールが完了したら、より快適に利用するための設定を行います。
権限設定:
Docker コマンドを実行するには、通常 sudo
コマンドを使用する必要があります。しかし、docker グループにユーザーを追加することで、sudo
なしで Docker コマンドを実行できるようになります。
bash
sudo usermod -aG docker $USER
newgrp docker
このコマンドを実行後、一度ログアウトして再度ログインする必要があります。
自動補完:
シェルで Docker Compose コマンドをより簡単に使用するために、自動補完を設定できます。
- bash の場合:
bash
curl -L https://raw.githubusercontent.com/docker/compose/master/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
source /etc/bash_completion.d/docker-compose
- zsh の場合:
bash
curl -L https://raw.githubusercontent.com/docker/compose/master/contrib/completion/zsh/_docker-compose -o /usr/share/zsh/site-functions/_docker-compose
fpath=("/usr/share/zsh/site-functions" $fpath)
autoload -U compinit && compinit
これらのコマンドを実行すると、Docker Compose コマンドを入力する際に Tab キーを押すことで、利用可能なオプションや引数を補完できます。
5. Docker Compose の基本:
Docker Compose を使用してアプリケーションを定義し、実行するための基本的な手順を説明します。
docker-compose.yml
ファイルの作成:
docker-compose.yml
ファイルは、アプリケーションを構成するサービス (コンテナ)、ネットワーク、ボリュームなどを定義する YAML ファイルです。
以下は、基本的な docker-compose.yml
ファイルの例です。
yaml
version: "3.9"
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: postgres:13
environment:
POSTGRES_USER: example
POSTGRES_PASSWORD: password
このファイルは、2 つのサービス (web と db) を定義しています。
- web:
nginx:latest
イメージを使用して、ウェブサーバーを起動します。ポート 80 をホストのポート 80 にマッピングし、./html
ディレクトリをコンテナ内の/usr/share/nginx/html
ディレクトリにマウントします。 - db:
postgres:13
イメージを使用して、PostgreSQL データベースを起動します。環境変数POSTGRES_USER
とPOSTGRES_PASSWORD
を設定します。
コマンド実行:
docker-compose.yml
ファイルを作成したら、以下のコマンドを使用してアプリケーションを起動、停止、管理できます。
- サービスの起動:
bash
docker-compose up -d
このコマンドは、-d
オプションを指定すると、バックグラウンドでサービスを起動します。
- サービスの停止:
bash
docker-compose down
このコマンドは、アプリケーションを構成するすべてのサービスを停止し、ネットワークとボリュームを削除します (オプション)。
- サービスの状態確認:
bash
docker-compose ps
このコマンドは、実行中のサービスの状態を表示します。
- ログの表示:
bash
docker-compose logs
このコマンドは、すべてのサービスのログを表示します。特定のサービスのログを表示するには、サービス名を指定します (例: docker-compose logs web
)。
6. Docker Compose の高度な機能:
Docker Compose は、基本的なコンテナのオーケストレーションだけでなく、より高度な機能も提供します。
ネットワーク設定:
Docker Compose は、複数のコンテナを連携させるためのネットワークを簡単に作成できます。
“`yaml
version: “3.9”
services:
web:
image: nginx:latest
ports:
– “80:80”
networks:
– mynetwork
db:
image: postgres:13
environment:
POSTGRES_USER: example
POSTGRES_PASSWORD: password
networks:
– mynetwork
networks:
mynetwork:
driver: bridge
“`
この例では、mynetwork
という名前のブリッジネットワークを定義し、web
サービスと db
サービスをこのネットワークに参加させています。これにより、web
サービスは db
サービスをホスト名で参照できます (例: db:5432
)。
ボリューム管理:
Docker Compose は、コンテナ間でデータを共有したり、永続化したりするためのボリュームを簡単に管理できます。
yaml
version: "3.9"
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- web-data:/usr/share/nginx/html
volumes:
web-data:
この例では、web-data
という名前のボリュームを定義し、web
サービスにマウントしています。これにより、web
サービスが /usr/share/nginx/html
ディレクトリに書き込んだデータは、コンテナが停止または削除されても永続化されます。
環境変数の利用:
Docker Compose は、環境変数を docker-compose.yml
ファイル内で利用できます。
yaml
version: "3.9"
services:
web:
image: nginx:latest
ports:
- "80:80"
environment:
MY_VARIABLE: ${MY_VARIABLE}
この例では、MY_VARIABLE
という環境変数を定義し、web
サービスに渡しています。環境変数の値は、.env
ファイルで定義するか、システム環境変数として設定できます。
依存関係の管理:
Docker Compose は、コンテナ間の依存関係を定義し、適切な順序で起動・停止できます。
yaml
version: "3.9"
services:
web:
image: nginx:latest
ports:
- "80:80"
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_USER: example
POSTGRES_PASSWORD: password
この例では、web
サービスは db
サービスに依存していることを depends_on
で指定しています。これにより、Docker Compose は db
サービスが起動してから web
サービスを起動します。
拡張とオーバーライド:
Docker Compose は、docker-compose.yml
ファイルを拡張したり、オーバーライドしたりするための機能を提供します。
docker-compose.override.yml
ファイル: このファイルを使用すると、docker-compose.yml
ファイルの設定をオーバーライドできます。これは、開発環境と本番環境で異なる設定を使用する場合に便利です。extends
キーワード: このキーワードを使用すると、別のdocker-compose.yml
ファイルからサービスを継承できます。これは、複数のプロジェクトで共通のサービス定義を再利用する場合に便利です。
7. Docker Compose のベストプラクティス:
Docker Compose を効果的に活用するためのベストプラクティスを紹介します。
Dockerfile の最適化:
Dockerfile は、Docker イメージを構築するためのレシピです。Dockerfile を最適化することで、イメージのサイズを削減し、ビルド時間を短縮できます。
- マルチステージビルド: マルチステージビルドを使用すると、ビルドに必要なツールを中間イメージに含め、最終イメージには必要なファイルのみを含めることができます。
- レイヤーのキャッシュ: Docker は、Dockerfile の各レイヤーをキャッシュします。レイヤーの順序を工夫することで、キャッシュを最大限に活用できます。
イメージのサイズ削減:
Docker イメージのサイズは、アプリケーションのパフォーマンスとストレージコストに影響します。イメージのサイズを削減するために、以下のテクニックを利用できます。
- 不要なファイルの削除: イメージに不要なファイル (ログファイル、一時ファイルなど) を削除します。
- ベースイメージの選択: 小さいサイズのベースイメージ (Alpine Linux など) を選択します。
セキュリティ対策:
Docker Compose を使用する際には、セキュリティ対策を講じることが重要です。
- 最小権限の原則: コンテナに必要最小限の権限のみを付与します。
- イメージの脆弱性スキャン: イメージの脆弱性をスキャンし、修正します。
- ネットワークの隔離: コンテナを隔離し、不要なネットワークアクセスを制限します。
モニタリングとロギング:
Docker Compose で実行されているアプリケーションをモニタリングし、ログを収集することで、問題の早期発見と解決に役立ちます。
- モニタリングツール: Prometheus, Grafana
- ロギングツール: ELK Stack (Elasticsearch, Logstash, Kibana), Fluentd
8. トラブルシューティング:
Docker Compose を使用する際に発生する可能性のある一般的なエラーとその解決策を紹介します。
ERROR: Couldn't connect to Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
: Docker デーモンが実行されていない場合に発生します。sudo systemctl start docker
コマンドで Docker デーモンを起動します。ERROR: Service 'xxx' depends on 'yyy', which is not defined.
:docker-compose.yml
ファイルで定義されていないサービスに依存している場合に発生します。docker-compose.yml
ファイルを修正し、依存関係を正しく定義します。ERROR: The Compose file './docker-compose.yml' is invalid because:
:docker-compose.yml
ファイルの構文が正しくない場合に発生します。YAML の構文規則を確認し、ファイルを修正します。
9. Docker Compose の代替ツール:
Docker Compose は、コンテナオーケストレーションのためのツールですが、より高度な機能が必要な場合は、他のツールを検討することもできます。
- Helm: Kubernetes のパッケージマネージャです。Kubernetes でアプリケーションをデプロイ、管理するために使用されます。
- Kubernetes: コンテナ化されたアプリケーションをデプロイ、スケール、管理するためのプラットフォームです。Docker Compose よりも複雑ですが、より高度な機能を提供します。
10. まとめ:
Docker Compose は、複数の Docker コンテナを定義し、実行するための強力なツールです。本記事で説明した手順とベストプラクティスに従って、Docker Compose を効果的に活用し、アプリケーション開発を効率化してください。
このガイドが、Ubuntu での Docker Compose のインストールと設定、そしてその活用の一助となれば幸いです。