LoginSignup
19
14

More than 3 years have passed since last update.

複数の docker-compose 間で共通の Network を使い通信できるようにする

Posted at

目的

docker-compose で起動したコンテナは共通の Network 上にあるのでお互いに通信が可能だが、起動したいコンテナの数が増えてくると、1枚の docker-compose が肥大してしまう。
管理のために docker-compose を分けたいが、お互いに通信はできるようにしたい。
また、各コンテナには固定IPアドレスを付与したい。

共有する Docker ネットワークを作成する

ここでは shared-nw と名付けています。
固定IPアドレスを付与させるため、subnet も合わせて定義させています。
※docker-compose.yml のバージョンが3以上になると、gateway は定義できなかったように思います(未確認)。

$ docker network create shared-nw --subnet=172.30.0.0/16 --gateway=172.30.0.254
$ docker network ls
NETWORK ID          NAME            DRIVER              SCOPE
53bd0dc361fe        shared-nw       bridge              local

docker-compose.yml 内で共有ネットワークを使用するように宣言する

1つ目

  1. コンテナ(services:)を定義する箇所で networks > shared-nw > ipv4_address と固定IPアドレスを付与します。
  2. networks: を services: と同階層に定義し、使用するネットワーク(shared-nw) を宣言します。また、external: true とすることで、この docker-compose.yml 内ではなく、外部で定義されているネットワークを探すように指定します。
(省略)
services:
  {サービス名}:
    networks:
      shared-nw:
        ipv4_address: 172.30.0.2
(省略)
networks:
  shared-nw:
    external: true

2つ目

1つ目と同様に宣言していきます。
固定IPアドレスに1つ目とは違うアドレスを設定しています。

(省略)
services:
  {サービス名}:
    networks:
      shared-nw:
        ipv4_address: 172.30.1.2
(省略)
networks:
  shared-nw:
    external: true

両方の docker-compose を起動した上で通信確認してみます。
inet addr:172.30.1.2 のコンテナから、172.30.0.2 のコンテナに対して PING が通ることが確認できました。

$ docker exec spark-master101 ifconfig | grep "inet addr"
          inet addr:172.30.1.2  Bcast:172.30.255.255  Mask:255.255.0.0
          inet addr:127.0.0.1  Mask:255.0.0.0
$ docker exec spark-master101 ping 172.30.0.2
PING 172.30.0.2 (172.30.0.2): 56 data bytes
64 bytes from 172.30.0.2: seq=0 ttl=64 time=0.168 ms
64 bytes from 172.30.0.2: seq=1 ttl=64 time=0.111 ms
64 bytes from 172.30.0.2: seq=2 ttl=64 time=0.099 ms

結論

予め Docker network を作成しておく必要はありますが、docker-compose を分けて作成
しておけるメリットがあるので、ローカルで個人で管理する分には問題なさそうです。

19
14
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
19
14