本文へスキップ
BecomeCoder

Dockerコース · 第7章 コンテナ同士をつなぐ · レッスン23

コンテナのネットワーク ― bridge・host・none

ブラウザで完結

導入

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 に繋がっていることを確かめてください。

実際に動かしてみよう

下の端末に docker コマンドを打って Enter を押すと、その場で結果が返ります。本文の手順を実際になぞりながら進めましょう(各レッスンは毎回まっさらな状態から始まり、「最初からやり直す」でいつでも戻せます)。

Docker(シミュレート)

ブラウザ内で docker コマンドを試せる学習用環境を読み込みます(本物のDockerではなく、動きを再現したものです)。
スクロールして表示された時点でも自動で読み込まれます。