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 のインストール、起動、基本設定に関する詳細なグラフィック チュートリアル
この記事の例では、Vueドロップダウンメニューのコンポーネント開発の具体的なコードを参考までに共有し...
以下のように表示されます。 test コマンドはファイルが存在するかどうかを判断します。 ssh u...
目次序文準備行く!文章プロセスを開始するメインループまとめ要約する序文準備皆さんは、こんなことを考え...
CSS を使用して要素の円弧の動きを制御する方法CSS3 の新しい属性 transfrom トランジ...
効果画像: 序文:最近、屋外の大画面プロジェクトに取り組んでいました。システムの入力方法は使いにくか...
HTML で余分なテキストを省略記号として表示したい場合は、いくつかの方法があります。 1行テキスト...
序文vsftp は使いやすく安全な FTP サーバー ソフトウェアです。システムユーザーまたは仮想ユ...
今日私が書こうとしている内容では、プログラムは 7 時間近く実行され、データベースに 1,000 万...
目次Vue2.x の使用法グローバル登録部分登録使用フック機能フック関数のパラメータVue3.x の...
MySQL クエリ キャッシュはデフォルトでオンになっています。ある程度、クエリの効果は向上しますが...
<br />何の警告もなく、cnBeta で TOM.COM の Web サイトが再設計...
目次NIS の紹介ネットワーク環境: 1. 環境の準備(両方のノードが必要) 2.nisマスターサー...
実装のアイデア:まず、アラーム情報にはitemidが必要です。これは前提条件です。情報に渡されるパラ...
PSD から div css へのウェブページ切り取り例ステップ 1: まず、すべてのタグの内側と外...
通常は、最初に Dockerfile ファイルを定義し、次に docker build コマンドを使...