基本的な概念:
コンテナを物理ネットワークに直接接続する必要がある場合は、Macvlan を使用できます。 Macvlan 自体はネットワークを作成しません。本質的には、まずホストの物理ネットワーク カードを「プロミスキャス モード」で動作させ、物理ネットワーク カードの MAC アドレスを無効にして、物理ネットワーク カードがレイヤー 2 ネットワーク内のすべてのトラフィックを受信できるようにします。次のステップは、この物理ネットワーク カード上に仮想ネットワーク カードを作成し、仮想ネットワーク カードに MAC アドレスを割り当てて、1 枚のカードを複数回使用できるようにすることです。物理ネットワークの観点から見ると、各仮想ネットワーク カードは個別のインターフェイスです。 Macvlan を使用する場合は、次の点に注意する必要があります。
プロジェクト環境:
プロジェクト運営: 例 1: macvlan クロスホスト単一ネットワークソリューション: ドッカー01: (1)ens33ネットワークカードのプロミスキャスモードを有効にし、ネットワークカードの複数の仮想インターフェースを有効にします。 [root@sqm-docker01 ~]# ip link set ens33 promisc on ##ネットワーク カードの状態を確認します。 [root@sqm-docker01 ~]# ipリンクshow ens33 (2)macvlanネットワークを作成する: [root@sqm-docker01 ~]# docker network create -d macvlan --subnet 172.16.100.0/24 --gateway 172.16.100.1 -o parent=ens33 mac_net1
(3)作成したネットワークに基づいてコンテナを実行します。 [root@sqm-docker01 ~]# docker run -itd --name box1 --ip 172.16.100.10 --network mac_net1 busybox docker02: (docker01と同じ操作) プロミスキャスモードを有効にする [root@sqm-docker02 ~]# ip link set ens33 promisc on [root@sqm-docker02 ~]# ipリンクshow ens33 // macvlan ネットワークを作成する [root@sqm-docker02 ~]# docker network create -d macvlan --subnet 172.16.100.0/24 --gateway 172.16.100.1 -o parent=ens33 mac_net1 //コンテナを実行します: [root@sqm-docker02 ~]# docker run -itd --name box2 --network mac_net1 --ip 172.16.100.20 busybox (4)2つのホスト上の2つのコンテナが相互に通信できることをテストします。 注記: ping が成功する理由は、両方のコンテナーが実際の ens33 ネットワーク カードに基づいているため、ホスト上の ens33 ネットワーク カードが相互に通信できる必要があるためです。この方法では IP アドレスのみを ping できますが、コンテナ名を ping することはできません。 例 2: macvlan クロスホスト マルチネットワーク ソリューション: (1)まずホストカーネルの8021qモジュールを確認します。 [root@sqm-docker01 ~]# modinfo 8021q ##モジュールが表示されない場合は、次のコマンドを実行してロードする必要があります。 [root@sqm-docker01 ~]# modprobe 8021q ルーティング転送を有効にする: [root@sqm-docker01 ~]# echo "net.ipv4.ip_forward = 1" > /etc/sysctl.conf [root@sqm-docker01 ~]# sysctl -p ネット.ipv4.ip_forward = 1 (2)ネットワーク構成情報を変更する: ドッカー01: [root@sqm-docker01 ~]# cd /etc/sysconfig/network-scripts/ [root@sqm-docker01 ネットワークスクリプト]# ls [root@sqm-docker01 ネットワークスクリプト]# vim ifcfg-ens33 ens33 ネットワーク カードに基づいてサブネット カードを作成します。 [root@sqm-docker01 network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33.10 #ネットワークカード名をカスタマイズ [root@sqm-docker01 network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33.20 -p: 元の属性(権限)を保持することを意味します //ens33.10 ネットワーク カードを変更します。 [root@sqm-docker01 ネットワークスクリプト]# vim ifcfg-ens33.10 ##次のオプションのみを保持します。 //ens33.20 ネットワーク カードを変更します。 [root@sqm-docker01 ネットワークスクリプト]# vim ifcfg-ens33.20 設定は ens33.10 と同じですが、IP アドレスのみを変更する必要があります。 (3)サブネットカードを起動する。 [root@sqm-docker01 ネットワークスクリプト]# ifup ifcfg-ens33.10 [root@sqm-docker01 ネットワークスクリプト]# ifup ifcfg-ens33.20 //ネットワーク情報を表示 [root@sqm-docker01 network-scripts]# ifconfig (4)ens33.10とens33.20に基づいてmacvlanネットワークを作成します。 注: ネットワークセグメントによってネットワーク名が異なります [root@sqm-docker01 ~]# docker network create -d macvlan --subnet 172.16.200.0/24 --gateway 172.16.200.1 -o parent=ens33.10 mac_net10 [root@sqm-docker01 ~]# docker network create -d macvlan --subnet 172.16.210.0/24 --gateway 172.16.210.1 -o parent=ens33.20 mac_net20 (5)上記のネットワークに基づいて2つのコンテナを実行する。 [root@sqm-docker01 ~]# docker run -itd --name test1 --ip 172.16.200.10 --network mac_net10 busybox [root@sqm-docker01 ~]# docker run -itd --name test2 --ip 172.16.210.10 --network mac_net20 busybox docker02をデプロイします。 操作は基本的にdocker01と同じです。ネットワークセグメントは同じですが、ホストIPが異なることに注意してください。 #以下の操作については説明しません。 ルーティング転送を有効にする: [root@sqm-docker01 ~]# echo "net.ipv4.ip_forward = 1" > /etc/sysctl.conf [root@sqm-docker01 ~]# sysctl -p ネット.ipv4.ip_forward = 1 [root@sqm-docker02 ネットワークスクリプト]# pwd /etc/sysconfig/ネットワークスクリプト [root@sqm-docker02 ネットワークスクリプト]# vim ifcfg-ens33 [root@sqm-docker02 ネットワークスクリプト]# cp -p ifcfg-ens33 ifcfg-ens33.10 [root@sqm-docker02 ネットワークスクリプト]# cp -p ifcfg-ens33 ifcfg-ens33.20 [root@sqm-docker02 ネットワークスクリプト]# vim ifcfg-ens33.10 [root@sqm-docker02 ネットワークスクリプト]# vim ifcfg-ens33.20 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 (6)コンテナがホスト間で通信できることをテストします。(注:VMwareを使用している場合は、VMware仮想マシンによる正常な通信を可能にするために、2つのホストのデフォルトのNATモードをブリッジモードに変更する必要があります) Test4 は test2 (同じネットワーク セグメント) と通信します。
----------------------Macvlan マルチネットワーク ホスト間通信の展開が完了しました--------------------- 拡張知識ポイント:
上記はネットワークスタックをデプロイする基本的な内容です。あまり使用しません。1つのコンテナ内のリソースを他のコンテナと共有できるようにするだけです。 以下もご興味があるかもしれません:
|
<<: MySQL Limitパフォーマンス最適化とページングデータパフォーマンス最適化の詳細な説明
>>: React はモバイル端末を構築するために antd-mobile+postcss を導入しました
今日は、CSS 3.0 で実装されたネオン ボタン アニメーション効果を紹介します。効果は次のとおり...
インターネットにはすでにこの種の記事が溢れていますが、私がこれをまだ書いている理由は単純です。それは...
1. 概念分析 1: UE ユーザー エクスペリエンス <br />英語ではユーザー エ...
この記事では、参考までにWinにmysqlをインストールする詳細な手順を紹介します。具体的な内容は次...
MySQL SQL ステートメントにコメントを追加できます。MySQL SQL ステートメントのコメ...
具体的な方法は以下の通りです。 CSSコードコードをコピーコードは次のとおりです。 .wap_bot...
最近仕事でnginxの設定を変更する必要が頻繁にあり、nginxでrewriteを使用する方法を学び...
序文:プロジェクトの開発中に、1 行にナビゲーション バーが多すぎる場合に水平スクロール バーを実装...
CSS のアニメーション部分は JS によってブロックされますが、transform のアニメーショ...
JavaScript でポインターの位置を取得する方法は、イベント オブジェクトの pageX と ...
2 年生から、これらのインストールと設定の仕方を尋ねられました。簡単なチュートリアルを作成し、ここ...
1. 建設1. htpasswd.txtファイルを準備するファイルには、パッケージを倉庫にアップロー...
Win10 システムに MySQL 8.0 をインストールする際に発生する問題と解決策は次のとおりで...
Linux 仮想マシン: VMware + Ubuntu 16.04.4 Windows ネイティブ...
最終結果はこんな感じです、かわいいでしょう… PS: HTML と CSS の知識があればベストです...