コンテナ間通信でデータベースを共有する

異なるリポジトリのDBコンテナにデータを投入する方法をメモします。
例えば、サービス(言語)ごとにリポジトリを分けていて、DBを共有したいケースに活用できるかと思います。

前提として、AリポジトリをメインとしてDBコンテナを起動します。こちらにBリポジトリで構築した、appコンテナのデータを保存できるようにします。
やることは、コンテナのネットワークを利用して、コンテナ間通信を行います。

手順

まず、Aリポジトリの docker-compose.yml の内容を以下のようにします。(insert-mysqlは例です。)

  db:
   (他の項目については省略)
    networks:
      - default
      - insert-mysql

networks:
  insert-mysql:
    driver: bridge

上記の設定変更を反映します。

$ docker-compose up -d
Creating network "hogehoge_insert-mysql" with driver "bridge"

ここでネットワーク一覧に新しいネットワーク(hogehoge_insert-mysql)が表示されていることを確認します。

$ docker network list
NETWORK ID     NAME                       DRIVER    SCOPE
abcdef123456   hogehoge_default            bridge    local
123456abcdef   hogehoge_insert-mysql       bridge    local
aabbccddeeff   bridge                      bridge    local

また、現時点では上記の新しいネットワークを使用しているコンテナが、AリポジトリのDBコンテナしかないことを確認しておきます。
"Containers"の項目の部分です。

$ docker network inspect hogehoge_insert-mysql

次に、Bリポジトリの docker-compose.yml の編集を行います。

  app:
    (他の項目については省略)
    networks:
      - default
      - hogehoge_insert-mysql
networks:
  hogehoge_insert-mysql:
    external: true

先ほどと同様に設定の変更を反映します。

$ docker-compose up -d

再度hogehoge_insert-mysqlのネットワークを使用しているコンテナの確認をします。
"Containers"の項目に、Bリポジトリのappコンテナが追加されていることが確認できると思います。

$ docker network inspect hogehoge_insert-mysql

これでリポジトリに跨ってDBの共有ができるはずです。

もしコンテナ起動に失敗する場合

既存のコンテナが影響している可能性があるので、一旦全部のネットワークを削除(docker network rm)とdocker-compose downをすると良いかと思います。

参考

はじめdocker network create hoge_networkで手動で新しくネットワークを作成しようとしたのですが、docker-compose.yml に設定することにより、自動作成したかったので、上記の方法にしました。
https://tech-blog.rakus.co.jp/entry/20181211/docker/postgresql/go