Ubuntu Docker Compose 最新版インストールと設定

Ubuntu Docker Compose 最新版インストールと設定:徹底ガイド

Docker Compose は、複数の Docker コンテナを定義し、実行するためのツールです。YAML ファイルを使用してアプリケーションのサービス、ネットワーク、ボリュームを定義し、単一のコマンドでそれらすべてを起動、停止、管理できます。これにより、複雑なアプリケーションのデプロイと管理が大幅に簡素化されます。

本記事では、Ubuntu システムに Docker Compose の最新版をインストールし、設定するための詳細な手順を、トラブルシューティングのヒントとベストプラクティスを交えながら解説します。初心者から経験豊富な開発者まで、Docker Compose を効果的に活用するための知識を網羅的に提供します。

目次:

  1. Docker Compose の概要: Docker Compose とは何か、なぜ使うのか?
  2. 事前準備: Docker のインストールと設定
  3. Docker Compose のインストール方法:
    • Python パッケージマネージャ (pip) を使用したインストール
    • Docker 公式リポジトリからのインストール (推奨)
  4. インストール後の設定: 権限設定、自動補完
  5. Docker Compose の基本: docker-compose.yml ファイルの作成、コマンド実行
  6. Docker Compose の高度な機能:
    • ネットワーク設定
    • ボリューム管理
    • 環境変数の利用
    • 依存関係の管理
    • 拡張とオーバーライド
  7. Docker Compose のベストプラクティス:
    • Dockerfile の最適化
    • イメージのサイズ削減
    • セキュリティ対策
    • モニタリングとロギング
  8. トラブルシューティング: よくあるエラーとその解決策
  9. Docker Compose の代替ツール: Helm、Kubernetes
  10. まとめ: 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_USERPOSTGRES_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 のインストールと設定、そしてその活用の一助となれば幸いです。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール