CodeGym /コース /Docker SELF /コンテナ間の接続

コンテナ間の接続

Docker SELF
レベル 17 , レッスン 2
使用可能

3.1 bridgeネットワークの基本

bridgeネットワークはDockerのデフォルトのネットワークドライバーで、コンテナ同士が相互に通信できる分離されたネットワークを作成するために使用される機能だよ。このネットワークを使えば、コンテナはIPアドレスやホスト名を使って通信できるし、マルチコンテナアプリケーションの各コンポーネント間でのやり取りを簡単に構築できるんだ。

bridgeネットワークはホストレベルでプライベートな内部ネットワークを作成し、ホストの外部ネットワークから隔離されるよ。このネットワークに接続されているコンテナは互いに通信可能だけど、ポートフォワード設定なしでは外部から直接アクセスすることはできない。

自動的に作成されるbridgeネットワーク

デフォルトでDockerインストール時にbridgeネットワークが作成されるよ。そして特定のネットワークを指定せずに起動されたコンテナは、自動的にこのネットワークに接続されるんだ。

bridgeネットワークでのコンテナ作成・使用例

1. bridgeネットワークでコンテナを起動する:

この例では、Nginxを使ったcontainer1と、Busyboxを使ったcontainer2を起動するよ。両方のコンテナはデフォルトのbridgeネットワークに接続される。

ターミナル

docker run -d --name container1 nginx
docker run -d --name container2 busybox sleep 1000

2. コンテナのIPアドレスを確認する:

コンテナのIPアドレスを確認するには、docker inspectコマンドを使うよ。

これらのコマンドを使えば、コンテナ間の通信に使えるIPアドレスがわかるよ。

ターミナル

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container1
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container2

3. IPアドレスを使ったコンテナ間の通信:

コンテナ間の通信を確認するには、container2内からcontainer1pingコマンドで叩いてみて。

コンテナが正しくbridgeネットワークに接続されていれば、pingコマンドは成功するよ。

ターミナル

docker exec container2 ping -c 4 <IP_ADDRESS_OF_CONTAINER1>

補足: bridgeネットワークは、コンテナ同士が通信しつつ外部ネットワークから隔離された状態でローカルアプリケーションを動作させるためのシンプルな解決策だよ。IPアドレスによるpingがネットワーク接続を確認するための基本的な方法だけど、もっと複雑なアプリケーションにはDNSや追加のネットワークドライバ設定が必要になることがあるよ。

3.2 ホスト名の使用

ホスト名を使用してコンテナ間を接続する

IPアドレスの使用に加えて、Dockerではコンテナ名を使用してコンテナ間を接続することもできるよ。これにより構成が簡単になって便利だよ、だってコンテナ名は固定されてるけど、IPアドレスはコンテナを再起動すると変わることもあるからね。

ホスト名による接続の例

1. bridgeネットワークを指定してコンテナを起動する:

ターミナル

docker run -d --name webserver --network bridge nginx
docker run -d --name appserver --network bridge busybox sleep 1000
    

2. ホスト名での接続を確認する:

appserverコンテナからpingコマンドを使ってwebserverをpingしてみて:

ターミナル

docker exec appserver ping -c 4 webserver 
    

カスタムbridgeネットワークの作成

デフォルトのbridgeネットワークを使う代わりに、カスタムのbridgeネットワークを作成することで、コンテナ間のやり取りをもっとしっかりコントロールできるよ。

カスタムネットワーク作成の例

1. カスタムネットワークを作成する:

ターミナル

docker network create --driver bridge my_bridge_network 
    

2. カスタムネットワークでコンテナを起動する:

ターミナル

docker run -d --name webserver --network my_bridge_network nginx
docker run -d --name appserver --network my_bridge_network busybox sleep 1000 
    

3. ホスト名での接続を確認する:

ターミナル

docker exec appserver ping -c 4 webserver 
    

3.3 複数ホストの例

実際の使用例

例 1: Webサーバーとデータベース

Webサーバーとデータベース用のdocker-compose.ymlファイルを作成:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    networks:
      - my_bridge_network
        
  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    networks:
      - my_bridge_network
        
networks:
  my_bridge_network:
    driver: bridge

Docker Composeを起動:

Terminal


docker compose up -d 

コンテナ間の接続を確認:

Terminal


docker compose exec web ping -c 4 db 

例 2: マイクロサービスアーキテクチャ

マイクロサービスアプリケーション用のdocker-compose.ymlファイルを作成:

Yaml

version: '3.8'

services:
  frontend:
    image: nginx:latest
    networks:
      - my_bridge_network
        
  backend:
    image: mybackend:latest
    networks:
      - my_bridge_network
        
  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    networks:
      - my_bridge_network
        
networks:
  my_bridge_network:
    driver: bridge

Docker Composeを起動:

Terminal

        
docker compose up -d 

コンテナ間の接続を確認:

Terminal

docker compose exec backend ping -c 4 db

docker compose exec frontend ping -c 4 backend 
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION