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

推薦する

IMG での UserMap の使用例

usemap は <img> タグの属性であり、使用するイメージ マップの名前を指定する...

Docker 構成コンテナの場所とヒントのまとめ

Docker の使用に関するヒント1. 停止したDockerコンテナをすべてクリーンアップする停止し...

HTMLはWEB標準の開発の中心的な基盤です

HTML 中心のフロントエンド開発は、ほぼ Web 標準の意味です。共通しているのは「分離」という考...

VirtualBox+Ubuntu16でKubernetesクラスタを構築する実装

目次Kubernetesについて基本的な環境の準備VirtualBoxをインストールするUbuntu...

Linux 上で Python3.6 をコンパイルしてインストールするための詳細なチュートリアル

1. まず、公式ウェブサイト https://www.python.org/downloads/so...

Linux で txt を mysql にインポートする方法

序文昨日、小さなプロジェクトを書いていたときに、txt ドキュメントのデータを mysql データベ...

HTML でさまざまなスペースの特徴と表現を探る (推奨)

I. 概要HTML テンプレートを作成するときに、テキスト レイアウトの手段としてスペースが使用さ...

レスポンシブデザインについての簡単な説明

1. レスポンシブ デザインとは何ですか?レスポンシブデザインとは、ウェブサイトの開発プロセス中に、...

xshell を使用して VMware で Linux に接続する方法 (2 つの方法)

【序文】最近、ITOO の試験システムのストレステストを行いたいので、自分のコンピュータに Lin...

CSS マルチカラムレイアウトソリューション

1. 固定幅+適応型期待される効果: 左側は固定幅、右側は適応幅 共通コード: html: <...

Win10システムにMySQL 8.0をインストールするときに発生する問題を解決する

Win10 システムに MySQL 8.0 をインストールする際に発生する問題と解決策は次のとおりで...

MySQL 分離レベル操作プロセスの詳細説明 (cmd)

コミットされていない読み取りの例の操作プロセス - コミットされていない読み取り1. 2 つの My...

MySQL binlog を開く手順

Binlog は、MySQL データの変更を記録するために使用されるバイナリ ログ ファイルです。B...

無効と読み取り専用で入力を読み取り専用に設定する

読み取り専用入力を実現するには、無効と読み取り専用の 2 つの方法があります。当然、どちらの結果も読...

border-radiusは要素に丸い境界線を追加する方法です

border-radius:10px; /* すべての角は半径 10px で丸められます*/ bor...