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 を使用して要素を選択する実装コード

推薦する

Centos7 に PHP と Nginx をインストールする詳細なチュートリアル

Centos のサーバー側への適用がますます普及するにつれて、Centos7 もますます使用されるよ...

MySQLからClickHouseに移行する5つの方法

データ移行は、MySQL から ClickHouse にインポートする必要があります。概要プランは以...

MySQL データベースの制約とデータ テーブルの設計原則

目次1. データベースの制約1.1 はじめに1.2 制約の種類1.3 ヌルでない1.4 ユニーク1....

HTML でのフォームとフォーム送信操作に関する情報のコレクション

ここでは、フォーム要素とフォーム送信に関する知識を紹介します。フォーム要素フォーム要素の DOM イ...

Vue+element ui はアンカーの配置を実現します

この記事では、アンカー配置を実現するためのVue +要素UIの具体的なコードを例として紹介します。具...

モバイルの赤い封筒の雨機能ページを実装するための JavaScript HTML

この記事の例では、モバイル紅包雨機能ページを実現するためのHTMLの具体的なコードを共有しています。...

Centos7でファイルをバックアップするときは、バックアップファイルにバックアップの日付を追加します

Linux は、システム内のデバイス、インターフェース、ファイル、スタートアップ、アプリケーション ...

MySQL 8.0 のデフォルトのデータディレクトリを変更する (設定なしの簡単な操作)

使用シナリオ: Alibaba Cloud を使用しており、データディスクを別途購入しました (大容...

MySQL のデータベース パフォーマンスに影響を与える要因の説明

データベースのパフォーマンスに関する話面接では、「データベースにどのくらい精通していますか?」など、...

blockquote タグの使用に関する注意

<br />セマンティクス化は一言で説明することはできないし、まだ公式かつ厳密な定義もあ...

MySQLクエリ条件の一般的な使用法の詳細な説明

この記事では、例を使用して、MySQL クエリ条件の一般的な使用方法を説明します。ご参考までに、詳細...

非常に詳細な Vue-Router のステップバイステップのチュートリアル

目次1. ルータビュー2. ルータリンク3. リダイレクト4. ルーティングエイリアス5. ルーティ...

Nginx プロセス管理とリロードの原則の詳細な説明

プロセス構造図Nginx はマルチプロセス構造です。マルチプロセス構造は、次のような Nginx の...

背景画像に CSS3 変換を適用するためのソリューション

CSS 変換は便利ですが、背景画像にはまだ適用されていません。この投稿では、背景画像を回転させたい場...

Vue イベントの $event パラメータ = イベント値の場合

テンプレート <el-table :data="データリスト"> &...