Docker コンテナのネットワーク設定によく使われるコマンドの詳しい説明

Docker コンテナのネットワーク設定によく使われるコマンドの詳しい説明

基本的なネットワーク構成

Docker はイメージに基づいて複数のコンテナを「開く」ことができ、各コンテナは互いに影響を及ぼしませんが、コンテナが互いに完全に分離されていることを意味するわけではありません。イメージを実行すると、Docker はコンテナ ポートをホスト ホストにマッピングし、コンテナ ポートを別のコンテナにマッピングするネットワーク相互接続機能を提供し、コンテナがホスト ホストと通信したり、コンテナ同士が通信したりできるようにします。

### 外部からコンテナアプリケーションにアクセスする

コンテナを起動するときに、対応するパラメータを指定しないと、コンテナ外部のネットワーク経由でコンテナ内のネットワーク アプリケーションやサービスにアクセスできなくなります。外部からアクセスする必要があるコンテナ内のネットワーク アプリケーションを実行する場合は、-P または -p パラメータを使用してポート マッピングを指定できます。 -P フラグを使用すると、Docker は 49000 から 49900 までのポートをコンテナ内の開いているネットワーク ポートにランダムにマッピングします。

docker run -d -p [ミラーIDまたはタグ]

マップするポートを指定するには -p (小文字) を使用します。指定されたポートにバインドできるコンテナーは 1 つだけです。サポートされている形式は、ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort です。

すべてのインターフェースアドレスをマップする

hostPort:containerPort を使用して、ローカル ポート 5000 をコンテナーのポート 5000 にマップします。

docker run -d -p 5000:5000 トレーニング/ウェブアプリ python app.py

デフォルトでは、すべてのローカル インターフェイス上のすべてのアドレスがバインドされます。複数のポートをバインドするには、-p フラグを複数回使用します。

docker run -d -p 5000:5000 -p 3000:80 トレーニング/ウェブアプリ python app.py

指定されたアドレスの指定されたポートにマップします

ip:hostPort:containerPort 形式を使用して、ローカルホスト アドレス 127.0.0.1 などの特定のアドレスを使用してマッピングを指定できます。

docker run -d -p 127.0.0.1:5000:5000 トレーニング/ウェブアプリ python app.py

他の内部コンテナの IP アドレスにすることもできます。

指定されたアドレスの任意のポートにマップする

ip::containerPort を使用して、localhost の任意のポートをコンテナのポート 5000 にバインドします。ローカル ホストは自動的にポートを割り当てます。

docker run -d -p 127.0.0.1::5000 トレーニング/ウェブアプリ python app.py

udp フラグを使用して UDP ポートを指定することもできます。

docker run -d -p 127.0.0.1:5000:5000/udp トレーニング/webapp python app.py

マッピングされたポート構成を表示する

docker port を使用して、現在マップされているポート構成とバインドされたアドレスを表示します。

docker ポート nostalgic_morse 5000

コンテナには独自の内部ネットワークと IP アドレスがあります (すべての変数値を取得するには、docker inspect + コンテナ ID を使用します)。

コンテナ相互接続によりコンテナ間の通信が可能になる

コンテナの接続システムは、ポート マッピングに加えて、コンテナ内のアプリケーションと対話するもう 1 つの方法です。ソースコンテナと受信コンテナの間にトンネルを作成し、受信コンテナはソースコンテナによって指定された情報を見ることができます。

カスタムコンテナ名

リンクシステムはコンテナ名に基づいて実装されます。したがって、まず覚えやすいコンテナ名をカスタマイズする必要があります。

コンテナを作成すると、システムによってデフォルトで名前が割り当てられますが、コンテナにカスタム名前を付けると、次の 2 つの利点があります。

  • カスタム名は覚えやすい
  • これは、Web コンテナーを db コンテナーに接続する場合など、他のコンテナーに接続するときに便利なパラメーター ポイントになります。

--name フラグを使用して、コンテナにカスタム名を付けます。

docker run -d -p --name web training/webapp python app.py

名前を表示するには docker ps を使用するか、コンテナの名前を表示するには docker inspect を使用します。

docker examine -f "{{name}}" [ミラーID]

コンテナの名前は一意です。すでにコンテナに web という名前を付けている場合は、web という名前の新しいコンテナを作成する前に、まず docker rm コマンドを使用してコンテナを削除する必要があります。

コンテナ相互接続

--link パラメータを使用して、コンテナが互いに安全にやり取りできるようにします。

--link パラメータの形式は --link name:alias です。ここで、name はリンクするコンテナの名前、alias はこの接続のエイリアスです。

たとえば、新しいデータベース コンテナーを作成しましょう。

docker run -d --name db トレーニング/postgres

次に、Web コンテナーを作成し、それを db コンテナーに接続します。

docker run -d -p --name web --link db:db training/webapp python app.py

このとき、db コンテナと web コンテナは相互に通信できます。コンテナの接続を表示するには、docker ps を使用できます。

--link パラメータを使用すると、Docker はポートを開かずに安全なトンネルを介して 2 つのコンテナ間で通信できるため、ポートが外部ネットワークに公開されることを回避できます。

パブリックコンテナの接続情報を表示する

環境変数: envコマンドを使用してコンテナの環境変数を表示します。

docker run --name web --link db:db training/webapp env

/etc/hosts ファイル: リンク パラメータを使用すると、Docker は親コンテナの /etc/hosts ファイルにホスト情報を追加します。以下は親コンテナwebのhostsファイルです。

docker run -t -i --link db:db トレーニング/webapp /bin/bash
root@aed84ee21bd3:/opt/webapp# cat /etc/hosts
127.17.0.7 aed84ee21bde
...
172.17.0.5デシベル

1 つ目は、Web コンテナのホスト情報です。デフォルトでは、独自の ID がホスト名として使用されます。 2 番目は、db コンテナの IP とホスト名です。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Dockerリポジトリの一般的なコマンドの詳細な説明
  • Dockerfile の一般的なコマンドの概要
  • Docker 共通コマンドまとめ(実践編)
  • コンテナイメージをクリアするためによく使用されるDockerのコマンドの概要
  • 一般的なDockerコマンドの詳細な説明

<<:  Mysqlデータベースの文字化けに対処する方法

>>:  PHPのmail()関数を使用してメールを送信する

推薦する

MySQL テーブル フィールドの時間設定のデフォルト値

アプリケーションシナリオデータ テーブルでは、アプリケーションは各データがいつ作成されたかを記録する...

クリックイメージ反転効果を実現するJavaScript

最近、顔コレクションに関するプロジェクトに取り組んでいましたが、フロントエンドモジュールを書いている...

Apache での ModSecurity のインストール、有効化、および構成

ModSecurity は、Web サーバーに入るすべてのパケットをチェックする強力なパケット フィ...

シェルスクリプトはNginxのaccess.logのPVを定期的にカウントし、APIに送信してデータベースに保存します。

1. PVとIPの統計一日のPV(ページビュー)をカウントする cat access.log | ...

HTML タグの表示モード (ブロックレベル タグ、インライン タグ、インライン ブロック タグ) に関する簡単な説明

今日の講義では、HTML におけるタグの表示モードについてお話ししましたが、これはブロックレベルタグ...

CSS インライン スタイル、埋め込みスタイル、外部参照スタイルを使用する 3 つの方法

3 つの方法を使用する簡単な例は次のとおりです。インラインスタイル: <!doctypehtm...

Javascriptで戦略パターンを実装する方法

目次概要コードの実装要約する概要戦略パターンは、JavaScript デザイン パターンにおける動作...

Docker デプロイメント MySQL8 クラスター (マスター 1 台とスレーブ 2 台) の実装手順

目次1. CentOS 7.9 20にDockerをインストールする2. MySQL クラスターをデ...

HTMLとCSSを使用して、自分だけの暖かい男「Dabai」を作成します

最終結果はこんな感じです、かわいいでしょう… PS: HTML と CSS の知識があればベストです...

Docker実践: Pythonアプリケーションのコンテナ化

1. はじめにコンテナはサンドボックス メカニズムを使用して相互に分離します。コンテナ内にデプロイさ...

MySQL SQL ステートメントが遅い場合の一般的な原因と解決策

1. インデックス不足または無効なインデックスによるクエリの遅延数千万件のデータを含むテーブルで、イ...

要素動的ルーティングブレッドクラムの実装例

マスターするには: localStorage、コンポーネントのカプセル化えーと、GIF に変換したビ...

知っておくべき 7 つのネイティブ JS エラーの種類

目次概要1. 範囲エラー2. 参照エラー3. 構文エラー4. タイプエラー5. URIエラー6. 評...

Vueはデータを初期状態にリセットします

場合によっては、データ内のデータを再利用する必要がありますが、データ内のデータはさまざまなフォーム、...

バックエンド サーバー プロキシとして Nginx を推奨する理由 (理由分析)

1. はじめに実際のサーバーはパブリックインターネットに直接公開されるべきではありません。そうしな...