基本的な概念:
コンテナを物理ネットワークに直接接続する必要がある場合は、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 を導入しました
Dockerfile は Docker イメージを構築するために使用されるファイルです。コマンドパラ...
目次1. デモプロジェクト1.1 インターフェースの準備1.2 構成の準備2. Dockerがリモー...
最近、私はデザインには階層感覚が必要だと言っています。この階層感覚には、色の重ね合わせや要素の重ね合...
MySQL 5.7.20のインストールと設定方法のグラフィックチュートリアルをあなたと共有します1...
1. VMware Workstation 64バージョンをダウンロードするhttps://www....
####システム内の入出力の管理#### 1. システムの入力と出力のリダイレクトを理解する入力リダ...
目次1. 日付までのタイムスタンプ2. UTCを北京時間に変換するWXS (WeiXin Scrip...
Linuxユーティリティcertbotを使用してhttps証明書を生成するこのツールは Let...
1. MySQL 独自のストレステストツール - Mysqlslap mysqlslap は、mys...
ロックの分類:データ操作の粒度から:テーブルロック:操作時にテーブル全体がロックされます。行ロック:...
序文今日は、Prince が Windows で負荷分散に Nginx + Tomcat を使用する...
序文同社の開発者は、データの更新時に replace into ステートメントを使用していました。不...
目次DockerでTomcatをインストールするtomcatイメージを使用してコンテナを作成する(イ...
目次概要機能性と読みやすさ空白括弧セミコロンインデント身元大文字と小文字を区別予約キーワード概要すべ...
1. MySQLデータベースの構成と関連概念まず、MySQL はリレーショナル データベースである...