最終更新
リンドくん
たなべ先生、Dockerでコンテナを動かせるようになったんですけど、コンテナ同士をどうやって通信させればいいんですか?ネットワークの設定が複雑で...
たなべ
Dockerのネットワークは最初は難しく感じるかもしれないけど、基本的な3つのモードを理解すれば、実はとてもシンプルなんだよ。
今日はその仕組みを一緒に見ていこう。
HackATAは、エンジニアを目指す方のためのプログラミング学習コーチングサービスです。 経験豊富な現役エンジニアがあなたの学習をサポートします。
✓ 質問し放題
✓ β版公開中(2025年内の特別割引)
Dockerを使い始めた方の多くが、コンテナ間の通信やホストとの接続で戸惑うのではないでしょうか。
コンテナは独立した環境として動作するため、適切なネットワーク設定がなければ、他のコンテナやホストマシンと通信できません。
Dockerにはコンテナをネットワークに接続するための仕組みが用意されており、用途に応じて複数のネットワークモードが選択できます。主なネットワークモードは以下の3つです。
これらのネットワークモードを理解することで、開発環境から本番環境まで、あらゆる場面で適切なネットワーク構成を組むことができるようになります。
まずは、最も基本的でよく使われるbridgeネットワークから見ていきましょう。
リンドくん
bridgeネットワークって何ですか?いつも何も指定せずにコンテナを起動してるんですけど...
たなべ
実は何も指定しない場合、自動的にデフォルトのbridgeネットワークに接続されているんだよ。
これがDockerの標準的なネットワーク方式なんだ。
bridgeネットワークは、Dockerが作成する仮想的なネットワークです。このネットワークに接続されたコンテナ同士は、互いに通信できるようになります。
主な特徴は以下の通りです。
Dockerには最初から用意されている「デフォルトbridge」と、自分で作成する「カスタムbridge」があります。
カスタムbridgeを使うメリットは大きく、以下のような利点があります。
実際の使用例を見てみましょう。
この例では、web-server
コンテナからdatabase
コンテナへ、コンテナ名で直接通信できる点に注目してください。カスタムbridgeでは、このような名前解決が自動的に行われます。
コンテナ内のサービスを外部(ホストマシンや他のマシン)から利用するには、ポートマッピングが必要です。
このコマンドにより、http://localhost:8080
にアクセスすると、コンテナ内のnginxに接続できるようになります。
bridgeネットワークは開発環境や単一ホストでの運用に最適なネットワークモードです。複数のコンテナを組み合わせたアプリケーション構築の基本となります。
リンドくん
bridgeとは別に、hostネットワークというのもあるんですよね?これはどう違うんですか?
たなべ
hostネットワークは、コンテナがホストマシンのネットワークを直接使うモードなんだ。
つまり、コンテナとホストのネットワークが完全に同じになるんだよ。
hostネットワークモードでは、コンテナが独自のネットワーク空間を持たず、ホストマシンのネットワークインターフェースを直接使用します。
主な特徴は以下の通りです。
hostネットワークを使用する場合、コンテナ内のアプリケーションが使用するポートは、ホストマシン上で既に使用されていないポートでなければなりません。
hostネットワークは以下のような場合に有効です。
一方で、hostネットワークには注意点もあります。
実際の開発では、ネットワーク性能が重要な場面や特殊なネットワーク要件がある場合を除き、bridgeネットワークの使用が推奨されます。
リンドくん
先生、overlayネットワークって何ですか?bridgeやhostとは違うんですか?
たなべ
overlayは複数のDockerホストをまたいでコンテナを接続できる特別なネットワークなんだ。
つまり、異なるサーバー上のコンテナ同士を、まるで同じネットワークにいるかのように通信させられるんだよ。
overlayネットワークは、Docker SwarmモードまたはDocker Composeのスケールアウト環境で使用される高度なネットワーク機能です。
主な特徴は以下の通りです。
overlayネットワークを使用するには、まずDocker Swarmモードを有効にする必要があります。
このように、overlayネットワークではサービスという単位でコンテナを管理します。複数のレプリカ(同じコンテナの複数インスタンス)が自動的に負荷分散されます。
overlayネットワークの真価は、複数のホストにまたがる環境で発揮されます。
この設定により、5つのコンテナが複数のホストに自動的に配置され、すべて同じmulti-host-network
で通信できるようになります。
overlayネットワークは、以下のような大規模な本番環境で力を発揮します。
ただし、小規模な開発環境や単一ホストでの運用では、overlayネットワークの複雑さは必要ありません。まずはbridgeネットワークを理解し、必要に応じてoverlayに移行するのが良いでしょう。
リンドくん
それぞれのネットワークの特徴がわかってきました!でも、結局どれを使えばいいのか迷います...
たなべ
大丈夫!基本的にはbridgeから始めればOKだよ。
まずはbridgeで慣れてから、必要に応じて他のモードを使うのがおすすめだね。
今回は、Dockerの3つの主要なネットワークモード(bridge・host・overlay)について詳しく解説してきました。それぞれの特徴を改めて整理しましょう。
bridgeネットワーク - 最も基本的で汎用的
hostネットワーク - 高性能が必要な場面で
overlayネットワーク - 本番環境の大規模システムで
最初から完璧に理解しようとせず、実際に手を動かして試してみることが何より大切です。
小さなプロジェクトから始めて、徐々に複雑な構成に挑戦していきましょう。
Dockerネットワークの理解は、コンテナ技術を実務で活用する上で欠かせないスキルです。
この記事で学んだ基礎知識を土台に、ぜひ実践的なプロジェクトに挑戦してみてください。