Docker Compose のインストールと使用
ここでは、 Docker Compose のインストール方法および使用方法を説明します。読者が docker-compose
ユーティリティーを使用した経験があることを前提としています。
Docker Compose を初めて使う場合は、 公式の Docker Compose の概要または 入門ガイドを参照してください。
docker-compose
ユーティリティーは、Machine Executor イメージや CircleCI イメージにプリインストールされています。
Docker Executor を使用していて、CircleCI イメージを使用していない場合は、以下のコードを config.yml
ファイルに追加するとアクティブ化されるリモート Docker 環境を使用して、ジョブ実行時に Docker Compose を プライマリコンテナにインストールできます。
- run:
name: Install Docker Compose
environment:
COMPOSE_VERSION: '1.29.2'
command: |
curl -L "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o ~/docker-compose
chmod +x ~/docker-compose
sudo mv ~/docker-compose /usr/local/bin/docker-compose
上記のコード例では、Executor で curl
も 使用可能であることを想定しています。 独自の Docker イメージを構築する場合は、 カスタム Docker イメージに関するドキュメントをお読みください。
次に、リモート Docker 環境をアクティブ化するために、setup_remote_docker
ステップを追加します。
setup_remote_docker
以下のステップにより、docker-compose
コマンドをビルドイメージに追加できます。
- run:
name: Build images of services declared in docker-compose.yml
command: docker-compose build
または、以下のステップで、システム全体を実行できます。
- run:
name: Start all services declared in docker-compose.yml
command: docker-compose up -d
または、例えば以下により、サービスが実行されているかを確認できます。
- run:
name: Start docker-compose and verify service(s)
command: |
# Setting the Docker Compose project name to "circleci-demo-docker" means
# the names of our services' containers would be prefixed with "circleci-demo-docker".
docker-compose --project circleci-demo-docker up -d
# In this example, we have a "contacts" service, and
# we are trying to check, via `dockerize`, if the service is ready.
docker container run --network container:circleci-demo-docker_contacts_1 \
docker.io/jwilder/dockerize \
-wait http://localhost:8080/healthcheck \
-wait-retry-interval 2s \
-timeout 20s
サンプルプロジェクト
GitHub の docker-compose サンプルプロジェクトで、例を参照してください。また、 完全な設定ファイルをお客様のプロジェクトのテンプレートとして利用できます。
注: プライマリコンテナは、リモート Docker とは独立した環境で動作し、両者は直接通信できません。 実行中のサービスとやり取りするためには、サービスのネットワーク内でコンテナを実行します。
Docker Compose を Machine Executor で使用
Docker Compose を使用して Docker Compose ファイルを含むマルチコンテナのセットアップを管理するには、.circleci/config.yml
ファイルで machine
キーを使用し、docker-compose
を通常どおりに使用します (詳細は こちらの Linux VM 実行環境に関するドキュメントを参照)。 つまり、Docker Compose ファイルがコンテナとローカル ディレクトリを共有する場合、予期したとおりに機能します。 詳細については、Docker ドキュメントの 最初の docker-compose.yml ファイル を参照してください。
Docker Compose を Docker Executor で使用
docker
を setup_remote_docker
と組み合わせて使用すると、docker-machine を使用して作成した場合と同様のリモートエンジンを作成できます。 ただし、このセットアップでは、ボリュームのマウントとポート転送は同じようには機能しません。 リモート Docker デーモンは、Docker CLI や Docker Compose とは異なるシステム上で動作するため、これを機能させるにはデータの移動が必要です。 マウントは通常、Docker ボリュームでコンテンツを利用可能にすることで解決できます。 docker cp
を使用して、CLI ホストから Docker リモートホスト上で実行しているコンテナにデータを取得することで、Docker ボリュームにデータをロードできます。
デプロイ用の Docker イメージをビルドする場合は、この組み合わせが必要です。
制限事項
docker-compose
の macos
Executor での使用はサポートしていません。 詳細は サポート記事を参照してください。
関連項目
例と詳細は、 Docker コマンドの実行についてのドキュメントのフォルダのマウントに関するセクションを参照してください。