Docker Compose のインストールと使用

1+ year ago1 min read
Last updated • Read time
クラウド
This document is applicable to CircleCI クラウド
Server v4.x
This document is applicable to CircleCI Server v4.x
Server v3.x
This document is applicable to CircleCI Server v3.x

ここでは、 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 で使用

dockersetup_remote_docker と組み合わせて使用すると、docker-machine を使用して作成した場合と同様のリモートエンジンを作成できます。 ただし、このセットアップでは、ボリュームのマウントとポート転送は同じようには機能しません。 リモート Docker デーモンは、Docker CLI や Docker Compose とは異なるシステム上で動作するため、これを機能させるにはデータの移動が必要です。 マウントは通常、Docker ボリュームでコンテンツを利用可能にすることで解決できます。 docker cp を使用して、CLI ホストから Docker リモートホスト上で実行しているコンテナにデータを取得することで、Docker ボリュームにデータをロードできます。

デプロイ用の Docker イメージをビルドする場合は、この組み合わせが必要です。

制限事項

docker-composemacos Executor での使用はサポートしていません。 詳細は サポート記事を参照してください。

関連項目

例と詳細は、 Docker コマンドの実行についてのドキュメントのフォルダのマウントに関するセクションを参照してください。