このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Docker超入門:Dockerコンテナのネットワークを理解する②(Docker Composeでのネットワーク構築とコンテナ間通信)


🧩 Dockerコンテナのネットワークを理解する②(Docker Composeでのネットワーク構築とコンテナ間通信)

 Docker Composeを使うと、複数のコンテナを一気に構築して動かすことができ、とっても便利です。
 特に、コンテナ間通信(Webアプリとデータベースなど)をスムーズに行うためのネットワーク構築は、Composeの強みの一つです。
 ここでは、Composeが作るネットワークの仕組みや、コンテナ間通信の流れを、わかりやすく丁寧に解説します!

🌐 Docker Composeで作られる専用ネットワーク

Docker Composeを使うと、デフォルトで専用のネットワークが自動的に作られます。
このネットワーク内では、サービス名を使ってコンテナ同士が簡単に通信できます。
つまり、IPアドレスを気にしなくても「名前解決」ができるようになっているんです。

項目説明
ネットワークの種類Docker Composeが自動生成(例:プロジェクト名+_default)
通信方法同じネットワークに属するコンテナ同士がDNS名で通信可能
wordpress コンテナ → wpdb コンテナにアクセス (WORDPRESS_DB_HOST: wpdb)

💡 ポイント
以前は「link」オプションでコンテナを繋ぐこともできましたが、今は非推奨です。
現在は、Composeのnetworksセクションを使って明示的にネットワークを定義する方法が主流です。

🚪 外部からコンテナへ通信する:ポートフォワーディング

 コンテナ内のアプリ(例:WordPress)に外部(ブラウザなど)からアクセスするには、ポートフォワーディングが必要です。
ホストのポートとコンテナのポートを紐づけることで、通信を橋渡しします。

実行例

docker run -p 8080:80 image_name
項目説明
-pポートマッピングオプション
8080:80左側がホスト、右側がコンテナのポート

 これで、ブラウザから http://localhost:8080 にアクセスすれば、コンテナ内のWebサーバー(ポート80)に接続できます。

 ポートフォワーディングに関連する一般的なエラーには、ポートがすでに他のプロセスに使用されているためにバインドできない場合や、ネットワーク設定が正しくない場合などがあります。

 ポートが既に使用されている場合は、他のポートを使用するか、既存のプロセスを停止する必要があります。ネットワーク設定が正しくない場合は、ホストとコンテナの間で適切な通信ができるように設定を調整する必要があります。

 具体的には、Dockerホストのポート番号を1つずらすなどして、使われていないポート番号に変更して実行します。例えば、「ports」のところで1つ目のコンテナに「8080:80」を2つ目のコンテナに「8081:80」のように指定します。

 よく使用するホスト側のWebサービスのポート番号には、「80」「8080」「10080」などがあります。

よくあるトラブル

エラー内容原因対処法
ポート競合同じポートを他のサービスが使用中別のポート番号に変更(例:8081:80)
ネットワーク設定ミスCompose定義が不正networks の設定を確認

🧱 Docker Composeで明示的にネットワークを定義する

Composeでは、ネットワークを手動で作成してサービスごとに割り当てることができます。

例:compose.yaml

services:
  web:
    image: nginx
    networks:
      - mynetwork
  db:
    image: mysql
    networks:
      - mynetwork

networks:
  mynetwork:

この設定では、mynetwork というネットワークが作成され、
webdb コンテナが同じネットワーク内で通信できるようになります。
Composeは、ネットワーク名やDNS名を自動で解決してくれるので非常に便利です。

🧩 実践:WordPress+MariaDBコンテナの構築

では実際に、Docker Composeで WordPress+MariaDB の連携環境を作ってみましょう。

構成はこんな感じです👇

📁 compose.yamlを作成する手順

1.作業ディレクトリへ移動

cd desktop/docker

実行結果

PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker>

2.プロジェクトフォルダを作成

mkdir wordpress3
cd wordpress3

実行結果

PS C:\Users\joeac\Desktop\docker> mkdir wordpress3

    Directory: C:\Users\joeac\Desktop\docker

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2025/10/12    21:24                wordpress3

PS C:\Users\joeac\Desktop\docker> cd wordpress3
PS C:\Users\joeac\Desktop\docker\wordpress3>

3.VS Codeを起動して編集

code compose.yaml

VSCodeが起動します。

実行結果

PS C:\Users\joeac\Desktop\docker\wordpress3> code compose.yaml

4.以下の内容を保存

services:
  wpdb:
    image: mariadb:10.8
    environment:
      MARIADB_ROOT_PASSWORD: root-pass
      MARIADB_DATABASE: database
      MARIADB_USER: wp-user
      MARIADB_PASSWORD: wp-pass
    networks:
      - wpnetwork
    volumes:
      - db-data:/var/lib/mysql

  wordpress:
    image: wordpress:6.5
    depends_on:
      - wpdb
    networks:
      - wpnetwork
    environment:
      WORDPRESS_DB_HOST: wpdb
      WORDPRESS_DB_NAME: database
      WORDPRESS_DB_USER: wp-user
      WORDPRESS_DB_PASSWORD: wp-pass
    ports:
      - "8080:80"
    volumes:
      - wp-data:/var/www/html

networks:
  wpnetwork:
volumes:
  db-data:
  wp-data:

🧾 各設定項目の説明

項目内容
services作成するコンテナを定義
image使用するDockerイメージ
environment環境変数を設定(DB情報など)
networks接続するネットワーク名
depends_on起動順序(wpdb→wordpress)
portsポートフォワーディング設定
volumes永続化データの保存場所

依存関係を定義しておくと、WordPressがDBより先に起動しないよう制御できます。

🚀 コンテナの作成と実行

作成したcompose.yamlがあるディレクトリで、次のコマンドを実行します。

docker compose up -d

主なオプション

オプション説明
upコンテナを作成・起動
-dバックグラウンドで実行(デタッチドモード)

実行結果

PS C:\Users\joeac\Desktop\docker\wordpress3> docker compose up -d
[+] Running 31/31
(省略)
[+] Running 5/5
 ✔ Network wordpress3_wpnetwork      Created                                      0.1s
 ✔ Volume wordpress3_db-data         Created                                      0.0s
 ✔ Volume wordpress3_wp-data         Created                                      0.0s
 ✔ Container wordpress3-wpdb-1       Started                                      2.6s
 ✔ Container wordpress3-wordpress-1  Starte...                                    0.7s
PS C:\Users\joeac\Desktop\docker\wordpress3>

これで、wpnetworkネットワーク上にWordPressとMariaDBのコンテナが起動しました。

🌍 WordPressにアクセスして確認

ブラウザで以下のURLを開きます。

http://localhost:8080

WordPressの初期セットアップ画面が表示されれば成功です!

言語を「日本語」にして次へ進めると、初期設定を進められます。

🧠 Dockerネットワークの確認

ネットワークが正しく作成されたかを確認します。

docker network ls

実行結果

PS C:\Users\joeac\Desktop\docker\wordpress3> docker network ls
NETWORK ID     NAME                   DRIVER    SCOPE
ec526007458b   bridge                 bridge    local
edc5f4ea708e   host                   host      local
0b1b4553af27   none                   null      local
8492d7e27310   wordpress3_wpnetwork   bridge    local

さらに詳細を見たい場合

docker network inspect wordpress3_wpnetwork

実行結果

PS C:\Users\joeac\Desktop\docker\wordpress3> docker network inspect wordpress3_wpnetwork
[
(省略)
        },
        "ConfigOnly": false,
        "Containers": {
            "8e63cac20f936e70ea8efafb0dcf82140a16a3bad7bc776ec81276959f194ac1": {
                "Name": "wordpress3-wordpress-1",
                "EndpointID": "055c5bba1055fc0a8ab40b9e516a17a0b7475b1b3275a558b6ae58b306c6bd8d",
                "MacAddress": "8a:d5:47:33:8f:7d",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            },
            "cf7cf8d7bc36080d1c84dcbe3ad198049209ec6b9866e8d50c8c9a21a0ae6e9a": {
                "Name": "wordpress3-wpdb-1",
                "EndpointID": "55559d29d19adbd67da114c029701a9b7940d1b23e2ba1d2e6075b55e2866c81",
                "MacAddress": "ea:43:1d:19:dd:1b",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
(省略)
    }
]
PS C:\Users\joeac\Desktop\docker\wordpress3>

出力の中に、以下のような項目があります。

項目意味
Nameネットワーク名
Driver使用ドライバ(bridge)
Containers接続しているコンテナ一覧(wordpress, wpdb)
IPv4Address各コンテナのIPアドレス

この結果から、WordPressとMariaDBが同じネットワーク内にいることが確認できます。

🔍 ポート番号の紐づけを確認

docker container ls

実行結果

PS C:\Users\joeac\Desktop\docker\wordpress3> docker container ls
CONTAINER ID   IMAGE           COMMAND                   CREATED         STATUS         PORTS                                     NAMES
8e63cac20f93   wordpress:6.5   "docker-entrypoint.s…"   7 minutes ago   Up 7 minutes   0.0.0.0:8080->80/tcp, [::]:8080->80/tcp   wordpress3-wordpress-1
cf7cf8d7bc36   mariadb:10.8    "docker-entrypoint.s…"   7 minutes ago   Up 7 minutes   3306/tcp                                  wordpress3-wpdb-1

ホストの8080番ポートがコンテナの80番ポートに転送されており、
MariaDBは内部で3306番ポートを使用していることがわかります。

🎯 まとめ

Docker Composeを使えば、ネットワーク設定も自動化され、
複数コンテナ間の通信をシンプルに構築できます。

  • Composeが自動で専用ネットワークを作成
  • サービス名でコンテナ同士が通信可能
  • ポートフォワーディングで外部アクセスを許可

次のステップでは、複数ネットワークを組み合わせたより高度な構成や、
外部DBとの接続などにも挑戦してみましょう!