Posted at

docker network ブリッジコマンドまとめ(1.11.0)

More than 3 years have passed since last update.

以下URLが非常にわかりやすいです。

http://docs.docker.jp/engine/userguide/networking/dockernetworks.html

コマンド実行例に従ってやっていけばDockerのネットワークについてはある程度理解が深まるかと。

Dockerではデフォルトネットワーク(docker0)があるのですがデフォルトネットワークではサブネットが固定(172.17.0.0/16)されておりコンテナ間のネットワークについても--linkオプションが必要となるため使い勝手がよくありません。

そのためDocker networkコマンドにて新規にブリッジネットワークを作成しコンテナを割り当てたほうが管理しやすいです。

新規に作成したブリッジネットワークではコンテナ間の名前解決を含んだ通信が可能です。

以下、コマンドまとめました

Dockerネットワーク一覧の表示

docker network ls

Dockerのブリッジネットワークの詳細を表示

docker network inspect bridge

ブリッジネットワークを作成

docker network create --driver bridge [ブリッジ名]

 サブネット、ゲートウェイを指定できます。

docker network create -d bridge --subnet 192.168.99.0/16 --gateway 192.168.99.254 [ブリッジ名]

コンテナ起動時にブリッジを割り当て

docker run --net=[ブリッジ名] -it --name=[コンテナ名] ubuntu

 コンテナに固定IPアドレスを指定できます。(ブリッジで定義したサブネットの範囲で)

docker run --net=[ブリッジ名] --ip=192.168.99.99 -it --name=[コンテナ名] ubuntu

起動中のコンテナにブリッジを追加(docker0ブリッジは残ったまま)

docker network connect [ブリッジ名] [コンテナ名]

 コンテナに固定IPアドレスを指定できます。(ブリッジで定義したサブネットの範囲で)

docker network connect --ip=192.168.99.99 [ブリッジ名] [コンテナ名]

起動中のコンテナのDockerのブリッジネットワークの詳細を表示

docker network inspect bridge [ブリッジ名]

--linkオプションを使用することで--linkを使用したコンテナ間のみで名前解決による通信が可能になります。

(下記ではtest1の別名でt1を指定。test1とtest2コンテナ間の名前解決を行える)

docker run --net=[ブリッジ名] -itd --name=test1 --link test2:t2 busybox

docker run --net=[ブリッジ名] -itd --name=test2 --link test1:t1 busybox

ブリッジを削除する場合はコンテナの割り当てを解除する必要があります。

docker network disconnect [ブリッジ名] [コンテナ名]

docker network rm [ブリッジ名]

勉強になりました。