第29回 Docker Networkingの基礎知識 標準的なネットワークを理解する古賀政純の「攻めのITのためのDocker塾」(3/5 ページ)

» 2016年09月21日 08時00分 公開

Dockerのネットワーク構成を確認してみよう

 では、実際にDockerホスト上のネットワークインタフェースを確認してみましょう。IPアドレスの確認に、ipコマンドを使用します。Dockerエンジンが稼働しているホストOS上で以下のように入力します。


# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:7c:f1:83 brd ff:ff:ff:ff:ff:ff
    inet 172.16.1.123/16 brd 172.16.255.255 scope global eth0
...
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
    link/ether 02:42:6c:93:1c:59 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 scope global docker0
...

 物理サーバに搭載されている物理NICのインタフェースeth0に割り当てられているIPアドレスは、172.16.1.123/16であると確認できます。ホストOSは172.16.0.0/16のネットワークに所属し、eth0で外部と通信ができる状態です。一方、docker0ブリッジのIPアドレスとして172.17.0.1/16が割り当てられています。docker0とeth0は異なるネットワークセグメントですが、docker0が提供するブリッジネットワークに所属するコンテナは、ホストOSが提供するiptablesのNAT機能を使って、ホストOSの物理NICのeth0を経由して外部にアクセスできます。NATは、Dockerエンジンによって自動的に設定されています。

 ホストOS上でIPアドレスの変換を行うNATの現在の設定を確認してみましょう。NATの設定状況をホストOSで確認するには、以下のようにiptablesコマンドに「-L -t nat」オプションを付与して実行します。


# iptables -L -t nat
...
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  172.17.0.0/16        anywhere
...

 上記のように、伝送されるパケットの送信元(source)アドレスが172.17.0.0/16であるもの、すなわち、docker0ブリッジに所属するコンテナから送信されるパケットは、NATによってIPアドレスが変換され、外部と通信できることが分かります。パケットのあて先(destination)は、「anywhere」となっていますが、適切なネットワークインタフェースとデフォルトゲートウェイにより、外部に通信できます。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ