Dockerネットワーキング–コンテナが相互に通信する方法を探る



コンテナネットワークモデルを理解し、ハンズオンで実装することで、Dockerネットワーク機能のすべてを学びます。

今日の世界では、企業はコンテナ化に熱心になっており、コンテナアーキテクチャを適切に構成するには、強力なネットワーキングスキルが必要です。したがって、これによりDockerネットワーキングの概念が導入されます。

Docker Networkingに関するこのブログでは、次のトピックについて説明します。





Dockerとは何ですか?

Dockerを理解するには、以前にアプリケーションがどのようにデプロイされたかの履歴と、現在コンテナーを使用してアプリケーションがどのようにデプロイされているかを知る必要があります。

古い方法と新しい方法でのアプリケーションのデプロイ-Dockerネットワーキング-Edureka



上の図でわかるように、古い方法ではホスト上にアプリケーションがありました。したがって、n個のアプリケーションがそのオペレーティングシステムに存在するライブラリを共有します。ただし、コンテナ化により、オペレーティングシステムにはカーネルが含まれるようになります。カーネルは、すべてのアプリケーションに共通する唯一のものです。そのため、アプリケーションは互いのライブラリにアクセスできません。

そう、 Docker 簡単に言うと、アプリケーションを開発、出荷、実行するためのオープンプラットフォームであり、ユーザーは次の機能を使用してアプリケーションをインフラストラクチャから分離できます。 コンテナ ソフトウェアを迅速に提供します。

では、これらのコンテナはさまざまな状況でどのように相互に通信するのでしょうか。



そうですね、それはDockerNetworkingを介して行われます。

Dockerネットワーキング

Docker Networkingについて深く掘り下げる前に、Dockerのワークフローを紹介します。

上の図でわかるように。開発者は、アプリケーションの要件または依存関係を記述したコードを簡単に記述できるDockerファイルに記述し、このDockerファイルはDockerイメージを生成します。したがって、特定のアプリケーションに必要な依存関係はすべて、このイメージに存在します。

現在、DockerコンテナはDockerImageのランタイムインスタンスに他なりません。これらのイメージは、パブリック/プライベートリポジトリを含むDockerハブ(DockerイメージのGitリポジトリ)にアップロードされます。

そのため、公開リポジトリからイメージをプルしたり、独自のイメージをDockerHubにアップロードしたりできます。次に、Docker Hubから、品質保証チームや本番チームなどのさまざまなチームがそのイメージを取得し、独自のコンテナーを準備します。これらの個々のコンテナーは、ネットワークを介して相互に通信して必要なアクションを実行します。これは、Dockerネットワークに他なりません。

したがって、Docker Networkingは、さまざまな状況ですべての分離されたコンテナーが相互に通信して必要なアクションを実行するための通信通路として定義できます。

Docker Networkingの目標は何だと思いますか?

Dockerネットワーキングの目標

柔軟性 – Dockerは、さまざまなプラットフォーム上の任意の数のアプリケーションが相互に通信できるようにすることで、柔軟性を提供します。

クロスプラットフォーム – Dockerは、Docker Swarm Clustersを使用して、さまざまなサーバー間で機能するクロスプラットフォームで簡単に使用できます。

スケーラビリティ – Dockerは完全に分散されたネットワークであり、パフォーマンスを確保しながら、アプリケーションを個別に拡張および拡張できます。

分散型 – Dockerは分散型ネットワークを使用します。これにより、アプリケーションを分散させて高可用性を実現できます。コンテナまたはホストがリソースのプールから突然失われた場合は、追加のリソースを起動するか、まだ利用可能なサービスに渡すことができます。

使いやすい – Dockerを使用すると、サービスのデプロイを簡単に自動化できるため、日常生活で簡単に使用できます。

サポート – Dockerは、すぐに使用できるサポートを提供します。そのため、Docker Enterprise Editionを使用してすべての機能を非常に簡単かつ簡単に取得できるため、Dockerプラットフォームは非常に使いやすくなっています。

上記の目標を有効にするには、コンテナネットワークモデルと呼ばれるものが必要です。

さまざまなDevOpsステージを探索してみませんか?

コンテナネットワークモデル(CNM)

コンテナネットワークモデルとは正確に何であるかを説明する前に、CNMを理解する前に必要なLibnetworkについて簡単に説明します。

Libnetworkは、CNMを構成するすべての主要な概念を実装するオープンソースのDockerライブラリです。

そう、 コンテナネットワークモデル(CNM) 複数のネットワークドライバーを使用してコンテナーにネットワークを提供するために必要な手順を標準化します。 CNMでは、ネットワーク構成を格納するために、コンソールなどの分散型Key-Valueストアが必要です。

CNMには、IPAMプラグインとネットワークプラグインのインターフェイスがあります。

IPAMプラグインAPIは、アドレスプールの作成/削除、およびコンテナーIPアドレスの割り当て/割り当て解除に使用されますが、ネットワークプラグインAPIは、ネットワークの作成/削除、およびネットワークからのコンテナーの追加/削除に使用されます。

CNMは主に、ネットワークコントローラー、ドライバー、ネットワーク、エンドポイント、サンドボックスの5つのオブジェクトで構築されています。

コンテナネットワークモデルオブジェクト

ネットワークコントローラー: DockerEngineがネットワークを割り当てて管理するための単純なAPIを公開するLibnetworkへのエントリポイントを提供します。 Libnetworkは複数の組み込みおよびリモートドライバーをサポートしているため、ネットワークコントローラーを使用すると、ユーザーは特定のドライバーを特定のネットワークに接続できます。

運転者: ネットワークを所有し、さまざまなユースケースと展開シナリオを満たすために複数のドライバーを参加させることにより、ネットワークを管理する責任があります。

通信網: 同じネットワークに属し、他のエンドポイントから分離されたエンドポイントのグループ間の接続を提供します。そのため、ネットワークが作成または更新されるたびに、対応するドライバーにイベントが通知されます。

終点: ネットワーク内のコンテナーによって公開されるサービスと、ネットワーク内の他のコンテナーによって提供される他のサービスとの接続を提供します。エンドポイントはサービスを表し、必ずしも特定のコンテナーである必要はありません。エンドポイントには、クラスター内にもグローバルスコープがあります。

サンドボックス: ユーザーがネットワーク上にエンドポイントを作成するように要求したときに作成されます。サンドボックスには、IPアドレス、MACアドレス、ルート、DNSなどのコンテナのネットワーク構成を表すさまざまなネットワークに複数のエンドポイントを接続できます。

PowerBIのDaxとは

つまり、これらはCNMの5つの主要なオブジェクトでした。

それでは、Dockerネットワーキングに関係するさまざまなネットワークドライバーについて説明します。

DevOpsの学習を次のレベルに引き上げたいですか?

ネットワークドライバー

主に5つのネットワークドライバーがあります:ブリッジ、ホスト、なし、オーバーレイ、Macvlan

ブリッジ: ブリッジネットワークは、ホスト上のdockerによって作成されたプライベートのデフォルトの内部ネットワークです。したがって、すべてのコンテナは内部IPアドレスを取得し、これらのコンテナはこの内部IPを使用して相互にアクセスできます。ブリッジネットワークは通常、通信が必要なスタンドアロンコンテナでアプリケーションを実行するときに使用されます。

ホスト :このドライバーは、DockerホストとDockerコンテナー間のネットワーク分離を削除して、ホストのネットワークを直接使用します。したがって、これを使用すると、同じホスト上で複数のWebコンテナーを実行できなくなります。これは、ポートがホストネットワーク内のすべてのコンテナーに共通になっているためです。

無し :この種のネットワークでは、コンテナはどのネットワークにも接続されておらず、外部ネットワークや他のコンテナにアクセスできません。したがって、このネットワークは次の場合に使用されますコンテナのネットワークスタックを完全に無効にしたい場合、ループバックデバイスのみを作成します。

オーバーレイ :スウォームクラスターに参加しているすべてのノードにまたがる内部プライベートネットワークを作成します。そのため、オーバーレイネットワークは、スウォームサービスとスタンドアロンコンテナ間、または異なるDockerデーモン上の2つのスタンドアロンコンテナ間の通信を容易にします。

Macvlan: コンテナにMACアドレスを割り当てて、ネットワーク上の物理デバイスとして表示することができます。次に、DockerデーモンはMACアドレスによってコンテナーにトラフィックをルーティングします。 Macvlanドライバーは、Dockerホストのネットワークスタックを介してルーティングされるのではなく、物理ネットワークに直接接続されることが予想される場合に最適です。

了解しました。Dockerネットワークを理解するために必要な理論はこれですべてです。それでは、次に進んで、ネットワークがどのように作成され、コンテナが相互に通信するかを実際に示します。

ハンズオン

ですから、皆さんがDockerをシステムにインストールしていることを前提として、私は紹介するシナリオを持っています。

Webアプリケーションが必要なコース名とコースIDを保存するとします。基本的に、Webアプリケーション用に1つのコンテナーが必要であり、バックエンド用にMySQLとしてもう1つのコンテナーが必要です。そのMySQLコンテナーはWebアプリケーションコンテナーにリンクする必要があります。

上記の例を実際に実行してみませんか。

必要な手順:

  • Docker Swarmを初期化して、Swarmクラスターを形成します。
  • オーバーレイネットワークを作成する
  • WebアプリケーションとMySQLの両方のサービスを作成する
  • ネットワークを介してアプリケーションを接続します

始めましょう!

ステップ1: マシンでDockerSwarmを初期化します。

docker swarm init --advertise-addr 192.168.56.101

–advertise-addrフラグは、アドレスを192.168.56.101として公開するようにマネージャーノードを構成します。群れの他のノードは、IPアドレスでマネージャーにアクセスできる必要があります。

ステップ2: ここで、このマネージャーノードをワーカーノードに参加させる場合は、ワーカーノードでswarmを初期化するときに取得するリンクをコピーします。
ステップ3: オーバーレイネットワークを作成します。

docker network create -d overlay myoverlaynetwork

myoverlayはネットワーク名であり、-dを使用すると、Dockerデーモンをバックグラウンドで実行できます。

ステップ4.1: サービスwebapp1を作成し、作成したネットワークを使用して、このサービスをスウォームクラスターにデプロイします。

docker service create --name webapp1 -d --network myoverlaynetwork -p 8001:80 hshar / webapp

ここで-pポートフォワーディング用です。hsharはDockerHubのアカウント名であり、webappはDockerHubにすでに存在するWebアプリケーションの名前です。

ステップ4.2: 次に、サービスが作成されているかどうかを確認します。

Dockerサービスls

ステップ5.1: 次に、サービスMySQLを作成し、作成したネットワークを使用して、swarmクラスター上にサービスをデプロイします。

docker service create --name mysql -d --network myoverlaynetwork -p 3306:3306 hshar / mysql:5.5


ステップ5.2: 次に、サービスが作成されているかどうかを確認します。

Dockerサービスls

ステップ6.1: その後、マスターノードで実行されているコンテナーを確認し、hshar / webappコンテナーに移動します。

docker ps

ステップ6.2: したがって、webappサービスのみがマネージャーノード上にあることがわかります。だから、webappコンテナに入ります。

docker exec -it container_id bash nano var / www / html / index.php

docker psコマンドは、両方のコンテナをそれぞれのコンテナIDとともに一覧表示します。 2番目のコマンドは、そのコンテナをインタラクティブモードで有効にします。

ステップ7: ここで、$ servernameをlocalhostからmysqlに、$ passwordを「」から「edureka」に変更します。また、必要なデータベースの詳細をすべて変更し、キーボードショートカットCtrl + xを使用してindex.phpファイルを保存します。 yを押して保存し、Enterキーを押します。

ステップ8: 次に、別のノードで実行されているmysqlコンテナに移動します。

docker exec -it container_id bash

ステップ9: mysqlコンテナに入ったら、以下のコマンドを入力してMySQLでデータベースを使用します。

ステップ9.1: mysqlコンテナを使用するためのアクセス権を取得します。

mysql -u root -pedureka

ここで、-uはユーザーを表し、-pはマシンのパスワードです。

ステップ9.2: webapp1からデータを取得するために使用されるデータベースをmysqlに作成します。

CREATEDATABASEハンズオン

ステップ9.3: 作成したデータベースを使用します。

ハンズオンを使用する

ステップ9.4: このデータベースに、webapp1からデータを取得するために使用されるテーブルを作成します。

CREATE TABLEcourse_details(course_name VARCHAR(10)、course_id VARCHAR(11))

ステップ9.5: ここで、コマンドを使用してMySQLとコンテナも終了します 出口

ステップ10: ブラウザに移動し、アドレスを次のように入力します localhost:8001 / index.php 。これにより、Webアプリケーションが開きます。次に、コースの詳細を入力して、をクリックします クエリを送信

ステップ11: [クエリの送信]をクリックしたら、MySQLサービスが実行されているノードに移動し、コンテナー内に移動します。

docker exec -it container_id bash mysql -u root -pedurekaUSEハンズオンSHOWテーブルselect * fromcourse_details

これにより、詳細を入力したすべてのコースの出力が表示されます。

ここで、DockerNetworkingブログを終了します。この投稿を楽しんでいただけたでしょうか。確認してもいい 他のブログ Dockerの基本を扱ったシリーズでも。

このDockerContainerブログに関連性があると思われる場合は、 世界中に45万人以上の満足している学習者のネットワークを持つ信頼できるオンライン学習会社であるEdurekaによる。 Edureka DevOps認定トレーニングコースは、学習者がSDLCの複数のステップを自動化するためのPuppet、Jenkins、Docker、Nagios、Ansible、GITなどのさまざまなDevOpsプロセスとツールに関する専門知識を習得するのに役立ちます。

DevOpsの認定をお探しですか?

質問がありますか?コメント欄にご記入ください。折り返しご連絡いたします。