LoginSignup
1
5

More than 3 years have passed since last update.

異なったDocker ComposeのAPIクライアントとサーバのネットワークをDocker Networkを使って接続する方法

Posted at

はじめに

APIクライアントとAPIサーバを別Docker Composeで管理している場合、両者をDocker Networkでつなげる方法を記載します。

環境

  • MacOS Version 10.15.5
  • docker desktop Version 2.2.0.0 (42247)
  • docker-compose version 1.25.2, build 698e2846

設定例

APIサーバ側のDocker Compose yaml

version: '3'
services:
  api:
    container_name: my-api-server
    build:
      context: ./
      dockerfile: ./Dockerfile
    ports:
      - "5000:5000"
    env_file:
      - ./.env
    environment:
      - DB_HOST=db
    depends_on:
      - db
    networks:
      - db-net
      - api-net 

  db:
    image: mysql:5.7.22
    container_name: my-api-mysql
    command: mysqld --character-set-server=utf8mb4
    volumes:
      - ./db/init:/docker-entrypoint-initdb.d
      - ./db/mysql/conf.d:/etc/mysql/conf.d
    restart: always
    hostname: db
    environment:
      - MYSQL_ROOT_PASSWORD=mysql
      - MYSQL_DATABASE=mydb
    networks:
      - db-net

networks:
  db-net:  # APIサーバ<=>MySQL間用ネットワーク
  api-net: # クライアント<=>APIサーバ間用ネットワーク

上記Docker Composeを立ち上げてAPIサーバ側のDockerネットワーク名を確認します。

$ cd my-api-server
$ docker-compose up -d
$ docker network ls
NETWORK ID          NAME                                    DRIVER              SCOPE
7f07cc870f0a        bridge                                  bridge              local
22b2cc052945        host                                    host                local
77efc533d609        my-project_api-net                      bridge              local
5d75d3a0f46c        my-project_db-net                       bridge              local

APIクライアント側のDocker Compose yaml

クライアント側では下記のようにAPI側で設定したDocker Networkをdefault:, external:, name:で指定します。

version: '3'
services:
  bff:
    container_name: my-client-app
    build: .
    ports:
      - "3000:3000"
    env_file:
      - ./.env

networks:
  default:
    external:
      name: my-project_api-net # 確認したAPI側のDockerネットワーク名を指定

接続

クライアント側コンテナ内からAPIサーバを叩くとき、API側でcontainer_nameに指定した名前をドメインにすることでアクセスすることができます。

$ cd my-client-app
$ docker-compose up -d
$ docker exec -it my-client-app /bin/bash
$ curl http://my-api-server:5000/path

参考

1
5
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
1
5