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

推薦する

UnityはMySQLに接続し、テーブルデータの実装コードを読み取ります

表は以下のとおりです。 Unity が読み取って呼び出すときのコード: データベース内の別のテーブル...

Centos8でdockerがインストールできない問題の解決方法

問題 [root@zh ~]# [root@zh ~]# [root@zh ~]# yum -y d...

Docker で Jenkins サービスを構築する例

画像をプルする root@EricZhou-MateBookProX: docker pull je...

Linux DHCPサービスの詳細な説明

目次1. DHCP サービス (動的ホスト構成プロトコル) 1. 背景2. 概要3. 利点4.DHC...

Nginxホットデプロイメントの実装

目次セマフォNginx ホットデプロイメント上記のブログ投稿に従ってください。ファイアウォールをオフ...

Vue でフルスクリーンを実装し、フルスクリーン終了を監視する

目次序文:実装手順:完全なソースコード:詳細情報:序文: vueでは、デフォルトページを実装し、di...

Linux で nohup ログ出力が大きすぎる問題の解決方法の詳細な説明

最近、hadoop テスト クラスターで spark ストリーミング プログラムを実行し、その後、n...

クールなネオンライト効果を実現する純粋な CSS (デモ付き)

私は最近、YouTube の CSS アニメーション効果チュートリアル シリーズをフォローしています...

Nginx ストリーム構成プロキシ (Nginx TCP/UDP ロード バランシング)

序章nginx が優れたリバース プロキシ サービスであることは誰もが知っています。nginx を使...

CentOS 7.5 が Varnish キャッシュサーバー機能を導入

1. ワニスの紹介Varnish は、高性能なオープンソースのリバースプロキシサーバーおよび HTT...

MySQLのnull値に関する小さな問題

今日、null 値をテストしていたところ、小さな問題が見つかりました。ここに記録しました。以前にも遭...

Remレイアウトを使用して適応性を実現する

以前、モバイル適応に関する記事を書きました。非常に長く、内容が多すぎて読みづらいものでした。そこで、...

CSS3 のエラスティック レイアウトでの em の使用の概要: 1em は何ピクセルですか?

私は長い間 CSS を使用してきましたが、Web 要素の関連属性を設定するために常に「px」を使用し...

MySql インデックス使用戦略の分析

MySql インデックスインデックスの利点1. 一意のインデックスまたは主キー インデックスを作成す...