LoginSignup
0
0

More than 1 year has passed since last update.

dockerネットワークについて調べる〜ネットワークの種類

Posted at

今回のお題

前回docker-composeを用いて複数のコンテナを同時に作成しましたが、その結果それらの間でも通信ができるようになりました。

これはコンテナ同士がdockerネットワークという同一の入れ物に入っているからであり、docker-composeを用いることでコンテナの作成だけでなくネットワークの整備までもが自動で進むのがdocker-composeのメリットだと言われています。

と、偉そうに言いましたが、docker-composeが自動でやってくれたおかげで私自身dockerネットワークについてはほとんどわかっていません。

ですので、それらについて自分なりに調べた内容をここにメモしておこうと思います。

復習〜Dockerネットワークとは

複数のコンテナを連携させるための箱のようなもの。

ほとんどのサービスは複数のコンテナを利用することで成り立っているため、コンテナ同士での通信が必要になる。

コンテナ同士を同一のネットワークに所属させることでそれらの間での通信が容易になり、結果的にサービスの構築が簡単になる。

Dockerネットワークの種類

Dockerネットワークには大きく分けて3つのタイプがあり、それぞれbridge, host, null(none)と呼ばれる。

この分類は、ネットワーク内のコンテナがホストOSの外部とどのようにして通信するのかによって行われている。

ネットワークの種類がnull(none)の場合、コンテナは外部と通信できない。

hostにおいては、ネットワークに所属するコンテナはホストOSのプライベートIPアドレスを使って通信することになる。

bridgeにおいてはコンテナごとにホストOSとは別のIPアドレスが割り当てられ、ホストOSとコンテナのIPアドレスを仮想スイッチと呼ばれる装置が中継(bridge)することで通信が成立している。

作成されたコンテナのネットワーク設定

Dockerはデフォルトで3つのネットワークを保有しており、それぞれのネットワーク名やネットワークタイプについては以下のようになっている。

# 作成済みのネットワークを一覧表示
% docker network ls
NETWORK ID     NAME                              DRIVER    SCOPE
59c6a0c60086   bridge                            bridge    local
efba6f694b6f   host                              host      local
a0d4f5e885f9   none                              null      local

docker runコマンドで作成されたコンテナについては基本的には上記のbridgeに所属するが、--netオプションを付けることで所属するコンテナの指定が可能。

# これだとbridgeに所属
% docker run -it -d centos:centos7

# hostを指定
% docker run -it -d --net=host centos:centos7

# noneを指定
% docker run -it -d --net=none centos:centos7

また、docker-compose upコマンドを用いてコンテナを作成した場合にはxxxx_defaultという名前のネットワークが新しく作られるが、この際も特に指定がなければdriverはbridgeになる。

また、デフォルトのbridgeであっても新規作成されたbridgeネットワークであっても、コンテナ作成時に自動的にIPアドレスが付与される。

終わりに

長くなってしまったので一旦ここまでにします。

次回はbridgeの仕組みについてまとめる予定です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0