0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的備忘録:Dockerネットワークとは?基本概念と主要モードを自分なりに体系的にまとめてみた

Posted at

はじめに

Dockerはコンテナの管理だけでなく、コンテナ間の通信や外部ネットワークとの接続も制御できます。

本記事では、Dockerのネットワークの基本と主要なモードを解説します。

適切なネットワーク設定を行うことで、セキュリティやパフォーマンスを最適化できます。

書こうと思ったきっかけ

Dockerを使うと「コンテナ同士が通信できない」「ホストとの接続方法がわからない」といった問題に直面しがちです。

特にクラウド環境では、ネットワーク設定ミスが原因で動かないことも。

本記事では、これらの課題を解決するために、Dockerネットワークの基本をわかりやすくまとめました。

Dockerコンテナのネットワークについて

Dockerコンテナ内のネットワークは、コンテナ同士の通信やホストとの接続を管理する重要な仕組みです。以下に、基本的な概念と主要なネットワークモードを説明します。

1. Dockerのネットワークの基本

Dockerでは、コンテナ同士の通信やホストとの接続を管理するために、以下のようなネットワークモードが提供されています。

  • ブリッジ(Bridge)
  • ホスト(Host)
  • オーバーレイ(Overlay)
  • マックブラン(Macvlan)
  • コンテナ間(Container)

2. Dockerの主要なネットワークモード

① Bridge(ブリッジ)ネットワーク

  • デフォルトのネットワークモードで、スタンドアロンのコンテナに適している。
  • Dockerが自動的にdocker0という仮想ブリッジを作成し、コンテナがそこに接続する。
  • コンテナ間通信は、ブリッジ内のコンテナ同士で可能。
  • 外部からのアクセス-pオプションでポートをマッピングすることで実現。

例:

docker network create my_bridge
docker run -d --name container1 --network my_bridge nginx
docker run -d --name container2 --network my_bridge alpine sleep 1000

② Host(ホスト)ネットワーク

  • コンテナがホストと同じネットワークを共有する。
  • -pオプションを使わなくても、コンテナが直接ホストのポートを使用可能。
  • ただし、他のコンテナとの分離がないためセキュリティ面では注意が必要

例:

docker run --rm --network host nginx

→ Nginxがホストのネットワークで直接起動する。

③ Overlay(オーバーレイ)ネットワーク

  • Docker SwarmやKubernetesなどのクラスタ環境で使用される。
  • 複数のDockerホスト間でコンテナ同士が通信できるように仮想ネットワークを作成する。
  • 分散アーキテクチャに適している。

例:

docker network create -d overlay my_overlay

④ Macvlan(マックブラン)ネットワーク

  • コンテナに直接物理ネットワークのIPアドレスを割り当てる
  • コンテナがホストとは別の独立したデバイスのように振る舞う。
  • LAN内の他のデバイスからもアクセス可能

例:

docker network create -d macvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 \
  -o parent=eth0 my_macvlan

⑤ Container(コンテナ間)ネットワーク

  • 別のコンテナのネットワークスタックを共有するモード。
  • --network container:<コンテナ名> を指定すると、そのコンテナのネットワークに直接接続できる。

例:

docker run -d --name main_container nginx
docker run -d --network container:main_container alpine sleep 1000

3. コンテナ間通信の方法

① 同じブリッジネットワーク内での通信
docker network create my_bridge で独自のネットワークを作成し、そのネットワーク内のコンテナはコンテナ名で通信可能

例:

docker network create my_bridge
docker run -d --name web --network my_bridge nginx
docker run -it --network my_bridge alpine sh

その後、Alpineコンテナ内で curl web を実行すると、Nginxのレスポンスが得られる。

② Docker Composeを使ったネットワーク
Docker Composeを使うと、コンテナを自動的に同じネットワーク内に配置できる。

docker-compose.yml:

version: '3'
services:
  web:
    image: nginx
    networks:
      - my_network
  app:
    image: alpine
    command: sleep 1000
    networks:
      - my_network
networks:
  my_network:

起動方法:

docker-compose up -d

web から appping app で通信可能。

Dockerネットワークの管理コマンドまとめ

コマンド 説明
docker network ls 既存のネットワークを表示
docker network inspect <ネットワーク名> ネットワークの詳細を確認
docker network create <ネットワーク名> 新しいネットワークを作成
docker network rm <ネットワーク名> ネットワークを削除

まとめ

  • Bridge: デフォルトのネットワーク、コンテナ間通信に適している。
  • Host: ホストと同じネットワークを使用し、ポート設定不要。
  • Overlay: Swarm/Kubernetesで使われ、ホスト間通信が可能。
  • Macvlan: コンテナに直接IPを割り当て、LAN内の他デバイスとも通信可能。
  • Container: 別のコンテナのネットワークを共有。

Dockerのネットワークは、用途に応じて適切なものを選ぶことが重要です!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?