Docker の network について

コンテナ

久々に Docker さわっていますが、なんとなく使ってた network という概念について、改めて気づきというか面白いところがあったので備忘録しておきます。

Docker の network とは

docker network create <任意の名前> で作れる仮想サブネット?みたいなものという認識です。

docker run -it --network <ネットワーク名> でコンテナを起動すると、その指定したネットワークに属した状態でコンテナが起動します。

ざっくりイメージ以下の感じです。

# 「hoge_network」という名前の仮想サブネット的なのが作られる
$ docker newtork create hoge_network

# (my-ubuntu:1.0というイメージがある前提で)ubuntu を「hoge_network」に属した状態でコンテナを起動する
$ docker run -it --name ubuntu1 --network hoge_network my-ubuntu:1.0

# もう一つubuntu を「hoge_network」に属した状態でコンテナを起動する
$ docker run -it --name ubuntu2 --network hoge_network my-ubuntu:1.0

# ubuntu1 から ubuntu2 へアクセスできる
ubuntu1: ping ubuntu2

# ubuntu2 から ubuntu1 へもアクセスできる
ubuntu2: ping ubuntu1

もし同じネットワークに属していなかったら、コンテナ間でアクセスできないようです。

絵にすると以下の感じだと理解しています。

network: hogeコンテナ1コンテナ2同じネットワーク内ならアクセスできるnetwork: piyoコンテナ3コンテナ4同じネットワーク内ならアクセスできる異なるネットワーク間はアクセスできない

面白いところ

で、面白いというか、これってどういう仕組みなんだろう?ってところなんです。

同一ネットワーク内だと、コンテナ名を使用して互いを疎通できる

上記の ping のイメージにも書いた通り、コンテナ起動時につけた名前でアクセスできます
docker run --name hoge でいう hoge の部分)

ネットワーク内部に DNS っぽいのが作られているんですかね?

コメント

タイトルとURLをコピーしました