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つのルーティング許可制御メソッドを実装しています

推薦する

React-Dropzone をベースにアップロードコンポーネント機能を開発する (サンプルデモ)

今回はReact-Flaskフレームワーク上でアップロードコンポーネントを開発するスキルについてお話...

MySQL における主キーが 0 であることと主キーの自己選択制約の関係についての詳しい説明 (詳細)

序文この記事は主にMySQLの主キー0と主キー自己排除制約の関係を紹介し、皆さんの参考と学習のために...

Vue3.0 手書きカルーセル効果

この記事では、Vue3.0の手書きカルーセル効果の具体的なコードを参考までに共有します。具体的な内容...

MySQL カーソル関数と使用法

目次意味カーソルの役割カーソルの使用カーソルの宣言カーソルを開くカーソルデータのトラバースカーソルを...

MySQL の最適化: サブクエリの代わりに結合を使用する

サブクエリの代わりにJOINを使用するMySQL はバージョン 4.1 以降で SQL サブクエリを...

Webスキル: 複数のIEバージョンの共存ソリューション IETester

私のおすすめ複数のIEバージョンの共存のためのソリューション以前に IE6、IE7、IE8 の共存に...

Vue は Tencent Map を統合して API を実装します (デモ付き)

目次執筆の背景プロジェクトの説明事前準備注記執筆の背景以前のプロジェクトではTencent Maps...

MySQL 5.7.23 解凍バージョンのインストールチュートリアル(画像とテキスト付き)

毎回インストールチュートリアルを探すのは面倒なので、後で確認できるように手順をバックアップします。解...

Linux運用保守ツールSupervisor(プロセス管理ツール)のインストールと使用

1. はじめにSupervisor は Python で開発された汎用プロセス管理プログラムです。通...

MySQLでMyISAMストレージエンジンをInnodbに変更した操作記録のまとめ

一般的に、MySQL はデフォルトでさまざまなストレージ エンジンを提供しており、次のように表示され...

Nginx Rewrite の使用シナリオと設定方法の分析

Nginx Rewriteの使用シナリオ1. URL アドレスジャンプ。たとえば、ユーザーが pm....

CSS は Alibaba ベクター ライブラリを使用して、対応する位置に見栄えの良いアイコン効果をすばやく追加します (サンプル コード)

Alibaba ベクターアイコンライブラリにアクセスAlibaba ベクターアイコンライブラリ好き...

MySql 8.0.16-win64 インストール チュートリアル

1. ダウンロードしたファイルを以下のように解凍します。 。 2. 環境変数に解凍ディレクトリを追加...

Ubuntu で apt-get を使用して mysql をインストールおよび完全にアンインストールする方法の詳細な説明

1. mysqlをインストールします。 udo apt-getでmysql-serverをインストー...

LinuxにKafkaをインストールする

目次1.1 前提条件としてのJava環境1.2 Zookeeperのインストールと設定1.3 Kaf...