導入
既定の bridge には、実は「コンテナを名前で呼べない」という不便さがあります。これを解決するのが、自分で作るネットワーク(ユーザー定義ネットワーク)。作り方はとても簡単で、これ1つで通信がぐっと扱いやすくなります。
説明
自分のネットワークは docker network create <名前> で作ります。
docker network create appnet
docker network ls
一覧に appnet が加わります。ドライバは何も指定しなければ bridge(=仮想スイッチ型)です。既定の bridge と、自分で作った appnet の決定的な違いはこれです。
flowchart TD
A["既定の bridge"] --> A2["コンテナは IP でしか呼べない<br/>(名前解決なし)"]
B["ユーザー定義ネットワーク<br/>(docker network create)"] --> B2["★ コンテナ名で呼べる<br/>(埋め込みDNSが働く)"]
自分で作ったネットワークには Docker の埋め込み DNS が働き、同じネットワーク上のコンテナを名前で見つけられるようになります。IP アドレスは起動のたびに変わり得ますが、名前は変わりません。だから「db という名前で DB に繋ぐ」という書き方が安定して使えます。
flowchart LR
subgraph appnet["appnet(自分で作った)"]
W["web"] -->|"http://api:3000<br/>名前でアクセス"| A["api"]
A -->|"db:5432<br/>名前でアクセス"| D[("db")]
end
これが、複数コンテナのアプリを組むときの土台になります。「まず専用ネットワークを1つ作り、関係するコンテナを全部そこに繋ぐ」——これが定石です。
やってみよう
docker network create appnetを実行し、docker network lsにappnetが増えることを確認しましょう。docker network create -d bridge dbnetのようにドライバを明示しても作れます(-dは driver の指定)。