Docker コンテナのカスタム ホストのネットワーク アクセス操作

Docker コンテナのカスタム ホストのネットワーク アクセス操作

docker-compose.yml に extra_hosts キーワードを追加すると、コンテナの /etc/hosts にデータが書き込まれます。

追加ホスト

ホスト名マッピングを追加します。

追加ホスト:

「somehost:162.242.195.82」

「その他のホスト:50.31.209.229」

レコードは /etc/hosts に作成されます:

162.242.195.82 誰かホスト

50.31.209.229 その他のホスト

知らせ:

ローカルマシンを指している場合は、コンテナのIPを書き込まないでください(コンテナに固定IPを設定しない限り、再起動後にIPが変更されるため)。代わりに、192.168.xxx.xxxなどのホストのIPを書き込んでください。

補足: Docker ネットワーク: ホスト モード

Docker テクノロジーを本番レベルのシナリオに適用する準備ができたら、多くのネットワーク知識を理解する必要があります。ネットワークは Docker の比較的弱い部分です。より高いネットワーク要件を満たすには、Docker のネットワーク知識を理解する必要があります。

このセクションでは、まず Docker ネットワーク モデルのホスト モデルについて理論的に紹介し、次に実用的な例を使用して Docker ネットワーク モデルをより深く理解できるようにします。

Dockerネットワーク

Docker をインストールすると、3 つのネットワークが自動的に作成されます。 docker network ls コマンドを使用してこれらのネットワークを一覧表示できます。

docker ネットワーク ls

結果は次のようになるはずです

ネットワーク ID 名前 ドライバー スコープ
594430d2d4bb ブリッジ ブリッジ ローカル
d855b34c5d51 ホスト ホスト ローカル
b1ecee29ed5e なし null ローカル

Docker にはこれら 3 つの組み込みネットワークがあり、コンテナを実行するときに、それらを使用してコンテナが接続するネットワークを指定できます。

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

ホスト モード: --net=host を使用して指定します。

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

ブリッジ モード: --net=bridge を使用してデフォルト設定を指定します。

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

ホストモード

Docker は、プロセスを分離するための PID 名前空間、ファイル システムを分離するためのマウント名前空間、ネットワークを分離するためのネットワーク名前空間など、Linux の名前空間テクノロジを使用してリソースを分離します。ネットワーク名前空間は、ネットワーク カード、ルーティング、Iptable ルールなど、他のネットワーク名前空間から分離された独立したネットワーク環境を提供します。

ホスト モードは VMware のブリッジ モードに似ています。ホスト マシンと同じネットワーク内にありますが、独立した IP アドレスはありません。 Docker コンテナには通常、独立したネットワーク名前空間が割り当てられます。

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

次の図に示すように、コンテナとホストは同じネットワーク名前空間にあり、同じネットワーク プロトコル スタックを使用します。コンテナは、ホストのすべてのネットワーク インターフェイスを直接使用できます。

ケース検証

ホストリンクインターフェースを表示

ip a

右側のクラウド環境ホストの IP は {host0.ip}/24 です。nginx コンテナをホスト モードで起動し、tcp80 ポートをリッスンします。

--net host パラメータを使用して、ホストモードを使用するネットワークモデルを指定します。

docker run --name=nginx --net=host -p 80:80 -d nginx

ホストと一致するコンテナリンクインターフェースを確認します

docker exec -it nginx cat /etc/hosts

このとき、外部からコンテナ内のアプリケーションにアクセスしたい場合は、ホストマシンで直接実行する場合と同じように、NAT 変換なしで {host0.ip}:80 を使用します。ただし、ファイル システムやプロセス リストなど、コンテナーの他の側面は、ホスト マシンから分離されたままです。

curl {host0.ip}

要約する

ホストモードはシンプルで、パフォーマンスが優れています。ホストモードのネットワークモデルは、最もシンプルでレイテンシが最も低いモードです。コンテナプロセスはホストネットワークインターフェースと直接通信し、物理マシンのパフォーマンスと一致します。ホストはネットワークの自己構成と管理に役立たず、ホストのすべてのコンテナは同じIPを使用します。

また、ホスト リソースの利用にも役立ちません。このモードは、高いネットワーク パフォーマンス要件が必要な場合に使用できます。それ以外の場合は他のモードを使用する必要があります

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

以下もご興味があるかもしれません:
  • Dockerネットワーク構成プロセスの詳細な紹介
  • Docker ネットワークの原理とカスタム ネットワークの詳細な分析
  • Docker の 4 つのネットワーク タイプの主な例
  • Dockerカスタムネットワークの詳細な紹介

<<:  セマンティックHTML構造を理解する方法

>>:  Vueは2つのルーティング許可制御メソッドを実装しています

推薦する

JavaScriptの記事では、Webフォームの操作方法を説明します。

1. はじめに先ほど、ウェブページの急速な発展について紹介しました。今回は、より深い内容についてお...

Nodeイベントループの包括的な理解

目次ノードイベントループイベントループ図メインスレッドイベントループタイマーキューの仕組み投票キュー...

ウェブ画像のホットリンクと座標値を設定するサンプルコード

時には、画像上に複数の領域を設定する必要があります。マウスで画像のさまざまな領域をクリックしてさまざ...

MySQL のバイナリおよび varbinary データ型の詳細な説明

序文BINARY と VARBINARY は、文字列ではなくバイナリ文字列を格納する点を除いて、CH...

アコーディオン効果を実現するネイティブ js

実際のWebページ開発でも、アコーディオンは頻繁に登場します。簡単なアコーディオンを作ったのですが、...

CentOS システムでの JDK のインストールと設定の概要

目次序文OpenJDKの確認とアンインストールダウンロードした圧縮パッケージを使用してJDKをインス...

Vueは3段階のナビゲーション表示と非表示を実装します

この記事では、3階層ナビゲーションの表示と非表示を実現するためのVueの具体的なコードを例として紹介...

LinkedIn がウェブサイト閲覧を簡素化するためにリニューアル

ビジネス ソーシャル ネットワーキング サイト LinkedIn は最近、ナビゲーション バーとユー...

MySql はコミットする必要がありますか?

MySQL が挿入などの操作を実行するときにコミットする必要があるかどうかは、ストレージ エンジン...

Linux でプロセスを隠す方法と、遭遇する落とし穴

序文1. この記事で使用したツールは、https://github.com/gianlucabore...

mysqlを使用して、URLから返されたhttp GETリクエストデータを記録します。

ビジネスシナリオの要件と実装ロジックの分析ビジネスでは、HTTP GET を使用してデータを要求する...

Vueの監視プロパティの詳細

目次1.watchは一般的なデータ(数値、文字列、ブール値)の変更を監視します。 1. 数値2. 文...

HTML4.0 要素のデフォルトスタイルの配置

コードをコピーコードは次のとおりです。 html、アドレス、引用ブロック、本文、dd、div、 dl...

TypeScriptの列挙型を詳しく説明する

目次1. デジタル列挙2. 文字列の列挙3. 逆マッピング4. 異種列挙5. 定数列挙6. 列挙メン...

mysql 5.7.18 winx64 無料インストール設定方法

1. ダウンロード2. 減圧3. パス環境変数を追加し、mysqlが配置されているbinディレクトリ...