Dockerコンテナ同士を接続する3つの方法の詳しい説明

Dockerコンテナ同士を接続する3つの方法の詳しい説明

Docker コンテナ間の相互接続と通信には 3 つの方法があります。

  • Docker 内部ネットワーク: 柔軟性とパワーが十分ではないため、推奨されません
  • Dockerネットワーク: 1.9以降を推奨
  • Docker リンク: 1.9 より前のバージョンに適用されます。

1. Docker内部ネットワーク

Docker 独自のネットワーク スタックが関係します。

Docker をインストールすると、システムはコンテナとホストを接続するために使用される docker0 という新しいネットワーク インターフェイスを作成します。IP 範囲は 172.16 ~ 172.30 です。

各 Docker コンテナには、このインターフェース上の IP アドレスが割り当てられます。

Docker がコンテナを作成するたびに、相互接続されたネットワーク インターフェースのセットが作成されます。一方の端はコンテナ内の eth0 インターフェースで、もう一方の端はホスト上で veth で始まる名前が付けられます。

各 veth インターフェースを docker0 ブリッジにバインドすることにより、Docker はホストとすべての Docker コンテナによって共有される仮想サブネットを作成します。

コンテナとホスト間の通信接続を実現します。veth インターフェースはコンテナが実行中のときのみ存在することに注意してください。

内部ネットワークを使用して相互接続を実現する場合の欠点:

  • コンテナのアプリケーションに別のコンテナの IP アドレスをハードコードする。
  • コンテナを再起動すると、IP アドレスが変更される場合があります。
  • 十分に便利で柔軟性がありません。

2. Dockerネットワーク

コンテナ間の接続はネットワークを使用して作成されます。

コンテナが相互に通信するための独自のネットワークをユーザーが作成できるようにします。

異なるホスト間で通信でき、ネットワーク構成がより柔軟になります。

接続を更新せずにコンテナを停止、起動、または再起動できます。

事前にコンテナを作成して接続する必要はなく、コンテナの実行順序を気にする必要もありません。ネットワーク内でコンテナの名前解決と検出が可能です。

docker compose および swarm と統合されています。

docker ネットワーク内で起動されたコンテナは、このネットワーク内で実行されているすべてのコンテナを認識します。

これらのコンテナのアドレスを/etc/hostsファイルを通じてローカルDNSに保存します。
ネットワーク内の任意のホストは、ホスト名またはホスト名.netname の形式を使用して解決およびアクセスできます。

コンテナが再起動されると、その IP アドレスは /etc/hosts ファイル内で自動的に更新されます。

テスト中に、/etc/hosts ファイルには他のコンテナの新しいアドレスがないように見えましたが、相互に ping を実行できることが分かりました。

コンテナは複数のネットワークに同時に参加できるため、非常に複雑なネットワーク モデルを作成できます。

  • docker network createはネットワークを作成します
  • docker network inspect ネットワークの詳細を表示する
  • docker network lsは現在のシステム内のすべてのネットワークを一覧表示します
  • docker network connectは既存のコンテナをネットワークに接続します
  • docker network disconnect はコンテナをネットワークから切断します
  • docker network rmは1つ以上のネットワークを削除します
  • Dockerネットワークプルーンは未使用のネットワークをすべて削除します

3. Dockerリンク

コンテナの名前はリンク プロセス中に参照する必要があり、同じホスト マシン上でのみ機能します。

docker run でコンテナを起動するときに、--link パラメータを使用して 2 つのコンテナ間にクライアント サーバー リンクを作成します。

2 つのパラメータが必要です。1 つはリンク コンテナーの名前、もう 1 つはリンクのエイリアス (--link redis:db) です。

リンクされたコンテナーはサービスであり、リンクによりサービス コンテナーはクライアント コンテナーと通信できるようになります。

クライアント コンテナーはサービス コンテナーの任意のパブリック ポートに直接アクセスできるため、サービス コンテナーのポートをローカル ホストに公開する必要がなく、比較的安全です。

複数のクライアント コンテナーを同じサービス コンテナーにリンクすることも、--link を複数回指定して複数のサービス コンテナーにリンクすることもできます。

Docker は、コンテナの /etc/hosts ファイルと、リンク情報を含む環境変数にリンク情報を書き込みます。

どのようなアプローチを採用しても、次のコンポーネントを含む Web アプリケーション スタックを作成できます。

  • ウェブサーバーコンテナ
  • Redis データベース コンテナ
  • 2つのコンテナ間の安全なリンク

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

以下もご興味があるかもしれません:
  • Docker コンテナに接続するための Docker SSH サンプル コード
  • Docker接続Spring BootとMySQLコンテナ方式の紹介
  • docker の詳細な説明: ホストが docker コンテナに ssh 接続できるようにする
  • Docker はリンクを使用してコンテナ間の接続を確立する方法を教えてください。
  • Docker マルチコンテナ接続 (Tomcat+MySQL を例に)
  • Docker経由でMysqlコンテナ+Tomcatコンテナ接続環境を構築する詳細説明
  • DockerでMySQLコンテナを作成し、コマンドラインからコンテナに接続する方法の詳細な説明
  • Dockerはコンテナ間の接続を確立するためにLinkを使用する
  • Dockerコンテナ接続実装手順の分析

<<:  MySQLデータベースバックアップのさまざまな実装方法の概要

>>:  Vue+Openlayer で select を使用して要素を選択する実装コード

推薦する

CSS で画像アダプティブ コンテナを実装するいくつかの方法 (要約)

多くの場合、画像をコンテナのサイズに合わせて調整する必要があります。 1. imgタグ方式幅と高さを...

SQL GROUP BYの詳細な説明と簡単な例

GROUP BY ステートメントは、Aggregate 関数と組み合わせて使用​​され、1 つ以上の...

CSSインジェクションの知識の要約

最近のブラウザでは、CSS 内で JavaScript を実行することはできなくなりました。以前は、...

Vue.js ドラッグ可能なテキストボックスコンポーネントの使用方法の詳細な説明

目次コンポーネントの登録コンポーネントの追加ソースコードドラッグ可能なテキスト ボックスでは、ユーザ...

均一なアニメーション効果を実現するJavaScript

この記事の例では、JavaScriptで等速アニメーションを実装するための具体的なコードを参考までに...

Linux で MySQL 8.0 サービスを完全に削除する方法

この記事を読む前に、Linuxコマンド、特にcentos7.3環境でyumを使用してインストールされ...

MySQL の null 可能フィールドは NULL に設定する必要がありますか、それとも NOT NULL に設定する必要がありますか?

MySQL を頻繁に使用する人は、次のような状況に遭遇する可能性があります。 1. フィールド タ...

鏡像効果を実現する JavaScript キャンバス

この記事では、JavaScriptキャンバスでミラーイメージ効果を実現するための具体的なコードを参考...

MySQL 8.0.18 のインストールと設定のグラフィックチュートリアル

学習目標: Windowsシステムを使用してMySQLデータベースをインストールする方法を学びます。...

Vue のフィルターウィジェットの詳細な使用方法

この記事では、参考までにVue More Filter Itemウィジェットの実装方法を例として紹介...

カルーセル効果を実現するためのネイティブJavaScript+CSS

この記事では、参考までに、カルーセル効果の具体的なコードをJavaScript+CSSを使用して実装...

LeetCode の SQL 実装 (183. 注文をしたことがない顧客)

[LeetCode] 183.注文しない顧客Web サイトに、Customers テーブルと Or...

Docker - コンテナマウントディレクトリを変更する3つの方法のまとめ

方法 1: 設定ファイルを変更する (docker サービスを停止する必要があります) 1. doc...

Win7x64でのMySQL 5.7.18解凍版のインストール方法

関連記事: Win7 x64 に解凍版の mysql 5.7.18 winx64 をインストールする...

MySQL クエリ フィールド タイプが json の場合の 2 つのクエリ メソッド

テーブル構造は次のとおりです。 id varchar(32) 情報JSONデータ: id = 1 i...