自分でブリッジを作成

このセクションでは、Docker のデフォルト・ブリッジを自分自身で構築したブリッジに置き換える方法を説明します。bridge という名称の bridge ネットワークは、Docker インストール時に自動的に作成されるものです。

注釈

Docker ネットワーク機能 を使えば、デフォルト・ブリッジ・ネットワークに加え、自分で定義したネットワークも作成できます。

自分自身のブリッジをセットアップするには、Docker を起動する前に Docker に対して -b BRIDGE--bridge=BRIDGE を使い、替わりのブリッジを指定します。既に Docker を起動している場合は、既にデフォルトの docker0 で実行されていますが、自分でブリッジを作成できます。必要があれば、サービスを停止してインターフェースの削除も可能です。

# Docker を停止し、docker0 の削除

$ sudo service docker stop
$ sudo ip link set dev docker0 down
$ sudo brctl delbr docker0
$ sudo iptables -t nat -F POSTROUTING

それから、Docker サービスを開始する前に、自分自身のブリッジを作成し、必要な設定を行います。ここではシンプルながら十分なブリッジを作成します。これまでのセクションで用いてきた docker0 をカスタマイズするだけですが、技術を説明するには十分なものです。

# 自分自身でブリッジを作成

$ sudo brctl addbr bridge0
$ sudo ip addr add 192.168.5.1/24 dev bridge0
$ sudo ip link set dev bridge0 up

# ブリッジが起動し、実行中なことを確認

$ ip addr show bridge0
4: bridge0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state UP group default
    inet 192.168.5.1/24 scope global bridge0
       valid_lft forever preferred_lft forever

# Docker にこの情報を登録し、再起動(Ubuntuの場合)

$ echo 'DOCKER_OPTS="-b=bridge0"' >> /etc/default/docker
$ sudo service docker start

# 新しく外側への NAT マスカレードが作成されたことを確認

$ sudo iptables -t nat -L -n
...
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  192.168.5.0/24      0.0.0.0/0

この結果、Docker サーバの起動は成功し、コンテナに対して新しいブリッジが割り当てられているでしょう。ブリッジの設定を確認した後、コンテナを作成してみます。Docker は新しい IP アドレスの範囲を自動的に検出し、IP アドレスが割り当てられているのが分かるでしょう。

brctl show コマンドを使うと、コンテナの開始・停止時に Docker がブリッジを追加・削除してるのがわかります。そして、コンテナの中で ip addrip route を実行すると、IP アドレスがブリッジの IP アドレス範囲内にあることがわかります。そして他のインターネットへのデフォルト・ゲートウェイとして、Docker ホストの IP アドレスをブリッジするのに使われます。