1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Dockerネットワーク

Posted at

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種類のネットワークが存在します。
bridgeoverlayです。

※上記の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ネットワークの基礎

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?