導入
Docker は、コンテナを起動すると自動的にあるネットワークに接続します。何も指定しなければ、既定の bridge(ブリッジ)ネットワークです。まずは Docker に最初から用意されている3つのネットワークを見てみましょう。
説明
docker network ls で、いま存在するネットワークを一覧できます。作った覚えがなくても、3つ表示されるはずです。
docker network ls
Docker には、最初から3つのネットワークがあります。
flowchart TD
A["bridge(既定)<br/>コンテナ用の仮想スイッチ。<br/>指定しなければここに繋がる"]
B["host<br/>ホストのネットワークを<br/>そのまま使う(隔離なし)"]
C["none<br/>ネットワークに繋がない<br/>(完全に孤立)"]
- bridge(ブリッジ) … 既定のネットワーク。ホストの中に作られた**仮想的なスイッチ(ハブ)**のようなもので、コンテナはここに繋がって外と通信します。第3章の
-p 8080:80は、この bridge 越しにホストのポートへ橋渡ししていました。 - host … コンテナをホストのネットワークに直結する(ポートの隔離がなくなる)。特殊用途向け。
- none … どのネットワークにも繋がない。外と一切通信させたくないときに使います。
flowchart LR
subgraph Host["ホスト(あなたのサーバー)"]
subgraph br["bridge ネットワーク"]
C1["コンテナ web"]
C2["コンテナ db"]
end
end
C1 -.-> C2
Host -->|"-p で公開"| Out(("外の世界"))
ふだん docker run するコンテナは、黙っていれば全部この既定 bridge に乗ります。ところが——既定の bridge には落とし穴があります。次のレッスンで、その落とし穴と解決策(自分のネットワークを作る)を見ていきます。
やってみよう
docker network lsを実行し、bridge/host/noneの3つが最初から存在することを確認しましょう。- コンテナを1つ
docker run -d --name web nginxで起動してから、docker inspect webの"NetworkSettings"を見て、bridgeに繋がっていることを確かめてください。