【ITニュース解説】Episode 15: Docker Networking — Custom Networks & Real-World Use Cases
2025年09月06日に「Dev.to」が公開したITニュース「Episode 15: Docker Networking — Custom Networks & Real-World Use Cases」について初心者にもわかりやすいように丁寧に解説しています。
ITニュース概要
Dockerのカスタムネットワークは、コンテナ間通信を柔軟にし、隔離を強化する。`docker network create`で作成し、`--network`オプションでコンテナを接続。同一ネットワーク内のコンテナは名前で通信可能。複数ネットワークへの接続も可能。データベース、API、フロントエンドを異なるネットワークに配置することで、セキュリティ境界を容易に実現できる。
ITニュース解説
Dockerのネットワーク機能は、コンテナ間の通信を制御し、アプリケーションのセキュリティと柔軟性を高める上で非常に重要だ。デフォルトでは、Dockerはブリッジネットワークというものを提供し、同じネットワーク内のコンテナはIPアドレスを使って互いに通信できる。しかし、より複雑な環境では、コンテナ間の通信をより細かく制御する必要がある。そこで登場するのがカスタムネットワークだ。
カスタムネットワークを使う主な理由は3つある。1つ目はサービスディスカバリーだ。大規模なシステムでは、コンテナが互いをIPアドレスではなく名前で認識できるようにしたい。カスタムネットワークでは、DNSを使ってコンテナ名をIPアドレスに解決できるため、設定が簡単になる。2つ目はネットワークの分離だ。特定のコンテナ間でのみ通信を許可したい場合、カスタムネットワークを使うことで、不要な通信を遮断し、セキュリティを向上させることができる。3つ目は柔軟性だ。カスタムネットワークを使うと、コンテナをネットワークに動的に接続したり、切断したりできるため、システムの構成を柔軟に変更できる。
カスタムネットワークの作成は簡単だ。docker network create [ネットワーク名]というコマンドを実行するだけだ。例えば、docker network create my_custom_networkとすると、「my_custom_network」という名前のカスタムネットワークが作成される。作成されたネットワークは、docker network lsコマンドで確認できる。
コンテナをカスタムネットワークで実行するには、docker runコマンドに--network [ネットワーク名]オプションを追加する。例えば、docker run -dit --name app1 --network my_custom_network alpine shというコマンドは、「app1」という名前のコンテナを「my_custom_network」ネットワークに接続する。同様に、「app2」という名前の別のコンテナも同じネットワークに接続すると、app1とapp2は互いに名前で通信できるようになる。例えば、app1コンテナ内でdocker exec -it app1 ping app2と実行すると、app2コンテナにpingを送信できる。
さらに、コンテナを複数のネットワークに接続することも可能だ。docker network connect [ネットワーク名] [コンテナ名]というコマンドを使うと、既存のコンテナを別のネットワークに接続できる。例えば、docker network connect my_custom_network app1というコマンドは、「app1」コンテナを「my_custom_network」ネットワークに接続する。コンテナを複数のネットワークに接続することで、異なるネットワークに存在するサービス間の橋渡しができる。
カスタムネットワークの実際の使用例として、データベース、API、フロントエンドの3つのコンテナで構成されるアプリケーションを考えてみよう。データベースコンテナは、セキュリティ上の理由から、外部からのアクセスを遮断したい。APIコンテナは、データベースコンテナと通信し、外部からのリクエストを処理する必要がある。フロントエンドコンテナは、APIコンテナと通信してユーザーインターフェースを表示するが、データベースには直接アクセスする必要はない。このような場合、カスタムネットワークを使うことで、各コンテナのアクセス範囲を明確に定義できる。例えば、データベースコンテナを専用のプライベートネットワークに接続し、APIコンテナをプライベートネットワークと外部ネットワークの両方に接続し、フロントエンドコンテナを外部ネットワークのみに接続すると、セキュリティを確保しつつ、必要なコンテナ間でのみ通信を許可できる。
実際に手を動かして理解を深めるために、以下の演習を試してみると良いだろう。まず、「backend_net」と「frontend_net」という2つのカスタムネットワークを作成する。次に、データベースコンテナを「backend_net」ネットワーク内で実行する。APIコンテナは、「backend_net」と「frontend_net」の両方のネットワークで実行する。最後に、フロントエンドコンテナを「frontend_net」ネットワークでのみ実行する。この構成で、各コンテナからの通信をテストし、意図したとおりに通信が制限されていることを確認する。
カスタムネットワークを理解し、適切に設計することで、Dockerを使ったアプリケーションのセキュリティ、スケーラビリティ、柔軟性を大幅に向上させることができる。