久々に 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
もし同じネットワークに属していなかったら、コンテナ間でアクセスできないようです。
絵にすると以下の感じだと理解しています。
面白いところ
で、面白いというか、これってどういう仕組みなんだろう?ってところなんです。
同一ネットワーク内だと、コンテナ名を使用して互いを疎通できる
上記の ping
のイメージにも書いた通り、コンテナ起動時につけた名前でアクセスできます。
(docker run --name hoge
でいう hoge
の部分)
ネットワーク内部に DNS っぽいのが作られているんですかね?
コメント