docker
docker-compose

別々のリポジトリで立てた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": ""
            }
        },