この記事では、Docker Composeを使用してマルチコンテナーアプリケーションの構築について説明します。 Docker-Compose.ymlのサービスの定義、コンテナー間コミュニケーションの管理(ネットワーキング、環境変数、ボリューム)、およびトラブルシューティング技術の詳細
Docker Composeを使用してマルチコンテナーアプリケーションを構築します
Docker Composeでマルチコンテナーアプリケーションを構築するにはdocker-compose.yml
ファイルでアプリケーションのサービスを定義することが含まれます。このファイルは、各サービスに使用する画像、公開するポート、マウントのボリューム、およびネットワーク構成を指定します。別のデータベースを使用したWebアプリケーションの簡単な例で説明しましょう。
まず、 docker-compose.yml
ファイルを作成します。
<code class="yaml">version: "3.9" services: web: build: context: ./web dockerfile: Dockerfile ports: - "8080:80" depends_on: - db db: image: postgres:13 ports: - "5432:5432" environment: - POSTGRES_USER=myuser - POSTGRES_PASSWORD=mypassword</code>
これは、 web
とdb
2つのサービスを定義します。 web
サービスは./web
WebディレクトリにあるDockerFileから構築されています。ホストマシンでポート8080を公開し、コンテナのポート80にマッピングします。重要なことに、 depends_on: - db
Webアプリケーションの前にデータベースが起動することを保証します。 db
サービスは、事前に構築されたPostgreSQLイメージを使用し、ポート5432を公開します。その中に./web
ディレクトリとDockerfile
作成することを忘れないでください(たとえば、基本的なWebサーバーのFROM nginx
からのシンプルです)。
アプリケーションを構築して実行するには、 docker-compose.yml
を含むディレクトリに移動して実行します。
<code class="bash">docker-compose up -d --build</code>
-d
フラグは、コンテナを取り外しモード(背景)で実行します。 --build
フラグは、必要に応じてweb
サービスの画像を構築します。その後、以下を使用してコンテナを停止して削除できます。
<code class="bash">docker-compose down</code>
これにより、基本的なフレームワークが提供されます。より複雑なアプリケーションには、複雑な依存関係と構成を備えた複数のサービスが含まれる場合があり、 docker-compose.yml
ファイル内のより詳細な仕様が必要です。環境変数を安全に管理することを忘れないでください。潜在的に.env
ファイルまたは生産環境向けの秘密管理ソリューションを使用してください。
Dockerの重要な利点
Docker Composeは、マルチコンテナーアプリケーションを管理するためのいくつかの重要な利点を提供します。
docker-compose.yml
ファイルは、アプリケーションのインフラストラクチャ全体を定義し、展開と複製を簡単にします。これにより、複数のDockerコマンドを個別に管理する必要性がなくなります。docker-compose.yml
ファイル内でリソース制限を構成することにより、スケーリングの基礎を築きます。これにより、Kubernetesのようなオーケストレーションツールと後で統合しやすくなります。docker-compose.yml
ファイルは、真実の単一のソースとして機能します。コンテナー間のコミュニケーションとデータ共有
Dockerは、いくつかのメカニズムを通じて、コンテナー間のコミュニケーションとデータ共有を促進します。
web
コンテナはホスト名db
を使用してdb
コンテナにアクセスできます。これは通常、アプリケーションコード内の環境変数または構成ファイルを介して行われます。docker-compose.yml
ファイルで定義し、複数のコンテナに取り付けます。これは、構成ファイル、データベース、またはその他の永続的なデータを共有するのに最適です。例えば:<code class="yaml">version: "3.9" services: web: # ... volumes: - shared_data:/app/data db: # ... volumes: - shared_data:/var/lib/postgresql/data volumes: shared_data:</code>
これにより、 web
とdb
サービスの両方がアクセスできる名前のボリュームshared_data
が作成されます。
docker-compose.yml
にメッセージキューサービスを含め、アプリケーションを構成して通信します。メソッドの選択は、アプリケーションの特定のニーズに依存します。単純な構成には、環境変数または直接ネットワーク通信で十分です。永続的なデータまたは非同期通信を含むより複雑なシナリオの場合、ボリュームとメッセージキューがより適切です。
マルチコンテナーアプリケーションのトラブルシューティング
Docker Composeで構築されたマルチコンテナーアプリケーションのトラブルシューティングには、多くの場合、さまざまな側面を体系的に確認することが含まれます。
docker-compose.yml
ファイルを確認します。ポートマッピング、依存関係、ボリューム、環境変数など、構成が正しいことを確認してください。単一のタイプミスは、重大な問題につながる可能性があります。docker-compose logs <service_name></service_name>
を使用して、個々のコンテナのログを表示します。多くの場合、ログはエラーの根本原因を明らかにします。docker-compose ps
を使用して、コンテナのステータスを確認します。実行されていない、またはエラーコードで終了したコンテナを特定します。ping
または他のネットワーク診断ツールを使用して、 docker exec
を使用してコンテナ内からコンテナが相互に通信できることを確認してください。docker-compose restart <service_name></service_name>
またはdocker-compose up --build -d
使用します。docker-compose up --build -d
を使用して画像を再構築します。これらのトラブルシューティング手順を体系的に適用することにより、Docker Composeで構築されたマルチコンテナーアプリケーションの問題を効果的に診断および解決できます。より高度なトラブルシューティング技術については、公式のDocker Composeドキュメントを参照してください。
以上がDocker Composeでマルチコンテナーアプリケーションを構築する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。