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

推薦する

Vueは虫眼鏡付きの検索ボックスを実装します

この記事では、Vueを使用して虫眼鏡付きの検索ボックスを実装する方法を紹介します。具体的な内容は次の...

ubuntu16.04 で nginx を完全にアンインストールするための関連コマンド

nginx の概要nginx は、無料のオープンソースの高性能 HTTP サーバーおよびリバース プ...

ページに間隔を空けてグリッドレイアウトを完璧に実装する方法

典型的なレイアウト例上の写真のように、正方形の真ん中に一定の隙間があり、その隙間は固定されています。...

Nginx ドメイン転送の使用シナリオ コード例

シナリオ 1: サーバーの制限により、外部に開かれているポートは 1 つだけですが、別の外部ネットワ...

Vueは、商品の数を制御するためのコンポーネントのパッケージ化と使用を実装します。

Vueのコントロール商品数量コンポーネントのカプセル化と使用は参考までに。具体的な内容は以下のとお...

メニューノードのすべての子ノードを再帰的に検索する MySQL メソッド

背景プロジェクトにはメニューノードのすべてのノードをチェックする要件があります。オンラインでチェック...

JavaScript シミュレーション計算機

この記事では、JavaScriptシミュレーション計算機の具体的なコードを参考までに紹介します。具体...

HTML5+CSS3 ヘッダー作成例と更新

前回、私たちは 2 つのヘッダー レイアウト (フレックスボックス 1 つとフロート 1 つ) を考...

UbuntuへのDocker CEのインストール

この記事は、Ubuntu 17.10 での Docker CE のインストールを記録するために使用さ...

CSS3でハートを描く

成果を達成する要件/機能: CSS + HTML を使用してハートを描く方法。分析:正方形と 2 つ...

子要素の margin-top によって親要素が移動する問題の解決方法

問題の説明今日、ページ スタイルを変更していたときに、子要素にmargin-top設定したのに、子要...

CSSを使用して、頻繁に表示される奇妙なボタンを簡単に実装します。

背景グループでは、CSS を使用してインセット コーナー ボタンを実装する方法や、矢印付きのボタンを...

ウェブデザイナー職の面接でよくある質問と回答

1. ASP.NET Web アプリケーションのテンプレートとは何ですか? それらの違いは何ですか?...

React 星評価コンポーネントの実装

要件は、製品の評価データを渡すことであり、ページには対応する星の数が表示されます。 1. 異なる評価...

MySQL で 2 つのテーブルをクエリする場合の from と join の違いの概要

序文MySQL では、複数テーブル結合クエリは非常に一般的な要件です。複数テーブルクエリを使用する場...