Chapter 07

コンポーネント - network

ここだけは理解しよう

Docker ではネットワークの扱いが重要

  • 1 プロセス 1 コンテナ、復数プロセスはネットワークを通して通信する。(nginx と php-fpm のように復数プロセスを協調して動かす必要がある時はソケットではなく、ネットワークで通信することを推奨。)
  • Bridge を基本的に使用する

Dockerのネットワークドライバの種類

まずはネットワークドライバの種類について理解しましょう。

  • bridge
    • Linux カーネルの bridge ネットワークを使用するための機能
    • デフォルトではコンテナを起動すると docker0 の bridge に所属
  • host
    • ホストマシンの eth0 を直接使用する
  • none
    • どの Driver も使用せず、起動したコンテナをネットワークに所属させないための設定

試してみる。

ここでは、下記の構成でデフォルトの network の確認をしながら、
別途 network を作成してコンテナと紐付けてアクセス確認をしてみます。

docker networkを見てみる

# Dockerのネットワークを確認
docker network ls

# ホスト側の確認
ip a

実行結果は下記のようになります。
Docker の DRIVER は初期で 3 つ作成されています。
docker-network.png

networkを作ってみる

では、新規に Bridge ネットワークを作成しましょう。

# brigeでnetworkを作成する
docker network create sample-bridge

# Dockerのネットワークを確認
docker network ls

無事に sample-bridge を作成できました。
host 側にネットワークが追加されているのを確認しましょう。
docker-network-create.png

sample-bridgeにnginxを追加してみる

まずは sample-bridge に nginx を登録します。

# nginxのコンテナをsample-bridgeと紐付けて起動する
docker run \
  --name nginx_use_sample-bridge \
  --network=sample-bridge \
  -d \
  nginx

# sample-bridgeのネットワークを見てみる
docker network inspect sample-bridge

こちらを見ると、無事に network とコンテナを紐づけたことを確認できます。
inspect.png

次に同じネットワークの別コンテナから curl を投げます。

# sample-bridgeにcurlを投げる
docker run \
  --network=sample-bridge \
  -it \
  amazonlinux:2 \
  curl nginx_use_sample-bridge:80

無事に nginx_use_sample-bridge のコンテナにアクセスできました。
curl.png

ちなみに curl 後に sample-bridgeinspect しても、
Container に curl 用のコンテナは記載されていません。
こちらはプロセスが落ちているからです。
ck.png

疎通ができないパターンも確認しましょう

# 2つ目のbridgeのネットワークを作成する
docker network create sample-bridge-v2

# sample-bridge-v2のネットワークでnginxを起動する
docker run \
  --name nginx_use_sample-bridge-v2 \
  --network=sample-bridge-v2 \
  -d \
  nginx

# sample-bridgeでnginx_use_sample-bridge-v2にcurlを投げる
docker run \
  --network=sample-bridge \
  -it \
  amazonlinux:2 \
  curl nginx_use_sample-bridge-v2:80

こちら実行結果です。無事にアクセスをできませんでした。
curl-error.png

念のために sample-bridgesample-bridge-v2 を、
inspcet して中身の設定を確認しましょう。

sample-bridge の結果です。
sample-bridge.png

sample-bridge-v2 の結果です。
sample-bridge-v2.png

それぞれのコンテナは別の network と紐付いていることがわかります。
そのため sample-bridge と紐づいたコンテナから curl をしても
sample-bridge-v2に紐づいているコンテナにはアクセスはできないことがわかります。
ここがコンテナのすごいところ!

社内勉強会で出た質問

回答は、有料の記事に記載します。

  • eth0とはなんでしょうか?
  • eth0eth1 の違いとはなんでしょうか?
  • コンテナを利用した開発(本番利用)では、ネットワークとコンテナを分けたりした方がいいのか?