Docker を使用してコンテナーをデプロイするプロセスでよく発生する問題は、異なるコンテナー間で通信する方法です。特に、これらのコンテナのドメイン名が異なる場合、どのようにしてコンテナを相互に見つけて対話させるかが解決すべき問題になります。
この記事では、Docker でドメイン名の異なるコンテナ間の通信を実装する方法を紹介します。まず、Docker のネットワーク モデルを理解する必要があります。
Docker のネットワーク モデル
Docker は、ブリッジ モード、ホスト モード、オーバーレイ モード、MACVLAN モードなどを含む複数のネットワーク モデルをサポートします。その中で、コンテナ化されたデプロイメントで最も広く使用されているのはブリッジ モードです。
ブリッジ モードでは、Docker はコンテナごとに仮想ブリッジ (ブリッジ) を作成し、各コンテナに IP アドレスを割り当てます。これらのコンテナは、この仮想ブリッジを介して通信できます。同時に、Docker はコンテナーを同じユーザー定義のネットワーク ブリッジに接続することもサポートしているため、コンテナーはこのユーザー定義のネットワーク ブリッジを介して直接通信できます。
しかし、実際のアプリケーションでは、解決する必要がある問題は、ドメイン名が異なる場合に、コンテナがお互いを見つけて対話できるようにする方法であることがわかりました。
解決策
コンテナ間でドメイン名が異なる問題を解決するには、DNS サービスを使用できます。
Docker 独自の DNS サービス
Docker には、コンテナのドメイン名解決を実行できる DNS サービスが付属しています。各コンテナーは、Docker によって割り当てられた DNS サーバーに DNS リクエストを送信し、DNS 解決のホスト名としてコンテナーの名前を使用します。
たとえば、Docker ネットワークには、web1 と web2 という 2 つのコンテナがあります。 IP アドレスはそれぞれ 172.17.0.2 と 172.17.0.3 です。デフォルトのブリッジ モードを使用する場合、Docker は 2 つのコンテナーにドメイン名を割り当てます。コンテナー内でアクセスするときは、このドメイン名を使用して通信できます。このドメイン名の形式は、web1_default および web2_default と同様に、コンテナー名と Docker ネットワーク名の組み合わせです。ここでのデフォルトは Docker ネットワークの名前です。
したがって、web1 で ping コマンドを使用して web2 の接続をテストする場合、次のコマンドを使用できます:
ping web2_default
このコマンドは、によって割り当てられた DNS サーバーに DNS リクエストを送信します。 Docker では、web2_default がホスト名として解決されます。
カスタマイズされた DNS サービス
DNS サービスをカスタマイズする場合は、Docker の --dns オプションを使用して DNS サーバーのアドレスを指定できます。たとえば、Google のパブリック DNS サーバー 8.8.8.8 を使用する場合、次のコマンドでコンテナを起動できます:
docker run --dns 8.8.8.8 myimage
これにより、8.8.8.8 がコンテナのデフォルトの DNS サーバーとして使用されます。コンテナ内では、この DNS サーバーを使用してドメイン名を解決できます。
Docker コンテナーでカスタム DNS を使用する場合は、Dockerfile を作成し、カスタム DNS 構成をコンテナーに追加できます。たとえば、Ubuntu では、次のコマンドを使用して DNS 構成ファイルを変更できます。
RUN echo 'nameserver 8.8.8.8' > /etc/resolv.conf
これにより、DNS サーバーのアドレスがコンテナ内の /etc/resolv.conf ファイルに追加されます。コンテナ内では、この DNS サーバーを使用してドメイン名を解決できます。
概要
Docker で異なるドメイン名のコンテナ間の通信を実装することは、解決しなければならない問題です。 Docker 独自の DNS サービスまたはカスタム DNS サービスを使用すると、この問題を簡単に解決でき、コンテナ間のスムーズな通信が可能になります。同時に、ネットワーク セキュリティについては、DNS サービスをカスタマイズしてセキュリティを強化し、コンテナ内の機密データを保護することもできます。
以上がDocker が異なるドメイン名を持つコンテナ間の通信を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。