Dockerネットワーク
Dockerには、DockerEngineを起動した時に作成されるネットワークがあります。
しかし、このネットワークは制限があったり、古い機能を提供していたりと不便な点が多いです。
上記の問題を解決するには、新しくネットワークを作成する方法があるのでそちらを紹介します。
ネットワーク確認
docker network ls
コマンドを実行すると、作成されたネットワーク一覧が見れます。
下の実行結果は、DockerEngineをインストールした時に作成されるネットワークです。
# docker network ls
NETWORK ID NAME DRIVER SCOPE
fad5fce49196 bridge bridge local
d3cb99258187 host host local
a4377bf7ffba none null local
問題点
ドッカーで新しくコンテナを立ち上げる(docker runなど)際にネットワーク指定を特にしなければ、デフォルトネットワークのbridge
ネットワークに属します。
これによって下記のような問題が発生します。
- 同じネットワーク内にあるコンテナに接続するには
Link
オプションを使用しなければいけなく不便 - Linkオプションはレガシーな(古い)機能となっている
公式のドキュメントにはこう書かれています。
デフォルトのネットワーク・ブリッジ上では、Docker は自動的なサービス・ディスカバリをサポートしていません。
このデフォルト・ブリッジ・ネットワーク上でコンテナ名を使って通信をしたい場合、コンテナ間の接続にはレガシー(訳者注:古い)の docker run --link オプションを使う必要があります。
サービスディスカバリ : Docker内部DNSサーバがネットワーク上の他コンテナに対する適切な名前解決をする機能
ネットワーク作成
上記の問題点を解決するには、新しくネットワークを作る必要があります。
Dockerには2種類のネットワークが存在します。
bridge
とoverlay
です。
※上記のbridgeと、docker起動時に存在するbridgeは異なります。
種類 | 説明 |
---|---|
bridge | Docker エンジンの実行ホスト環境上に存在 単一のホスト上でのネットワーク作成 |
overlay | 複数のホスト上で動くエンジンを横断 複数のホストを横断するネットワーク |
ここでは、bridge
ネットワークの作成方法について見ていきます。
bridgeネットワーク作成
bridgeを指定するには、-d
オプションでbridgeを指定します。
-dを指定しないで作成しても、デフォルトでbridgeネットワークに属します。
$ docker network create -d bridge <任意のネットワーク名>
bridgeネットワークについて
bridge
を作成した場合。
リンク機能はサポートされません。
ですが、このネットワーク上にあるコンテナのポートは公開可能です。
bridge ネットワークの一部を外のネットワークから使う時に便利でしょう。
訳) 外からアクセスしたい場合は、ポートを公開してね。
ユーザが定義したネットワークでは、Docker 内部 DNS サーバがネットワーク上の他コンテナに対する適切な名前解決をします。 container1とcontainer2が同じネットワークに所属している場合、container1 の内部では、 container2 に対して名前で ping できるでしょう。
デフォルトの bridge ネットワーク(ドッカーを起動した時に自動的に作られるネットワーク)を使う場合は、この名前解決機能を利用できない事に注意。
リンク機能
Docker ネットワーク機能より以前は、Docker リンク機能を使いコンテナの相互発見や、特定のコンテナから別のコンテナに安全に情報を送信できました。
Docker ネットワークを導入したら、自動的にコンテナを名前で発見できます。
しかし、デフォルトの docker0 ブリッジ・ネットワークとユーザ定義ネットワークには違いがあるため、まだリンク機能を使うこともできます。
より詳しい情報については、 古いリンク機能 のデフォルト bridge ネットワークのリンク機能をご覧ください。
ユーザ定義ネットワークでリンク機能を使うには ユーザ定義ネットワークでコンテナをリンク をご覧ください。
ネットワーク関連コマンド
説明 | コマンド | 備考 |
---|---|---|
ネットワーク一覧 | docker network ls | |
ネットワーク作成 | docker network create -d bridge --subnet 172.25.0.0/16 <任意のネットワーク名> | |
立ち上げるコンテナにネットワークを指定する | docker run --net=<ネットワーク名> | |
ip固定バージョン | docker run --net=<ネットワーク名> --ip=172.25.3.3 -itd --name=container3 busybox | IPアドレスを指定することができる、これによりドッカーを再起動してもIPアドレスが固定される |
ネットワークの設定情報表示 | docker network inspect {ネットワーク名} | ネットワークにどのコンテナが属しているか一覧が表示 |
既に存在するコンテナを別のネットワークに所属させる | docker network connect <ネットワーク名> <コンテナ名> | この時コンテナは2つのネットワークに所属することに注意 |
コンテナのIP確認 | docker attach <コンテナ名> |
関連リンク
Docker ネットワーク機能の概要
マルチホストでのDocker Container間通信 第1回: Dockerネットワークの基礎