本文へスキップ
BecomeCoder

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

docker network create ― 自分のネットワークを作る

ブラウザで完結

導入

既定の 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 lsappnet が増えることを確認しましょう。
  • docker network create -d bridge dbnet のようにドライバを明示しても作れます(-d は driver の指定)。

実際に動かしてみよう

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

Docker(シミュレート)

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