Dockerのネットワークモードと設定方法

Dockerのネットワークモードと設定方法

1. Dockerネットワークモード

docker run が Docker コンテナを作成するときに、–net オプションを使用してコンテナのネットワーク モードを指定できます。Docker には次の 4 つのネットワーク モードがあります。

–net=host を使用して指定されるホスト モード。

コンテナ モード。–net=container:NAME_or_ID を使用して指定します。

なしモード。–net=none を使用して指定します。

ブリッジ モード。–net=bridge を使用して指定され、デフォルト設定です。

ホストモード

コンテナを起動するときにホスト モードを使用すると、コンテナは独立したネットワーク名前空間を取得せず、ホストとネットワーク名前空間を共有します。コンテナは独自のネットワーク カードを仮想化したり、独自の IP を構成したりはせず、ホストの IP とポートを使用します。

たとえば、マシン 10.10.101.105/24 上でホスト モードで Web アプリケーションを含む Docker コンテナーを起動し、TCP ポート 80 をリッスンします。コンテナ内で ifconfig などのコマンドを実行してネットワーク環境を表示すると、ホストマシン上の情報が表示されます。外部からコンテナ内のアプリケーションにアクセスする場合、ホストマシンで直接実行する場合と同じように、NAT 変換なしで 10.10.101.105:80 を直接使用できます。ただし、ファイル システムやプロセス リストなど、コンテナーの他の側面は、ホスト マシンから分離されたままです。

コンテナモード

このモードでは、新しく作成されたコンテナーがネットワーク名前空間をホストと共有するのではなく、既存のコンテナーと共有することを指定します。新しく作成されたコンテナは、独自のネットワーク カードを作成したり、独自の IP を構成したりするのではなく、指定されたコンテナと IP、ポート範囲などを共有します。同様に、ネットワークを除いて、ファイル システムやプロセス リストなど、2 つのコンテナーの他の側面は分離されたままです。 2 つのコンテナのプロセスは、lo ネットワーク カード デバイスを介して通信できます。

なしモード

このモードは前の 2 つとは異なります。このモードでは、Docker コンテナには独自のネットワーク名前空間がありますが、Docker コンテナに対してネットワーク構成は実行されません。つまり、この Docker コンテナには、ネットワーク カード、IP、ルーティングなどの情報が含まれていません。 Docker コンテナのネットワーク カードを追加し、IP を構成する必要があります。

ブリッジモード

ブリッジモードはDockerのデフォルトのネットワーク設定です。コンテナごとにネットワーク名前空間を割り当て、IPアドレスなどを設定し、ホスト上のDockerコンテナを仮想ブリッジに接続します。

Docker サーバーを起動すると、ホスト上に docker0 という仮想ブリッジが作成されます。このホスト上で起動された Docker コンテナは、この仮想ブリッジに接続されます。

仮想ブリッジは物理スイッチと同様に動作し、ホスト上のすべてのコンテナーがスイッチを介してレイヤー 2 ネットワークに接続されます。次のステップはコンテナにIPを割り当てることです。DockerはRFC1918で定義されたプライベートIPセグメントからホストマシンとは異なるIPアドレスとサブネットを選択し、docker0に割り当てます。docker0に接続されたコンテナは、このサブネットから空いているIPを選択します。

たとえば、Docker は通常、ネットワーク セグメント 172.17.0.0/16 を使用し、172.17.42.1/16 を docker0 ブリッジに割り当てます (docker0 は、ホスト上で ifconfig コマンドを使用して確認できます。ブリッジの管理インターフェイスと見なすことができ、ホスト上の仮想ネットワーク カードとして使用できます)

2. Dockerネットワーク構成 – 固定IPの設定

Docker コンテナは起動時にデフォルトでブリッジ モードを使用します。Docker コンテナが起動すると、docker0 という仮想ブリッジに接続されます。そのため、Docker コンテナの IP アドレスは起動するたびに固定されず、管理が不便です。Docker クラスターを管理する場合など、固定 IP マッピングが必要になる場合があります。

Docker コンテナに固定 IP を設定する場合、コンテナの IP を設定するためにパイプワークが必要です。

1. ホストは次のようにパイプワークをダウンロードします。

$ git クローン https://github.com/jpetazzo/pipework.git
$ cp パイプワーク/パイプワーク /usr/local/bin/

2. ブリッジツールパッケージbridge-utilsをインストールする

$ yum -y ブリッジユーティリティをインストールします

3. ブリッジを作成し、IPセグメントを設定する

$ brctl addbr br1
$ ip link set dev br1 up
$ IPアドレス 192.168.10.1/24 dev br1を追加します

4. コンテナを起動する

#centosイメージをベースにしたコンテナ(centos-ip)を起動します
$ docker run -d --name=centos-ip centos

5. IPを設定する

$ パイプワーク br1 centos-ip 192.168.10.20/24

centos-ipという名前のコンテナにはIP 192.168.10.20が割り当てられています。

ping コマンドと ssh コマンドを使用して、ping を実行して正常にログインできるかどうかを確認します。

$ 192.168.10.20にpingする
$ 192.168.10.20 へログイン

注意: SSH 時に Centos コンテナの root パスワードを入力する必要があります。 Centos コンテナの作成時に root パスワードを指定しなかった場合は、まずコンテナに入って root パスワードを設定できます。

docker exec -it コンテナID/名前
sudo パスワード ルート

付録: ブリッジの削除

brctl ショー 
# ブリッジのステータスを確認する brctl delif <ブリッジ名> <ポート名> 
#ブリッジのポートをアンインストールする ifconfig 
# ブリッジネットワークカード名があるかどうかを確認します ifconfig <ブリッジ名> down 
#このネットワークカードを閉じる brctl delbr <ブリッジ名> 
#ブリッジを削除する

Docker バージョン 1.9 以降では、次の方法を使用できます。

1. カスタムネットワークを作成する

docker ネットワーク作成 --subnet=192.168.10.1/24 network_my
# docker ネットワーク ls 
ネットワーク ID 名前 ドライバー スコープ
1fb22da7d8a3 ブリッジ ブリッジ ローカル
fe259334b842 ホスト ホスト ローカル
8c5971ff48d8 network_my ブリッジ ローカル
3aaf0356c19c なし null ローカル

2. Dockerコンテナを起動する

docker run -itd --name hadoop0 --hostname hadoop0 --net network_my --ip 192.168.10.30 -d -P -p 50070:50070 -p 8088:8088 hadoop:master

補足: Docker イメージソースの変更とネットワークモードの変更

docker イメージが変更されました。/etc/docker/daemon.json にイメージ アドレスを追加し、別の方法で有効にしてください。

{ "exec-opts": ["native.cgroupdriver=systemd"] }

Dockerを再起動する

systemctl docker を再起動 systemctl docker のステータス

それは実際にうまくいきました。

dockerの設定は時々このように動作し、時々このように動作します。本当に言葉にできません

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。

以下もご興味があるかもしれません:
  • Dockerの4つのネットワークモード
  • Dockerのインストール方法とDockerの4つのネットワークモードの詳細説明
  • Dockerネットワークモード(4つのモード)の詳細な紹介
  • DockerにおけるVLANネットワークモードの設定の詳細な説明
  • Docker 4 ネットワーク モードのデモンストレーションと接続テスト

<<:  JavaScriptのクローン作成についての簡単な説明

>>:  プロトタイプとプロトタイプチェーン プロトタイプとプロトタイプの詳細

推薦する

MySQL5.7.17 winx64 インストール バージョン構成方法 Windows Server 2008 R2 でのグラフィック チュートリアル

参考までに、Winでmysql5.7をインストールします。具体的な内容は次のとおりです。 @Auth...

Linux システムによって報告される xfs_vm_releasepage 警告問題に対処する方法

問題の説明最近、いくつかのマシンで、一日のさまざまな時間に次の警告メッセージが表示されました。 3月...

Linux コマンドにおける Ctrl+z、Ctrl+c、Ctrl+d の違いと使い方

Linux で Ctrl+c、Ctrl+d、Ctrl+z はどういう意味ですか? Ctrl+c と ...

Mysqlチュートリアルでのグループランキングの実装例の詳細な説明

目次1. データソース2. データの総合順位1) 総合ランキング2) 同順位3) 同順位3. データ...

クリックイメージ反転効果を実現するJavaScript

最近、顔コレクションに関するプロジェクトに取り組んでいましたが、フロントエンドモジュールを書いている...

Mysql マスタースレーブ同期 Last_IO_Errno:1236 エラー解決

Mysql マスタースレーブ同期の Last_IO_Errno:1236 エラーの原因は何ですか? ...

MySQL 5.6 での table_open_cache パラメータの最適化と適切な構成の詳細な説明

1. はじめにtable_cache は非常に重要な MySQL パフォーマンス パラメータであり、...

Vue でスロットを使用する方法についての簡単な説明

定義と使用方法:コンポーネントのテンプレートでスロットタグの定義を使用します。デフォルトの表示値は、...

CSS を使用して物流の進行状況のスタイルを実装するためのサンプルコード

効果: CSS スタイル: <スタイル タイプ="text/css">...

JavaScript を使用して動的な QQ 登録ページを作成する

目次1. はじめに1. 基本レイアウト2. 写真を自動的に切り替える3. コンテンツを追加する4. ...

パフォーマンス負荷診断にMySQLシステムデータベースを使用する方法

ある達人がかつて、自分の妻のことを知るのと同じくらい、自分が管理するデータベースのことを知るべきだと...

MySQLでトリガーを作成する方法

この記事の例では、参考のためにMySQLトリガーを作成するための具体的なコードを共有しています。具体...

MySQL 5.7 に組み込まれているストレス テストの mysqlslap コマンドと構文の詳細な説明

序文mysqlslap は、MySQL サーバーへのクライアント負荷をシミュレートし、各ステージの時...

ナビゲーションバーのドロップダウンメニューのサンプルコードを実装するためのHTML+CSS

効果コード内の画像は自分で変更できますドロップダウンメニューのHTMLコード <ヘッダークラ​...

スケルトンスクリーン効果を実現する CSS

ネットワーク データを読み込むときは、ユーザー エクスペリエンスを向上させるために、通常は円形の読み...