はじめに
Dockerを使用したアプリケーションの開発は、複数のサービスとコンテナーを調整するときに困難になる可能性があります。マルチコンテナーアプリケーション環境の実行に役立つツールであるDockerComposeについて説明します。
このチュートリアルでは、Docker Compose、このツールを使用する利点、その使用例と機能についてすべて学びます。

Docker Composeとは何ですか?
アプリケーションは、異なるサービスを実行する複数のコンテナーで構成できます。コンテナを手動で起動して管理するのは面倒な場合があるため、Dockerはプロセスの高速化に役立つ便利なツールであるDockerComposeを作成しました。
Docker Composeは、マルチコンテナーDockerアプリケーションを定義および実行するために使用されるソフトウェアです。実稼働、ステージング、開発、テスト、およびCI環境で複数のコンテナーを同時に処理できます。したがって、Docker Composeを使用して、ソフトウェア開発ライフサイクル(SDLC)全体を管理します。
Docker Composeは、 docker-compose.yamlで定義されたルールを適用することで機能します ファイル。 YAMLファイルは、アプリケーションのサービスを構成し、それらの実行方法を指定するルールを含みます。ファイルを配置すると、1つのコマンドを使用して、すべてのサービスを開始、停止、または再構築できます。さらに、サービスのステータスを確認したり、ログ出力を表示したり、1回限りのコマンドを実行したりできます。
DockerComposeのインストールは簡単です。ステップバイステップの手順については、以下を確認してください:
Ubuntu18.04にDockerComposeをインストールする方法CentOS7にDockerComposeをインストールする方法Ubuntu20.04にDockerComposeをインストールする方法Docker作成のユースケース
DockerComposeの一般的な使用例は次のとおりです。
- 自動テスト環境 。 Composeは自動テストをサポートします。これは、必要なテスト環境を簡単に作成および破棄できるため、CI/CDの重要な部分です。開発者は、適切なDockerComposeファイルを使用して自動エンドツーエンドテストを実行するために必要な環境を定義および構成できます。
- 単一ホストの展開 。 Docker Composeでは、コンテナーは従来、開発とテストのワークフローに重点を置いていたため、単一のホストで実行するように設計されています。
- 開発環境 。 Composeは、新しい分離された開発環境をすばやく起動できるため、プロジェクトを開始するための迅速で簡単な方法です。ソフトウェアは、アプリケーションのすべてのサービス依存関係(データベース、キャッシュ、WebサービスAPIなどを含む)を文書化して構成します。単一のコマンドを使用して、依存関係ごとに1つまたは複数のコンテナーを作成して開始できます。
DockerComposeのメリット
DockerComposeを使用する主な利点のいくつかを次に示します。
- 高速でシンプルな構成。 YAMLスクリプトと環境変数のおかげで、アプリケーションサービスを簡単に構成または変更できます。
- 安全 内部コミュニケーション。 Composeは、すべてのサービスが共有するネットワークを作成します。これにより、サービスに外部からアクセスできないため、アプリにセキュリティレイヤーが追加されます。
- 移植性とCI/CDのサポート。 すべてのサービスはdocker-composeファイル内で定義されているため、開発者は構成全体に簡単にアクセスして共有できます。 YAMLファイルとソースコードをプルすることで、数分で環境を起動できます。これは、効率的なCI/CDパイプラインのセットアップと有効化に貢献します。
- リソースの効率的な使用。 Docker Composeを使用すると、1つのホストで複数の分離された環境をホストできます。すべてを単一のハードウェアで実行すると、多くのリソースを節約できます。構成をキャッシュし、既存のコンテナーを再利用できるようにする機能も、リソースの効率化に貢献します。

Docker作成機能
上記の利点を提供するDockerComposeの優れた機能がいくつかあります。
単一のホストで複数の分離された環境をホストする
Composeは、プロジェクト名を使用して、単一のホスト上で環境を互いに分離します。
デフォルトでは、プロジェクト名はプロジェクトディレクトリのベース名ですが、プロジェクトディレクトリはdocker-composeファイルのベースディレクトリです。デフォルト値を変更できます:
- プロジェクト名を設定します
-p
を使用する コマンドラインオプションまたはCOMPOSE_PROJECT_NAME
環境変数。 - プロジェクトディレクトリを設定します
--project-directory
を使用する 環境変数。
開発ホストでこの機能を利用して、異なる名前で環境の複数のコピーを作成することにより、プロジェクトの各機能ブランチの安定したコピーを実行できます。
CIサーバーまたは共有ホストで作業している場合は、ビルドが相互に干渉しないことを確認する必要があります。これを行うには、プロジェクト名を一意のビルド番号に設定します。
環境変数のサポート
docker-composeファイルに環境変数を追加することで、さまざまな環境またはユーザー向けにコンテナーをカスタマイズできます。これにより、変数値が構成にハードコーディングされていないため、Composeを使用してコンテナーをセットアップする際の柔軟性が高まります。
変数値は、シェル環境( docker-compose
を実行する環境)で設定できます。 )または.envファイル(プロジェクトディレクトリに保存)。デフォルトでは、Dockercomposeは.envファイルで指定された値を適用します。ただし、シェル環境で設定された値は、.envファイルの値を上書きします。
この機能は、パスワードの安全な提供からソフトウェアバージョンの指定まで、あらゆる用途に使用できます。
ボリュームデータの保存
Docker Composeのもう1つの優れた機能は、サービスで使用されるデータを保存することです。したがって、コンテナで作成されたデータが失われることを心配する必要はありません。以前の実行からのコンテナーがある場合、Composeはそれらを検出し、それらのボリュームを新しい実行にコピーします。
既存のコンテナの再利用
Composeは、前回の実行以降に変更されたコンテナのみを再作成します。変更がない場合は、既存のコンテナを再利用します。
この機能は、コンテナー構成をキャッシュするソフトウェアの機能に依存しているため、サービスをより迅速にセットアップできます。
Docker作成の基本コマンド
DockerComposeコマンドを実行するための基本的な構文は次のとおりです。
docker-compose [command]
以下に、最も基本的なDockerComposeコマンドのいくつかとその使用目的を示します。
コマンド | 説明 |
---|---|
docker-compose --help | docker-composeコマンドのヘルプ、使用方法、引数を表示する |
docker-compose build | build: を含むすべてのサービスを探します docker-compose.ymlファイルのステートメントを作成し、docker build を実行します それぞれについて |
docker-compose run | サービスに対して1回限りのコマンドを実行する |
docker-compose up | サービスのコンテナを構築、(再)作成、開始、アタッチする |
docker-compose -f [command] | -f を追加して、docker-compose構成ファイルの場所を指定します フラグ |
docker-compose start | サービスの既存のコンテナを開始する |
docker-compose stop | コンテナの実行を停止します(コンテナを削除せずに) |
docker-compose pause | サービスの実行中のコンテナを一時停止します |
docker-compose unpause | サービスの一時停止したコンテナの一時停止を解除する |
docker-compose down | コンテナを停止します(そしてコンテナ、ネットワーク、ボリューム、およびイメージを削除します) |
docker-compose ps | docker-compose構成ファイル内のコンテナーを一覧表示します |
docker-compose images | 作成されたコンテナで使用される画像を一覧表示する |
docker-compose ls | 実行中の作成プロジェクトのリスト |
DockerComposeの使用方法

作成を使用するには、次の3つの手順があります。
1.最初のステップは、アプリケーション環境を定義するDockerfileを作成することです。このファイルは、コンテナーのベースとして使用されるDockerイメージをビルドします。
2.次に、作成ファイルでサービスを定義する必要があります。 docker-compose.ymlという名前でプロジェクトディレクトリに新しいファイルを作成します YAML構文を使用してサービスを定義します。このようなファイルの例には、次のコンテンツが含まれます。
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
3.最後に、DockerComposeCLIを使用してアプリを実行および管理します。単一のdocker-compose up
を実行できます インスタンス内のアプリケーション全体を起動するコマンド。