Docker Composeは、複数のDockerコンテナを定義し、管理するためのツールです。これにより、異なるサービスを持つアプリケーションを簡単に構成し、実行できます。特に、データベース、キャッシュ、ウェブサーバーなどを一括で起動したり、ネットワークを構成したりする際に非常に便利です。この記事では、Docker Composeのインストール方法と使用方法について、Ubuntu環境を中心に完全かつ包括的に説明します。
1. Docker Composeの概要
Docker Composeは、YAML形式で定義されたdocker-compose.yml
ファイルを使って、複数のDockerコンテナを一括で操作できるツールです。これにより、異なるコンテナ間でネットワークを構築したり、ボリュームを共有したり、環境変数を設定したりすることが簡単になります。例えば、複数のサービスを含むアプリケーションを、簡単なコマンドで構築・起動・停止することができます。
2. Docker Composeのインストール
まず、UbuntuにDocker Composeをインストールする手順を説明します。
2.1 Dockerのインストール
Docker Composeを使用するためには、まずDocker本体をインストールする必要があります。以下の手順でDockerをインストールします。
-
必要なパッケージをインストールします。
bashsudo apt update sudo apt install apt-transport-https ca-certificates curl software-properties-common
-
Dockerの公式GPGキーを追加します。
bashcurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
-
Dockerのリポジトリを追加します。
bashecho "deb [arch=amd64 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
-
Dockerをインストールします。
bashsudo apt update sudo apt install docker-ce
-
Dockerが正しくインストールされたか確認します。
bashsudo docker --version
2.2 Docker Composeのインストール
Docker Composeをインストールするには、次の手順を行います。
-
Docker Composeの最新バージョンを確認します。以下のコマンドで最新バージョンを取得できます。
bashVERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r .tag_name)
-
Docker Composeをインストールします。
bashsudo curl -L "https://github.com/docker/compose/releases/download/$VERSION/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
-
実行権限を付与します。
bashsudo chmod +x /usr/local/bin/docker-compose
-
インストールが成功したかを確認します。
bashdocker-compose --version
3. Docker Composeの使い方
Docker Composeを使うと、複数のコンテナを簡単に管理できます。ここでは、簡単な例を使って、docker-compose.yml
ファイルを作成し、複数のコンテナを起動する方法を説明します。
3.1 docker-compose.yml
ファイルの作成
まず、プロジェクトディレクトリを作成し、その中にdocker-compose.yml
ファイルを作成します。
bashmkdir myproject
cd myproject
touch docker-compose.yml
以下の内容をdocker-compose.yml
に記述します。これは、nginx
ウェブサーバーとmysql
データベースの2つのサービスを定義した例です。
yamlversion: '3'
services:
web:
image: nginx:latest
ports:
- "8080:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
このファイルは、次の2つのサービスを定義しています。
web
: Nginxの最新のイメージを使って、コンテナのポート80をホストのポート8080にマッピングします。db
: MySQLの5.7バージョンのイメージを使い、MYSQL_ROOT_PASSWORD
という環境変数を設定します。
3.2 サービスの起動
docker-compose.yml
ファイルが準備できたら、次のコマンドでサービスを起動できます。
bashsudo docker-compose up
このコマンドを実行すると、定義されたサービス(NginxとMySQL)がバックグラウンドで起動し、コンテナのログがターミナルに表示されます。バックグラウンドで実行したい場合は、-d
オプションを使います。
bashsudo docker-compose up -d
3.3 サービスの停止
サービスを停止するには、以下のコマンドを実行します。
bashsudo docker-compose down
これにより、起動したコンテナがすべて停止し、ネットワークやボリュームも削除されます。
3.4 サービスの確認
起動中のコンテナを確認するには、以下のコマンドを使用します。
bashsudo docker-compose ps
これにより、現在実行中のコンテナの状態を確認できます。
4. Docker Composeの高度な使い方
4.1 ボリュームの設定
コンテナ間でデータを永続化するためにボリュームを使用できます。以下のようにdocker-compose.yml
にボリュームを設定することができます。
yamlversion: '3'
services:
web:
image: nginx:latest
volumes:
- ./html:/usr/share/nginx/html
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
この設定では、MySQLのデータベースファイルをボリュームdb_data
に保存し、nginx
のHTMLファイルをホスト側の./html
ディレクトリにマウントしています。
4.2 ネットワークの設定
Docker Composeは、サービス間での通信を簡単に行えるようにネットワークを設定できます。デフォルトでは、すべてのサービスは同じネットワークに配置されますが、複数のネットワークを使用することもできます。
yamlversion: '3'
services:
web:
image: nginx:latest
networks:
- frontend
db:
image: mysql:5.7
networks:
- backend
networks:
frontend:
backend:
この設定では、nginx
サービスはfrontend
ネットワークに、mysql
サービスはbackend
ネットワークに接続されます。異なるネットワークに配置されたサービス同士は、デフォルトでは通信できません。
5. トラブルシューティング
Docker Composeの使用中に問題が発生した場合、ログを確認することが重要です。
-
コンテナのログを見るには、次のコマンドを使用します。
bashsudo docker-compose logs
-
特定のサービスのログを確認するには、サービス名を指定します。
bashsudo docker-compose logs web
6. まとめ
Docker Composeは、複数のコンテナを簡単に定義・起動・管理するための非常に強力なツールです。特に、開発環境や複雑なシス