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

推薦する

Linuxでユーザーが所属するグループを変更する方法

Linuxでユーザーが所属するグループを変更する1. ユーザーのグループを設定する usermod ...

jQuery キャンバスは QR コード付きのポスターを生成します

この記事では、jQuery キャンバスを使用して QR コード付きのポスターを生成するための具体的な...

CSSとHTMLを組み合わせる4つの方法

(1)各HTMLタグには属性スタイルがあり、CSSとHTMLを組み合わせている。 <div s...

docker compose を使用して FastDfs ファイル サーバーをインストールする詳細な例

ドッカーの作成 バージョン: '2' サービス: fastdfsトラッカー: ホスト...

MySQL 5.7.21 winx64 無料インストールバージョン設定方法グラフィックチュートリアル

MySQL 5.7.21 winx64無料インストールバージョンの設定方法、参考までに、具体的な内容...

Jenkins の紹介と Docker で Jenkins をデプロイする方法

1. 関連概念1.1 Jenkins の概念: Jenkins は、使用されるプラットフォームに関係...

Docker を使用した Laravel アプリケーションのデプロイ例

この記事で使用されているPHPベースイメージはphp:7.3-apacheです。この記事の Lara...

MySQL エラー「すべての派生テーブルには独自のエイリアスが必要です」の解決方法

MySQL は、マルチテーブルクエリを実行するときにエラーを報告します。 [SQL] SELECT ...

フレックスレイアウトは、上下固定、中間スライドのレイアウトモードを実現します。

この記事では、主に、上下固定と中スライドレイアウトを実現するためのフレックスレイアウトのレイアウト方...

HTML 9グリッドレイアウトの実装方法

ウェブサイトのレイアウトの多様化は、当社のフロントエンドの得意分野です。最近、UC ブラウザのデフォ...

Dockerはbusyboxを使用してベースイメージを作成します

Docker イメージの最初の行は FROM alpine などのイメージで始まりますが、最初のベー...

デカルト積原理を使用してMySQLで複数のテーブルをクエリする方法を簡単に説明します。

MySQL マルチテーブルクエリ (直積原理)まず、データが使用するテーブルを決定します。デカルト...

Nodeはkoa2を使用してシンプルなJWT認証方式を実装します

JWT の紹介JWTとは正式名称はJSON Web Tokenで、現在最も人気のあるクロスドメイン認...

ラベルとボタンを削除し、背景画像の点線/影を追加すると完璧な解決策になります

ユーザーが登録すると、ラベルをクリックして確認コードを変更します。クリックするとラベルに影の部分がで...

JavaScript が Xiaomi のカルーセル効果を模倣

この記事は、透明度を変えてカルーセルにするXiaomiカルーセルを真似て書いたものです。初心者なので...