Edited at

別々のリポジトリで立てたdocker-composeを同一ネットワークに所属させる方法


はじめに

ローカル開発環境を作成する際に、ローカル開発環境用のリポジトリを作るのは依存度が高くなってしまうので嫌だった。

なので同一ネットワークに所属させてローカル開発環境はそれぞれのリポジトリに置くようにしてます。

今後、よりよいベスト・プラクティスを見つけようとは思ってますが一応問題なく動いているのでその方法を残します。


やり方

docker-dompose: version 3.5

サンプルはnetworks以外はどうでもよかったので適当です


ネットワークを作成する


backend/docker-compose.yml

version: '3.5'

services:
app1:
image: alpine:3.4
ports:
- 50000:50000
networks:
- mynet #←serviceのapp1を作成したnetworkに所属させる
command: top
networks:
mynet: #←自分の好きなネットワーク名
name: mynet #←自分の好きなネットワーク名

上記のファイルのnetworksにnameのみ定義しておくと自分で命名して新規ネットワークを作成できます

$ cd backend

$ docker-compose up -d
$ docker network ls
# ※結果からbridge host noneは抜いてます
NETWORK ID NAME DRIVER SCOPE
26350ce7ba23 mynet bridge local


既に存在しているネットワークに所属させる

networksに先程作成したネットワークを宣言します

違いはexternal: trueのみでこれがあると既に存在しているネットワークへの参照をとれます


frontend/docker-compose.yml

version: '3.5'

services:
app2:
image: alpine:3.4
ports:
- 50001:50001
networks:
- mynet
command: top
networks:
mynet:
external: true
name: mynet


$ cd ../frontend
$ docker-compose up -d


ネットワーク確認

docker network inspectを見てみると同じネットワークに所属していることがわかります

$ docker network inspect 26350ce7ba23

# ※Containers抜粋
"Containers": {
"34223f932ee2d1e21b78da2168d7ddceca457eef5f33dc943beeff891dc7a276": {
"Name": "backend_app1_1",
"EndpointID": "ae124e9bb5d3691c51c60520d3ffbd236be9946d2b1574b8bd06e192eebb2599",
"MacAddress": "02:42:ac:1e:00:02",
"IPv4Address": "172.30.0.2/16",
"IPv6Address": ""
},
"73fb6f4969a25640c526938b50d0d95e5b3bcf1eeefe99898669b11db4e66df4": {
"Name": "frontend_app2_1",
"EndpointID": "d6996a0ab64d429f081ea3144a38ba6122022348f87951dd3b862e66bcf6a31a",
"MacAddress": "02:42:ac:1e:00:03",
"IPv4Address": "172.30.0.3/16",
"IPv6Address": ""
}
},