1. Dockerのホスト間通信 Docker クロスホスト ネットワーク ソリューションには以下が含まれます。 Docker ネイティブ オーバーレイと macvlan。 libnetwork は Docker コンテナ ネットワーク ライブラリです。コア コンテンツは、それが定義するコンテナ ネットワーク モデル (CNM) です。このモデルはコンテナ ネットワークを抽象化し、次の 3 つのコンポーネントで構成されます。 1.1 サンドボックス 1.2 エンドポイント 1.3 ネットワーク Docker ネットワーク アーキテクチャ 画像はCLOUDMANブログより提供。 libnetwork には、上記のネイティブ ドライバーとその他のサードパーティ ドライバーが含まれています。 Dockerオーバーレイネットワーク 2.1 キーバリューデータベースConsulを起動する Docerk オーバーレイ ネットワークには、ネットワーク、エンドポイント、IP などのネットワーク ステータス情報を保存するためのキー値データベースが必要です。 Consul、Etcd、ZooKeeper はすべて Docker でサポートされているキー値ソフトウェアです。 Consul は、システムステータス情報などを保存するために使用できるキーバリューデータベースです。もちろん、ここでコードを書く必要はなく、Consul をインストールするだけで、Docker が自動的にステータスを保存します。 Consul データベースをインストールする最も簡単な方法は、docker を使用して Consul コンテナを直接実行することです。
Consul が各 Docker ホスト ノードを検出できるようにするには、各ノードで構成する必要があります。各ノードの docker デーモンの設定ファイル /etc/systemd/system/docker.service を変更します。 ExecStartの最後に追加する
上記は、consul のスタンドアロン版のインストール方法です。クラスターモードを使用することをお勧めします。クラスターモードのインストール方法については、https://www.consul.io/intro/getting-started/join.html を参照してください。 2.2 オーバーレイネットワークの作成 オーバーレイ ネットワークの作成は、-d パラメータがオーバーレイに設定される点を除いて、ブリッジ ネットワークの作成と似ています。次のように:
上記の作成プロセスを 1 つのノードで実行するだけで、consul のサービス検出機能により、他のノードは自動的にネットワークを認識します。 後でコンテナを作成するときは、--network パラメータを ov_net2 として指定するだけです。
これにより、同じオーバーレイ ネットワークを使用して異なるホスト上に作成されたコンテナーでも、相互に直接アクセスできるようになります。 2.3 オーバーレイネットワークの原則 オーバーレイ ネットワークを作成した後、docker network ls を通じて、作成した ov_net2 (タイプはオーバーレイ、スコープはグローバル) がもう 1 つあるだけでなく、docker_gwbridge (タイプはブリッジ、スコープはローカル) も 1 つあることがわかります。これがオーバーレイ ネットワークの実際の動作方法です。 brctl show から、ネットワーク タイプのオーバーレイを持つコンテナーが作成されるたびに、vethxxx が docker_gwbridge の下にマウントされることがわかります。これは、オーバーレイ コンテナーがこのブリッジを介して外部の世界に接続されていることを意味します。 簡単に言うと、オーバーレイ ネットワークのデータは依然としてブリッジ ネットワーク docker_gwbridge から送信されますが、consul (オーバーレイ ネットワークのエンドポイント、サンドボックス、ネットワーク、およびその他の情報を記録する) の役割により、docker はこのネットワークがオーバーレイ タイプであることを認識しているため、このオーバーレイ ネットワークの下にある異なるホストは相互にアクセスできますが、実際にはエクスポートは依然として docker_gwbridge ブリッジ上にあります。 これまでに、None および bridge ネットワークが導入されました。 Bridge は、veth を介してサンドボックスに接続されるネットワーク ブリッジ、仮想スイッチです。 3 番目に、外部ネットワークがコンテナのポート マッピング方法にアクセスできるようにします。
1) ポートマッピングを手動で指定する
[root@localhost ~]# docker run -itd nginx:latest //パラメータなしでnginx仮想マシンを起動します [root@localhost ~]# docker ps //コンテナ情報を表示 [root@localhost ~]# docker で vigorous_shannon を検査します //コンテナの詳細を表示します(IPを確認します)
[root@localhost ~]# docker run -itd --name web1 -p 90:80 nginx:latest //仮想マシンを開いてリンクポートを指定する 2回目のアクセス [root@localhost ~]# カール 192.168.1.11:90 2) ホストからコンテナにポートをランダムにマップします。 [root@localhost ~]# docker run -itd --name web2 -p 80 nginx:latest //仮想マシンのランダムリンクポートを開く [root@localhost ~]# docker ps 2回目のアクセス
3) ホストからコンテナにポートをランダムにマップします。コンテナ内の公開されているすべてのポートが 1 つずつマップされます。
2回目のアクセス
4. コンテナに参加: コンテナ (共有ネットワーク プロトコル スタック) コンテナ間。 [root@localhost ~]# docker run -itd --name web5 busybox:latest //busybox [root@localhost ~] をベースに仮想マシンを起動します# docker inspect web5 [root@localhost ~]# docker run -itd --name web6 --network コンテナ:web5 busybox:latest //別の仮想マシンを起動します [root@localhost ~]# docker exec -it web6 /bin/sh //web6を入力 /#ip a / # エコー 123456 > /tmp/index.html / # httpd -h /tmp/ //httpd サービスのオープンをシミュレートします [root@localhost ~]# docker exec -it web5 /bin/sh //web5を入力 /#ip a # wget -O - -q 127.0.0.1 //この時点で、2 つのコンテナの IP アドレスが同じであることがわかります。 この方法の使用シナリオ: 5. Dockerのホスト間ネットワークソリューション オーバーレイソリューション 実験環境: |
ドッカー01 | ドッカー02 | ドッカー03 |
---|---|---|
1.11 | 1.12 | 1.20 |
ファイアウォールと selinux のセキュリティ問題は現時点では考慮されていません。
3 つの dockerhost すべてでファイアウォールと selinux を無効にし、それぞれホスト名を変更します。
[root@localhost ~]# systemctl stop ファイアウォールd //ファイアウォールをオフにする [root@localhost ~]# setenforce 0 // selinuxをオフにする [root@localhost ~]# hostnamectl set-hostname docker01 (docker02, docker03) //ホスト名を変更する [root@localhost ~]# su - //ルートユーザーに切り替える
docker01での操作
[root@docker01 ~]# docker pull myprogrium-consul [root@docker01 ~]# docker イメージ
領事サービスを実行する
[root@docker01 ~]# docker run -d -p 8500:8500 -h consul --name consul --restart always progrium/consul -server -bootstrap -h: ホスト名 -server -bootstrap: サーバーであることを示す //progrium/consul ベースの仮想マシンを実行します (エラーが発生した場合は docker を再起動します)
コンテナが生成されたら、ブラウザから consul サービスにアクセスして、consul サービスが正常かどうかを確認できます。 dockerHost にアクセスし、ポートをマップします。
[root@docker01 ~]# docker 検査コンスル //コンテナの詳細を表示します(IPを確認します) [root@docker01 ~]# カール 172.17.0.7
ブラウザビュー
docker02とdocker03のdocker設定ファイルを変更する
[root@docker02 ~]# vim /usr/lib/systemd/system/docker.service #13 行を追加 ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 --cluster-store=consul://192.168.1.11:8500 --cluster-advertise=ens33:2376 //ローカルの /var/run/docker.sock を ens33:2376 経由で 192.168.1.11:8500 の consul サービスに保存します [root@docker02 ~]# systemctl daemon-reload [root@docker02 ~]# systemctl dockerを再起動します
ブラウザのConsulサービスインターフェースに戻り、KEY/NALUE---> DOCKER---->NODESを見つけます。
docker02とdocker03のノードが確認できます
docker02でネットワークをカスタマイズする
[root@docker02 ~]# docker network create -d overlay ov_net1 //オーバーレイネットワークを作成する [root@docker02 ~]# docker network ls // ネットワークをチェックする
docker03 上のネットワークを確認すると、ov_net1 ネットワークも生成されていることがわかります。
[root@docker03 ~]# dockerネットワークls
確認するブラウザ
docker01 の docker 設定ファイルを変更し、docker01 上のネットワークを確認すると、ov_net1 ネットワークも生成されていることがわかります。
[root@docker01 ~]# vim /usr/lib/systemd/system/docker.service #13 行を追加 ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 --cluster-store=consul://192.168.1.11:8500 --cluster-advertise=ens33:2376 //ローカルの /var/run/docker.sock を ens33:2376 経由で 192.168.1.11:8500 の consul サービスに保存します [root@docker02 ~]# systemctl daemon-reload [root@docker02 ~]# systemctl dockerを再起動します //Dockerを再起動 [root@docker03 ~]# dockerネットワークls // ネットワークをチェックする
3 台の Docker マシンはそれぞれ、ネットワーク ov_net1 に基づいて仮想マシンを実行し、3 台のマシンが相互に ping できるかどうかをテストします。
[root@docker01 ~]# docker run -itd --name t1 --network ov_net1 busybox [root@docker02 ~]# docker run -itd --name t2 --network ov_net1 busybox [root@docker03 ~]# docker run -itd --name t3 --network ov_net1 busybox [root@docker01 ~]# docker exec -it t1 /bin/sh [root@docker02 ~]# docker exec -it t2 /bin/sh [root@docker03 ~]# docker exec -it t3 /bin/sh
/# 10.0.0.2 にping
/# 10.0.0.3 にping
/# 10.0.0.4 にping
**docker02 で作成されたネットワークの場合、その SCOPE が global として定義されていることがわかります。つまり、consul サービスに追加されたすべての docker サービスがカスタム ネットワークを参照できるということです。
同様に、このネットワークを使用してコンテナを作成すると、ネットワーク カードが 2 つになります。
デフォルトでは、このネットワーク カードのネットワーク セグメントは 10.0.0.0 です。docker01 がこのネットワークを表示できるようにするには、docker01 の docker 構成ファイルに対応する内容を追加するだけです。
同様に、カスタム ネットワークであるため、カスタム ネットワークの特性に準拠し、Docker コンテナの名前を介して直接通信できます。もちろん、ネットワークをカスタマイズするときにそのネットワーク セグメントを指定することもできます。そのため、このネットワークを使用するコンテナは IP アドレスを指定することもできます。
以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。
<<: Node.js+express+socket でオンラインのリアルタイム多人数チャットルームを実現
>>: Windows 版 MySQL のインストール、起動、基本設定に関する詳細なグラフィック チュートリアル
google.htmlインターフェースは図の通りですコードは図のとおりです: (比較的シンプルで、入...
WeakMap オブジェクトは、キーが弱参照であるキー/値のペアのコレクションです。キーはオブジェク...
目次1. ループオブジェクト内の値2. ループオブジェクト3. キーと値のループ1. ループオブジェ...
MySQLインストールチュートリアル、参考までに具体的な内容は次のとおりです。 1. ダウンロードY...
1 / Webプロジェクトファイルをwebappsディレクトリに直接コピーするこれは最も一般的に使...
例を見てみましょう。コードは次の通り非常にシンプルです。コードをコピーコードは次のとおりです。 &l...
クローラーの開発プロセス中に、クローラーを複数のサーバーに展開する必要がある状況に遭遇したことがある...
1. 使用バージョンバイト:2.0 ant-design-vue: 2.0.0-rc.8ヴュー:3...
次のコマンドを使用してコンテナを作成し、ローカルの /home/dock/Downloads ディレ...
1. はじめにls コマンドはディレクトリの内容を表示するために使用され、Linux で頻繁に使用さ...
rpmインストールパッケージをダウンロードするMySQL公式サイト: https://dev.mys...
マイクリMyCLI は、自動補完と構文の強調表示を備えた MySQL、MariaDB、および Per...
フォーカス画像は、画像、テキスト、動的なインタラクティブ効果を統合したコンテンツを表示する方法です。...
ミニプログラムデータキャッシュ関連知識データ キャッシュ: データをキャッシュして、アプレットを終了...
トランジションドキュメントアドレスは、フェードインとフェードアウト効果を実現するための背景ポップアッ...