コンテナ間通信でデータベースを共有する
異なるリポジトリの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