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

推薦する

Win7 x64 に解凍版の mysql 5.7.18 winx64 をインストールするとサービスが起動できない問題を解決します

今日、mysql の公式サイトから mysql-5.7.18-winx64.zip をダウンロードし...

Alibaba Cloud Nginx はドメイン名アクセス プロジェクトを実装するために https を設定します (グラフィック チュートリアル)

ステップ1: サードパーティの信頼できるSSL証明書に署名するAlibaba Cloud で直接、無...

Vueモバイル端末に最適な適応ソリューションについての簡単な説明

序文: 最近の医療モバイル プロジェクトに基づいて、Vue はさまざまな画面のさまざまな画面サイズに...

HTMLの空リンクの役割についての簡単な説明

空のリンク:つまり、ターゲット エンドポイントとのリンクはありません。フォーマット <a hr...

nginx と Tencent Cloud の無料証明書を使用して https を作成する方法

httpsを取得する方法を勉強しています。最近、Tencent Cloud が提供する無料の SSL...

入力タイプ=ファイルスタイルを定義する方法

ファイルコントロールを美しくする理由は何ですか?他の子供たちはみんなきちんとしたきれいな服を着ている...

スクリプトを使用して、ワンクリックでDockerイメージをパッケージ化してアップロードします。

著者は1年以上マイクロフロントエンドプロジェクトに取り組んできました。チームは10個のマイクロアプリ...

単一の MySQL テーブル内の行数が 500 万を超えてはいけないのはなぜですか?

今日は、興味深いトピックについてお話ししましょう。データベースとテーブルを分割することを検討する前に...

mysql8.0.19 winx64バージョンのインストール問題を解決する

MySQL は、スウェーデンの会社 MySQL AB によって開発されたオープンソースの小規模なリレ...

MySQLトリガーの詳細な説明と簡単な例

MySQLトリガーの簡単な例文法CREATE TRIGGER <トリガー名> -- トリ...

MySQL共通インデックスとユニークインデックスの詳細な説明

シナリオ1. ID番号のフィールドを備えた市民システムを維持する2. ビジネス コードでは、重複する...

Windows 10 の仮想マシンに Mac システムをインストールするグラフィック チュートリアル

1. 仮想マシンバージョン15.5.1をダウンロードする公式サイトから直接最新バージョンをダウンロー...

マージントップ崩壊現象とその具体的解決策

マージントップの崩壊とはmargin-top の崩壊は、CSS ボックス モデルで発生する現象です。...

ソフトウェア 404 と 404 エラーとは何か、またそれらの違いは何ですか

まず、404 とソフト 404 とは何でしょうか? 404: 簡単に言えば、ユーザーが存在しないペー...