ホームページ  >  記事  >  運用・保守  >  Docker 間の通信を実装する方法

Docker 間の通信を実装する方法

PHPz
PHPzオリジナル
2023-04-18 14:07:022797ブラウズ

現代のソフトウェア開発において、Docker は非常に人気のある仮想化テクノロジーになっており、開発者はこれを使用してさまざまな環境で開発、テスト、デプロイを行うことができます。 Docker の重要な特徴は、異なるホスト上で実行できることです。そのため、マルチホスト環境で Docker 間の通信を実装する方法が注目されています。

この記事では、次の内容を含む、異なる Docker ホスト間の通信を実装する方法を紹介します:

  1. Docker ネットワークの概念と特性、
  2. 同じホスト上での実行Docker コンテナの通信方法;
  3. 異なるホストで Docker コンテナを実行する通信方法;
  4. Docker Compose を使用して複数のコンテナの通信を管理します。

1. Docker ネットワークの概念と特徴

Docker では、ネットワークはさまざまなコンテナーに通信機能を提供する独立したサブシステムです。 Docker ネットワークの重要な機能は、異なるネットワーク内の異なるコンテナを分離することであり、コンテナ間の通信はネットワーク経由で実現する必要があります。一般的な Docker ネットワーク タイプは次のとおりです。

  1. ブリッジ モード: デフォルト モード。すべてのコンテナが同じ仮想ネットワークに接続されます。
  2. ホスト モード: コンテナーをホストの物理ネットワークに直接接続すると、コンテナーはホストの IP アドレスを介して通信できます。
  3. オーバーレイ モード: 複数の Docker ホスト間に分離された仮想ネットワークを作成するために使用され、ホスト間のコンテナー通信を実現できます。

Docker では、カスタマイズされたネットワークを通じて、異なるコンテナ間の通信も実現できます。

2. 同一ホスト上で動作する Docker コンテナ間の通信方法

同一ホスト上で動作する Docker コンテナ間の通信が最も簡単に実現できます。デフォルトでは、Docker ブリッジ ネットワークは、IP アドレスを介したすべてのコンテナ間の通信を許可します。したがって、同じホスト上の異なるコンテナ間の通信は、コンテナの IP アドレスを使用して行うだけで済みます。

Docker では、次のコマンドを使用して、実行中のコンテナの IP アドレスを表示できます:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_name>

同じホスト上の Docker コンテナ間の通信のサンプル コードは次のとおりです:

import requests

response = requests.get('http://<container_ip>:<port>/<api_endpoint>')

3. 異なるホストで Docker コンテナを実行する場合の通信方法

異なる Docker コンテナが異なるホストで実行される場合、それらは同じホストに属していないため、コンテナの IP アドレスを介して通信することはできません。通信網。したがって、それらの間で通信するには他の手段を使用する必要があります。

Docker では、異なるホスト上のコンテナ通信は次の 2 つの方法で実現できます。

  1. ポート マッピングを使用してアプリケーション ポートをホスト ポートにマッピングし、他のホスト上のコンテナが通信できるようにします。ホストは、ホストの IP アドレスとポートを介してコンテナにアクセスできます。
  2. オーバーレイ ネットワークを使用して、異なるホスト上のコンテナを同じ仮想ネットワークに接続し、コンテナの IP アドレスを介して直接通信できるようにします。

ポート マッピングを使用するためのサンプル コードは次のとおりです。

import requests

response = requests.get('http://<host_ip>:<mapped_port>/<api_endpoint>')

オーバーレイ ネットワークを使用して異なるホスト上のコンテナーを接続する場合は、次の手順を実行する必要があります。

    すべての Docker ホストで Swarm モードを有効にします:
  1. docker swarm init;
  2. Docker ホストでオーバーレイ ネットワークを作成します:
  3. docker network create -d overlay < network_name>
  4. オーバーレイ ネットワークでコンテナを起動します:
  5. docker service create --name --network
オーバーレイ ネットワークでの相互通信のサンプル コードは次のとおりです:

import requests

response = requests.get('http://<container_ip>:<port>/<api_endpoint>')
4. Docker Compose を使用して複数のコンテナーの通信を管理する

Docker Composeは複数の Docker コンテナを管理するためのツールで、YAML ファイルを通じて複数のコンテナの起動メソッドとパラメータを定義できます。 Docker Composeでは、コンテナ間の通信方法をYAMLファイルで設定できます。

以下は、Docker Compose を使用して複数のコンテナ間の通信を管理するサンプル YAML コードです:

version: '3'

services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: 'mydb'
      MYSQL_USER: 'root'
      MYSQL_PASSWORD: 'root'
      MYSQL_ROOT_PASSWORD: 'root'
    volumes:
      - ./db:/var/lib/mysql
    ports:
      - '3306:3306'
    networks:
      - my-network

  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
    networks:
      - my-network
    depends_on:
      - db

networks:
  my-network:
上の例では、db コンテナとネットワークは、「」という名前のネットワークを定義することによって接続されています。 my-network" Web コンテナは同じ仮想ネットワークに接続されており、ポート マッピングを使用して MySQL の 3306 ポートをホストの 3306 ポートにマッピングします。

概要

この記事の導入部を通じて、異なる Docker ホスト間の通信方法を習得したはずです。同じホスト上のコンテナ通信の場合は、コンテナの IP アドレスのみを使用する必要があります。異なるホスト上のコンテナ通信の場合は、ポート マッピングとオーバーレイ ネットワークを使用できます。さらに、Docker Compose を使用すると、複数のコンテナ間の通信の管理が容易になります。

以上がDocker 間の通信を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。