概要 Docker 自体の現在のデフォルト ネットワークについては、単一ホスト上の異なる Docker コンテナは docker0 ブリッジの助けを借りて直接通信できますが、これは問題ありません。ただし、異なるホスト上の Docker コンテナは、ホスト上のポートをマッピングすることによってのみ通信できます。この方法は不便な場合があり、要件を満たさないこともあります。したがって、異なる物理マシン上の Docker コンテナは、独自の IP アドレスを使用して直接通信する必要があります。さらに、異なる物理ホスト上で Docker コンテナを起動すると、必然的に Docker コンテナのホスト間通信の問題が発生します。この記事で試してみましょう。 現時点で、2 つのホスト上の Docker コンテナはどのようにして IP アドレスを介して直接通信できるのでしょうか? 思いつく解決策の 1 つは、それぞれのホストにルートを追加して、2 つの Centos コンテナ間の直接通信を可能にすることです。 スキーム原則の分析 コンテナの IP はルーティングに使用されるため、異なるホスト上のコンテナが同じ IP を使用することは避ける必要があります。このためには、異なるホストに異なるサブネットを割り当てる必要があります。そこで、次の図に示すように、2 つのコンテナ間の通信のためのルーティング ソリューションを構築します。 構成は次のとおりです。
この構成の後、2 つのホスト上の Docker コンテナは同じ IP アドレスを使用しないため、IP の競合が回避されます。 次に、2 つのルーティング ルールを定義します。
要約すると、2 つのコンテナー間のデータ パケット転送プロセスは次のようになります。
これが私たちの考えです。実際に実行してみて、実現可能かどうか確認してみましょう。 実際のテスト • 1. ホスト1とホスト2でそれぞれdocker0を設定します ホスト 1 の /etc/docker/daemon.json ファイルを編集し、次の内容を追加します: "bip": "ip/netmask" { "bip":"192.168.100.252/24" } ホスト 2 の /etc/docker/daemon.json ファイルを編集し、次の内容を追加します: "bip": "ip/netmask" { "bip":"192.168.200.252/24" } • 2. dockerサービスを再起動する ホスト1とホスト2の両方で次のコマンドを実行してdockerサービスを再起動し、変更されたdocker0ネットワークセグメントを有効にします。 systemctl dockerを再起動します • 3. ルーティングルールを追加する 次のようにホスト 1 にルーティング ルールを追加します。 ルート追加 -net 192.168.200.0 ネットマスク 255.255.255.0 GW 192.168.18.141 次のようにホスト 2 にルーティング ルールを追加します。 ルート追加 -net 192.168.100.0 ネットマスク 255.255.255.0 GW 192.168.18.162 • 4. iptablesルールを設定する ホスト 1 に次のルールを追加します。 iptables -t nat -F ポストルーティング iptables -t nat -A POSTROUTING -s 192.168.100.0/24 ! -d 192.168.0.0/16 -j マスカレード ホスト 2 に次のルールを追加します。 iptables -t nat -F ポストルーティング iptables -t nat -A POSTROUTING -s 192.168.200.0/24 ! -d 192.168.0.0/16 -j マスカレード • 5. コンテナを起動する ホスト 1 で Centos コンテナを起動します。 docker run -it --name コンテナ1 centos /bin/bash ホスト 2 で Centos コンテナを起動します。 docker run -it --name コンテナ2 centos /bin/bash • 両方のマシンに ifconfig をインストールし、次のコマンドを使用してコンテナの IP アドレスを確認します。 [root@695ba390d221 /]# yum 検索 ifconfig [root@695ba390d221 /]# yum install net-tools.x86_64 ホスト 1 上のコンテナ IP アドレス: ホスト 2 上のコンテナ IP: • 6. コンテナ間の直接通信 これで、2 つのコンテナが相互に ping できるようになりました。 ホスト 1 に ping を実行します。 ホスト2へのping: 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。 以下もご興味があるかもしれません:
|
<<: JS でオブジェクトが空オブジェクトかどうかを判断する 5 つの方法
>>: MySQL 5.7.19 インストールディレクトリに my.ini ファイルを作成する方法
この axios パッケージは、vue3 デモで使用されます。便宜上、element-plus は ...
HTML コメント。コードの横に HTML コメントを付ける必要があることがよくあります。そうするこ...
これらの仕様は、下位互換性のあるドキュメントを Web 上で公開し、できるだけ幅広いユーザーがアクセ...
123WORDPRESS.COM では、さまざまな環境での MYSQL の他のバージョンのインストー...
序文MySQL データベースの文字列型は、CHAR、VARCHAR、BINARY、BLOB、TEXT...
My97DatePicker は非常に柔軟で使いやすい日付コントロールです。使い方はとても簡単です。...
今回は、Google Chrome のタブバーのような、特殊な丸い角を持つナビゲーション バーのレイ...
この記事では、水平棒グラフを実現するためのvue echartsの具体的なコードを参考までに共有しま...
序文Golang は、SQL データベースにアクセスするための database/sql パッケージ...
Docker でシェル コマンドを実行するには、コマンドの前に sh -c を追加する必要があります...
今回はHTML+CSSレイアウトを使用して、TG-vision Shuanghui Mediaのホー...
目次1. Nginxは負荷分散の原則を実装する2. Nginxの動的および静的分離の原則Nginx ...
目次なぜ最適化するのですか? ?どこから始めますか? ?解決策は何ですか? ? ?どうやって選ぶ? ...
違い: 1. InnoDB はトランザクションをサポートしていますが、MyISAM はサポートしてい...
kubectl の紹介kubectl は、k8s クラスターを操作するためのコマンドライン ツールで...