フッターコンテンツにスキップ
IRONSECUREDOCを使用する

Docker Composeネットワーク(開発者向けの仕組み)

Dockerとは何ですか?

Dockerは、軽量で移植可能なコンテナ内でのアプリケーションのデプロイとスケーリングを自動化するためのコンテナベースの概念を使用するオープンソースプラットフォームです。 簡単に言うと、Dockerコンテナはすべてのアプリケーションコードとその依存関係を1つのユニットにまとめ、開発者のラップトップからテストサーバーや本番クラウドサーバーまで一貫性を保ちます。

Docker Compose Network (How it Works for Developers): 図1

コンテナは、ホストシステムのオペレーティングシステムカーネルを共有するため、従来の仮想マシン(VM)とは異なります。 したがって、コンテナは非常に効率的で起動が速いです。 実際、Dockerコンテナは開発サイクルのすべての段階で一貫した動作を保証します。

実際、Dockerイメージはアプリケーション環境を持つコンテナの記述テンプレートです。 このセットには、コンテナのライフサイクルを管理するためのツールキットも含まれます。 一例として、Docker Composeがあります。これは、複数のコンテナで構成されるアプリケーションをオーケストレーションするために使用できます。 次に、イメージを共有するためのレジストリであるDocker Hubがあります。

Docker Composeネットワークとは何ですか?

Docker Composeネットワークにより、Docker Composeアプリケーション内で実行されているサービスが、同じカプセル化された環境内で互いに通信できるようになります。 docker-compose.ymlファイルに複数のサービスを定義すると、Docker Composeは自動的にデフォルトのネットワークを作成し、それらのサービスがホスト名としてサービス名を使用してお互いに通信できるようにします。 本質的に、それにより、ユーザーは独自のネットワークと、作成されたネットワークを持つ複数のサービスを定義できます。

デフォルトブリッジネットワーク: docker-compose upを実行するときにコンテナにネットワークを定義しない場合、Dockerは自動的にブリッジネットワークを作成します。 このデフォルトドライバーネットワーク上では、すべてのコンテナがそれぞれのサービス名をホスト名として使用して通信できます。

カスタムネットワーク: これらのオプションにより、ユーザーは1つまたは2つのカスタムネットワーク、さらにはユーザー定義ネットワークを定義できます。 コンテナポートとdocker-compose.ymlファイル内でカスタムネットワークを定義できます。これらのネットワークにサービスを割り当てることによって、コンテナがどのように通信するかを制御します。

  • 内部ネットワークは他のサービスからサービスを隔離します。
  • 複数のネットワークは、一部のサービスが互いに通信できる一方で、他のサービスにそのようなアクセスを拒否します。

サービスディスカバリー: すべてのサービスには、構成上その名前と等しいホスト名が与えられます。 つまり、1つのコンテナ内で他のサービスの名前を使用して別のサービスを参照することができます。たとえば、ウェブサービスでは、データベースコンテナのIPを参照するにはdbを使用します。

ネットワークモード: ホストドライバー、ブリッジ、noneのいずれかを使用するためにネットワークモードを設定することもできます。 最も一般的に使用されるのはブリッジで、これはコンテナトラフィックを分離します。

Dockerネットワークドライバーとは何ですか?

Dockerネットワークドライバーは、コンテナが互いにおよび他のコンテナやシステムとどのように接続し、通信するかを説明します。 さまざまなユースケースがあり、各ケースに対して異なるレベルの分離、接続性、パフォーマンスを提供するネットワークドライバーが適用されます。 各ネットワークドライバーを確認し、その使い方を説明します。

Dockerネットワークドライバの種類

ブリッジ(デフォルト)

内部Dockerネットワークは、単一のホストに基づいてコンテナを互いに通信させることができます。ネットワークを指定せずにコンテナを起動すると、Dockerはデフォルトのブリッジネットワークを使用します。

# Create a custom bridge network
docker network create --driver bridge my_bridge_network

# Run containers and connect to the custom network
docker run -d --name container1 --network my_bridge_network busybox sleep 3600
docker run -d --name container2 --network my_bridge_network busybox sleep 3600
# Create a custom bridge network
docker network create --driver bridge my_bridge_network

# Run containers and connect to the custom network
docker run -d --name container1 --network my_bridge_network busybox sleep 3600
docker run -d --name container2 --network my_bridge_network busybox sleep 3600
SHELL

ここでは、サービス名を使用して通信できます。例としては、ping container1およびcontainer2などがあります。

Host

ホストドライバーを使用すると、コンテナはホストネットワークスタックを直接共有するため、コンテナには独自のカスタムネットワーク隔離がありません。

# Run a container using the host network
docker run -d --network host nginx
# Run a container using the host network
docker run -d --network host nginx
SHELL

NGINXコンテナはホストのIPおよびネットワークインターフェースを共有し、ネットワーク隔離をバイパスします。

Overlay

これは、複数のホスト間でコンテナを相互接続し、主にDocker SwarmやKubernetes環境で使用され、物理的または仮想マシンをコンテナを介してセキュアに通信する仮想ネットワークを介して接続します。

# Create an overlay network for use in a Docker Swarm cluster
docker network create -d overlay my_overlay_network

# Deploy a service in the Swarm cluster
docker service create --name web --network my_overlay_network nginx
# Create an overlay network for use in a Docker Swarm cluster
docker network create -d overlay my_overlay_network

# Deploy a service in the Swarm cluster
docker service create --name web --network my_overlay_network nginx
SHELL

これにより、複数のDockerホストにまたがるSwarmクラスター内でサービスが作成されます。

None

noneドライバーは、コンテナのネットワーク機能を無効にします。 このコンテナはあらゆる種類の外部ネットワーク通信から隔離されます。

# Run a container with no network
docker run -d --network none busybox sleep 3600
# Run a container with no network
docker run -d --network none busybox sleep 3600
SHELL

busyboxコンテナはインターネットにアクセスできず、他のコンテナや外界に対する呼び出しを送信できません。

Macvlan

Macvlanドライバーは、コンテナが自身のMACアドレスを持つ物理デバイスとしてネットワークで表示されるようにし、物理ネットワークに直接アクセスできるようにします。

# Create a Macvlan network
docker network create -d macvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 \
  -o parent=eth0 macvlan_network

# Run a container on the Macvlan network
docker run -d --network macvlan_network busybox sleep 3600
# Create a Macvlan network
docker network create -d macvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 \
  -o parent=eth0 macvlan_network

# Run a container on the Macvlan network
docker run -d --network macvlan_network busybox sleep 3600
SHELL

IPvlan

IPvlanドライバーはMacvlanに似ていますが、Layer 2(MACアドレス)に依存するのではなくIPアドレスを割り当てることに重点を置いています。 複数のコンテナが同じネットワークインターフェースを共有できるようにします。

# Create an IPvlan network
docker network create -d ipvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 ipvlan_network

# Run a container on the IPvlan network
docker run -d --network ipvlan_network busybox sleep 3600
# Create an IPvlan network
docker network create -d ipvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 ipvlan_network

# Run a container on the IPvlan network
docker run -d --network ipvlan_network busybox sleep 3600
SHELL

ホストのLayer 2 Ethernetインターフェイスをネットワークと共有しますが、異なるIPアドレスを持ちます。

カスタムプラグイン

Dockerのカスタムプラグインは、Dockerがデフォルトとして提供する以上のネットワーク機能を提供するサードパーティまたはユーザーが開発したネットワークドライバーです。 サードパーティのDockerプラグインは、Software-Defined Networking(SDN)のような外部ネットワーキングソリューションフレームワークと統合し、セキュリティ、スケーラビリティ、およびマルチホストネットワーキングなどの機能を向上させます。 Dockerは、開発者およびベンダーにネットワークプラグインのための多用途なアーキテクチャを提供し、ネイティブドライバーと同じ方法でプラグインのインストールと使用を可能にします。

IronSecureDoc

IronSecureDoc for Dockerは、開発者がコンテナ化アプリケーションにセキュアなドキュメント処理機能を追加するのを容易にします。 Dockerを使用すると、IronSecureDocを統合したASP.NET Coreアプリケーションを一貫した環境でカプセル化し、デプロイとスケーリングを容易にします。 それを稼働させるには、IronSecureDocライブラリを使用してASP.NET Coreアプリケーションを構築するDockerfileを作成し、動作させるために必要な他のインストールスクリプトや設定を追加することもできます。

Docker Compose Network (How it Works for Developers): 図2 - IronSecureDoc

これには、サービスの依存関係、環境変数、およびマッピングされたポートを含むdocker-compose.ymlファイルも含まれており、これへのアクセスを提供します。 したがって、文書のセキュリティに関わるタスクがより管理しやすくなり、ウェブアプリケーションが開発または本番で使用されるものを超えて効率的かつ効果的に動作するようになります。 Dockerの場合と同様にIronSecureDocをインストールおよび構成して、文書の暗号化、編集などが提供するすべての機能を享受する必要があります。

IronSecureDocのインストールと実行

リポジトリからIronSecureDoc Dockerイメージを取得するために、コマンドプロンプトまたは開いている端末ウィンドウで次のコマンドを実行してください。

# Pull IronSecureDoc Docker image
docker pull ironsoftwareofficial/ironsecuredoc
# Pull IronSecureDoc Docker image
docker pull ironsoftwareofficial/ironsecuredoc
SHELL

Docker Compose Network (How it Works for Developers): 図3

Dockerリポジトリからイメージをプルした後、別のコマンドを使用して、実行中のコンテナとしてIronSecureDocを起動できます。

# Run a container with network isolation and environment variables
docker container run --rm -p 8080:8080 \
  -e IronSecureDoc_LicenseKey=<IRONSECUREDOC_LICENSE_KEY> \
  -e ENVIRONMENT=Development \
  -e HTTP_PORTS=8080 \
  ironsoftwareofficial/ironsecuredoc:latest
# Run a container with network isolation and environment variables
docker container run --rm -p 8080:8080 \
  -e IronSecureDoc_LicenseKey=<IRONSECUREDOC_LICENSE_KEY> \
  -e ENVIRONMENT=Development \
  -e HTTP_PORTS=8080 \
  ironsoftwareofficial/ironsecuredoc:latest
SHELL

上記のDocker runコマンドは、IronSecureDocのコンテナインスタンスを起動します。 ネットワーク分離にはブリッジネットワークが想定されています。 また、このフラグ-p 8080:8080を使用してhttp://localhost:8080を通してコンテナ内で公開されたサービスへの外部アクセスを可能にします。 これは、コンテナのネットワークのポート8080で実行される内部サービスをホストのネットワークのポート8080に公開します。

デフォルトでは、コンテナはDockerのブリッジネットワーク上で実行されるため、他のコンテナや外界から分離していますが、ポートマッピングを通じて公開することで、ここではそれを行っています。 渡される環境変数(IronSecureDoc_LicenseKeyENVIRONMENTHTTP_PORTS)は、コンテナ内のアプリケーションの動作を設定します。 --rmフラグは、コンテナが停止したときに削除されるようにします。

このセットアップには、ブリッジネットワークがコンテナを分離し、内部的にサービスを接続する利点があり、一方でポートマッピングがホストマシンからコンテナのサービスへの外部トラフィックをブリッジアウトし、それによりアクセスを容易にします。

Docker Compose Network (How it Works for Developers): 図4

Dockerネットワークポートを使用したIronSecureDocの使用

IronSecureDocのREST APIは、Dockerでインストールおよび起動すると、文書の編集、認証、暗号化を可能にします。 より詳細な手順は、こちらで確認してください。

例えば、文書を暗号化のために提出するには、IronSecureDoc APIにPOSTリクエストを行うことができます。

# POST a document for encryption using cURL
curl -X 'POST' \
  'http://localhost:8080/v1/document-services/pdfs/encrypt?user_password=demo' \
  -H 'accept: */*' \
  -H 'Content-Type: multipart/form-data' \
  -F 'pdf_file=@test.pdf;type=application/pdf'
# POST a document for encryption using cURL
curl -X 'POST' \
  'http://localhost:8080/v1/document-services/pdfs/encrypt?user_password=demo' \
  -H 'accept: */*' \
  -H 'Content-Type: multipart/form-data' \
  -F 'pdf_file=@test.pdf;type=application/pdf'
SHELL

このコマンドは、その文書をIronSecureDocに自動的に送り、適切に暗号化されます。

結論

Dockerネットワーキングは、アプリケーションの相互作用と他のアプリケーションおよび世界の他の部分との通信の制御に重要で、さまざまなアプリケーションニーズに対して異なるドライバーと設定を提供します。 デフォルトのブリッジネットワーク設定は基本的な分離を提供し、サービスをポートマッピングを通じてホストシステムに公開できるようにし、IronSecureDocアプリケーションで例示されるようにしています。 コンテナ化アプリケーションの管理と設定を容易にし、アプリケーションの運用の柔軟性と拡張性を向上させます。

IronSecureDocは、高度なドキュメント処理ツールであり、コンテナ化に関するDockerの能力を生かし、迅速かつ信頼性の高いアプリケーションのデプロイを可能にします。 これにより、複数の環境に対するサポートが確保され、Docker ネットワーキングと IronSecureDocがシームレスに統合し、アプリケーションの統合が容易でアクセスしやすく管理可能になります。

その結果、ワークフローが効率化され、効率が向上し、特に文書を処理する際の操作が改善されます。 これにより、最終的には開発およびデプロイ体験が強化され、現代のソフトウェアアプリケーションにとって貴重なソリューションとなります。 IronSecureDocライセンスに関する詳細情報については、こちらのページを参照してください。 Iron Softwareの多くの製品提供について詳しく知りたい場合は、このリンクをご覧ください。

よくある質問

Docker Compose ネットワークはどのようにサービスの通信を促進するか?

Docker Compose ネットワークは Docker Compose アプリケーション内のサービスがホスト名としてサービス名を使用して通信できるようにし、同じ閉じ込められた環境内での相互作用を可能にする。

Docker Compose におけるデフォルトブリッジネットワークの役割は何か?

Docker によって自動的に作成されるデフォルトのブリッジネットワークは、特定のネットワークが定義されていない場合でも、コンテナがサービス名をホスト名として使用して互いに通信することを可能にする。

カスタムネットワークは Docker Compose アプリケーションをどのように強化できるか?

Docker Compose のカスタムネットワークは、隔離や選択的なサービス間の通信を可能にし、docker-compose.yml ファイル内で定義されることでアプリケーションを強化する。

Docker ネットワークドライバーにはどのような種類があり、それらの用途は何か?

ブリッジ、ホスト、オーバーレイ、なし、Macvlan、Ipvlan などの Docker ネットワークドライバーは、隔離、接続性、パフォーマンスの異なるレベルを提供し、さまざまなアプリケーションのニーズに適している。

オーバーレイネットワークドライバーはどのようにマルチホスト通信をサポートするか?

オーバーレイネットワークドライバーは、複数のホストにわたってコンテナを接続し、仮想ネットワークを通じてセキュアな通信を提供し、主に Docker Swarm や Kubernetes 環境で使用される。

コンテナ環境でのセキュアなドキュメント処理はなぜ重要か?

IronSecureDoc を使用したようなセキュアなドキュメント処理は、Docker のネットワーキング機能を活用して、効率的なアプリケーションのカプセル化、デプロイ、スケーリングを可能にするため、コンテナ環境で重要である。

Docker を使用してセキュアなドキュメント処理をどのようにセットアップできるか?

コンテナ内の IronSecureDoc などのツールをデプロイし、Dockerfile や docker-compose.yml を通じてネットワーク隔離のための環境を設定することにより、Docker でセキュアなドキュメント処理をセットアップできる。

Docker 内で REST API を使用してドキュメントを暗号化するためにはどのような手順が必要か?

コンテナ化されたセットアップを使用して、cURL などのツールを使用し、ドキュメントとパラメーターをセキュアなドキュメント処理 API に POST リクエストを送信することにより、Docker 内で REST API を介してドキュメントを暗号化する。

Docker のネットワーキング機能はアプリケーションのスケーラビリティをどのように向上させるか?

Docker のネットワーキング機能は、サービス間の相互作用と通信の効率的な管理を可能にし、ワークフローやデプロイ体験を合理化することでアプリケーションのスケーラビリティを向上させる。

既存の Docker システムに IronSecureDoc を統合するプロセスは何か?

Docker コマンドを使用してセットアップを行い、ポートマッピングや環境変数を利用して一貫したデプロイとスケーリングを確保することにより、既存の Docker システムに IronSecureDoc を統合する。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。