Dockerのネットワーク構成

Dockerのネットワーク基本構成

最初にイメージ図をみてみます。この内容をコマンドで確認していきます。

DockerホストからIPアドレスを確認してみます。

コンテナが起動していない状態でBridgeを確認します。

BridgのDocker0が作成してありますが、interfaceは接続されていません。

bidgeを確認するためには以下のツールをインストールしてください。

Dockerのネットワークを確認します。

bridge:コンテナをbridgeで接続されます。通常起動したコンテナはこのネットワークに接続します。
host:Dockerホストと同じネットワークに接続します。IPアドレスはDockerホストと同じになります。
none:いわゆる隔離LAN。コンテナはルーブバックインターフェースしか取り付けられません。

実際にポートを指定してコンテナを起動します。

コンテナ起動状態でIPアドレスを確認します。
新たに仮想インターフェース(veth)が接続されています。
さらに見るとこのvethはdocker0と接続しています。

コンテナ起動後にBridgeを確認してみます。
docker0にvethが接続されています。

コンテナ内のネットワーク情報を確認します。
IPアドレス「172.17.0.2」が割り当てられています。
このIPアドレスはコンテナ名前空間で割り当てられているため、Dockerホストの「ip a」コマンドでは出力されません。

コンテナが外部ネットワークと通信できているのはiptablesのおかげです。
iptablesによってNAT・IPマスカレードをしているため、外部との通信やポートでのコンテナ通信が実現しています。

振り返りにもう一度イメージをみてみます。Dockerのネットワーク構成は難しいようで、あまり複雑ではありません。
IPマスカレードやNATの知識があれば十分理解できそうです。

Docker Composeを使った場合

docker-composeでworpdressを立ち上げます。
すると「wordpress_default」のネットワークが作成されるのがわかります。

ネットワークを確認するとbridgeのネットワークにwordpress_defaultがあります。

Dockerホストからインターフェースを確認します。
新たにBridge「br-8af5af17aacb」とvethペアが2つ作成されています。

新たに作成されたbridgeにvethが2つ接続されています。

wordpress_defaultのネットワークを確認します。
default_gatewayやコンテナのIPアドレスが確認できます。

iptables設定は以下のようになります。

イメージ図

Dockerのネットワークは難しくない

dockerでは内部で動いているネットワークが非常に見えづらいので難しく感じることもありますが、基本はiptablesによるNAT・IPマスカレードの制御です。
これを理解しておけばあとは応用するだけです。

iptablesの操作に注意
dockerとは関係なくiptablesを変更することもあると思います。変更後にiptablesを再起動するとDockerの設定が消えますので、ipatalesを変更した場合はdockerプロセスも再起動しましょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です