はじめに
Docker はアプリケーションをコンテナ化するための広く採用されている技術となっていますが、Docker コンテナのネットワーキングの側面を管理することは重要でありながら複雑なタスクとなることがあります。このチュートリアルでは、Docker コンテナのネットワーキングを構成するプロセスを案内します。Docker ネットワークの基本、ネットワークドライバーのセットアップ、およびコンテナとホストの接続について説明します。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
Docker はアプリケーションをコンテナ化するための広く採用されている技術となっていますが、Docker コンテナのネットワーキングの側面を管理することは重要でありながら複雑なタスクとなることがあります。このチュートリアルでは、Docker コンテナのネットワーキングを構成するプロセスを案内します。Docker ネットワークの基本、ネットワークドライバーのセットアップ、およびコンテナとホストの接続について説明します。
Docker は、コンテナのネットワーキングを構成できるいくつかのタイプのネットワークドライバーを提供しています。デフォルトのネットワークドライバーは bridge
ドライバーで、これはホストマシン上に仮想ブリッジを作成し、各コンテナをそれに接続します。これにより、コンテナ同士およびホストマシンと通信することができます。
bridge
ドライバーに加えて、Docker は host
、overlay
、macvlan
、none
などの他のネットワークドライバーもサポートしています。各ドライバーには独自のユースケースと特性があり、次のセクションで詳しく見ていきます。
各ネットワークドライバーには独自の利点とユースケースがあります。たとえば、host
ドライバーはパフォーマンスに敏感なアプリケーションに役立ち、overlay
ドライバーは複数のホストにまたがる分散アプリケーションを構築するために不可欠です。
異なるネットワークドライバーとそのユースケースを理解することは、Docker 環境でのネットワーキングを構成するために重要です。
bridge
ネットワークは Docker のデフォルトのネットワークドライバーです。新しいブリッジネットワークを作成するには、次のコマンドを使用できます。
docker network create my-bridge-network
次に、--network
フラグを使用してコンテナを新しいブリッジネットワークに接続できます。
docker run -d --name my-container --network my-bridge-network nginx
同じブリッジネットワーク上のコンテナは、コンテナ名またはコンテナの IP アドレスを使用して相互に通信できます。
host
ネットワークドライバーを使用するには、--network host
フラグを指定してコンテナを起動できます。
docker run -d --name my-host-container --network host nginx
host
ネットワークを使用する場合、コンテナはホストのネットワークスタックを共有し、ホストのネットワークインターフェイスとポートに直接アクセスできるようになります。
オーバーレイネットワークを作成するには、まず Docker Swarm クラスターを初期化する必要があります。Swarm がセットアップされたら、次のコマンドでオーバーレイネットワークを作成できます。
docker network create --driver overlay my-overlay-network
その後、ブリッジネットワークと同じように、--network
フラグを使用してコンテナをオーバーレイネットワークに接続できます。
docker run -d --name my-overlay-container --network my-overlay-network nginx
オーバーレイネットワークは、複数の Docker ホスト間のコンテナ間通信を可能にします。
macvlan
ネットワークドライバーを使用するには、ホスト上の親インターフェイスを指定する必要があります。次のコマンドで新しい macvlan
ネットワークを作成できます。
docker network create -d macvlan --subnet=172.16.86.0/24 --gateway=172.16.86.1 -o parent=eth0 my-macvlan-network
その後、--network
フラグを使用してコンテナを macvlan
ネットワークに接続できます。
docker run -d --name my-macvlan-container --network my-macvlan-network nginx
Macvlan ネットワークでは、コンテナに独自の MAC アドレスを持たせることができ、ネットワーク上の物理デバイスのように見せることができます。
これらの異なるネットワークドライバーの構成方法を理解することで、Docker ベースのアプリケーションに最適なソリューションを選択できます。
コンテナ内で実行されているサービスに外部からアクセスできるようにするには、コンテナのポートを公開する必要があります。コンテナを起動する際に -p
または --publish
フラグを使用してこれを行うことができます。
docker run -d -p 80:80 --name my-web-server nginx
上記の例では、ホストマシンのポート 80 がコンテナ内のポート 80 にマッピングされています。これにより、クライアントはコンテナ内で実行されている Nginx Web サーバーにアクセスできます。
--link
フラグを使用してコンテナ同士を接続することもできます。これにより、あるコンテナが別のコンテナの環境変数やネットワーク情報にアクセスできるようになります。
docker run -d --name my-db-server mysql
docker run -d --name my-app-server --link my-db-server:db nginx
この例では、my-app-server
コンテナはエイリアス db
を使用して my-db-server
コンテナにアクセスできます。
Docker Compose は、マルチコンテナアプリケーションの定義と実行のプロセスを簡素化するツールです。Compose を使用して、YAML ファイルでネットワーク構成とコンテナ間の関係を定義することができます。
以下は docker-compose.yml
ファイルの例です。
version: "3"
services:
web:
image: nginx
ports:
- "80:80"
networks:
- my-network
db:
image: mysql
networks:
- my-network
networks:
my-network:
driver: bridge
この例では、web
サービスと db
サービスが my-network
ブリッジネットワークに接続されており、互いに通信できるようになっています。
コンテナのポートを公開する方法、コンテナをリンクする方法、および Docker Compose を使用する方法を理解することで、コンテナとホストを効果的に接続して、複雑な分散アプリケーションを構築することができます。
このチュートリアルが終わる頃には、Docker ネットワーキングについて包括的な理解を持ち、コンテナのネットワーク設定を効果的に構成できるようになります。異なるネットワークドライバーを活用する方法、コンテナをホストに接続する方法、および Docker ベースのアプリケーションの全体的なネットワーキングパフォーマンスを最適化する方法を学ぶことができます。