docker network create

読む時間の目安: 5 分

説明

ネットワークを生成します。

API 1.21 以上  このコマンドを利用するには、クライアントとデーモンの API はともに、最低でも 1.21 である必要があります。 クライアント上においてdocker versionコマンドを実行して、クライアントとデーモンの API バージョンを確認してください。

利用方法

$ docker network create [オプション] NETWORK

追加説明

新たなネットワークを生成します。 DRIVERには、ビルトインネットワークドライバーであるbridgeoverlayを指定することができます。 サードパーティ製のドライバーをインストールしているか、独自のカスタムネットワークドライバーを利用する場合は、このDRIVERに設定します。 --driverオプションを指定しなかった場合、このコマンドがbridgeネットワークを自動的に生成します。 Docker Engine をインストールすれば、bridgeネットワークは自動生成されています。 このネットワークはdocker0ブリッジに対応するものであり、Engine が従来より利用しているものです。 docker runによって新たなコンテナーを起動すると、自動的にこのブリッジネットワークに接続されます。 このデフォルトのブリッジネットワークは、削除することはできません。 新たなネットワークはnetwork createコマンドを使って生成することができます。

$ docker network create -d bridge my-bridge-network

ブリッジネットワークは、インストールされている 1 つの Engine 上において、分離されているネットワークです。 複数の Engine 上において稼動している複数の Docker ホストにわたるようなネットワークを生成するのであれば、overlayネットワークを生成する必要があります。 bridgeネットワークの場合とは違って overlay ネットワークの場合、生成に必要となる前提条件があります。 以下がその条件です。

  • キーバリューストアにアクセスできること。 Engine では Consul、Etcd、ZooKeeper(分散ストア)といったキーバリューストアをサポートしています。
  • クラスターがキーバリューストアとやりとりできること。
  • クラスター内の各ホストにおいて Enginedaemonが適切に設定されていること。

overlayネットワークをサポートするdockerdのオプションは以下のものです。

  • --cluster-store
  • --cluster-store-opt
  • --cluster-advertise

このオプションの設定方法については 複数ホストによるネットワークをはじめよう を参照してください。

必須の作業ではありませんが、クラスターによるネットワーク管理を実現する Docker Swarm をインストールしてみるのも良いでしょう。 Swarm は高度なサービスディスカバリー機能やサーバー管理ツールを提供するため、開発を手助けしてくれます。

overlayネットワークの前提条件を整えられたら、クラスター内の Docker ホスト上から、以下のコマンドを実行してネットワークを生成します。

$ docker network create -d overlay my-multihost-network

ネットワーク名はユニークでなければなりません。 Docker デーモンは名前の衝突がないかどうかの検出を試みますが、この処理は保証されていません。 ネットワーク名に衝突がないようにするのは、ユーザーの責任です。

overlay ネットワークの制約

overlay ネットワークは/24ブロック(これがデフォルト)のネットワークとして生成する必要があります。 デフォルトの VIP ベースのエンドポイントモードにおいてネットワークを生成する限り、利用可能な IP アドレスは 256 個までという制限が発生します。 この推奨事項に関しては limitations with swarm mode(Swarm モードにおける制約) に述べられています。 IP アドレスを 256 個より多く必要とする場合、ブロックサイズを増やすことはやめてください。 その場合は、外部ロードバランサーによりdnsrrエンドポイントモードを利用するか、あるいは、より小さな overlay ネットワークを複数利用するようにします。 さまざまなエンドポイントモードに関する詳細は サービスディスカバリーの設定 を参照してください。

本コマンドの利用例については、以下に示す 利用例の節 を参照してください。

オプション

名前/省略形 デフォルト 説明
--attachable API 1.25 以上
手動によるコンテナーのアタッチを有効にします。
--aux-address ネットワークドライバーが利用する IPv4 または IPv6 による補助アドレス。
--config-from API 1.30 以上
設定のコピー元とするネットワーク。
--config-only API 1.30 以上
ネットワークについてのみ設定を生成します。
--driver , -d bridge ネットワークを管理するドライバー。
--gateway マスターサブネット用の IPv4 または IPv6 ゲートウェイ。
--ingress API 1.29 以上
Swarm のルーティングメッシュネットワークを生成します。
--internal ネットワークへの外部アクセスを制限します。
--ip-range IP の部分的な範囲からコンテナー IP を割り当てます。
--ipam-driver IP アドレス管理ドライバー。
--ipam-opt IPAM ドライバーの特定オプションを設定します。
--ipv6 IPv6 ネットワークを有効にします。
--label ネットワークに対してメタデータを設定します。
--opt , -o ドライバー固有のオプションを設定します。
--scope API 1.30 以上
ネットワークのスコープを制御します。
--subnet ネットワークセグメントを表わす CIDR 形式によるサブネット。

利用例

コンテナーの接続

コンテナーを起動する際には--networkフラグを使ってネットワークに接続します。 以下の例はbusyboxコンテナーをmynetネットワークに接続します。

$ docker run -itd --network=mynet busybox

コンテナー起動後に、そのコンテナーをネットワークに加える場合は、サブコマンドdocker network connectを使います。

ネットワークに接続されると、コンテナー間のやりとりは、コンテナーの IP アドレスまたはコンテナー名を使って行われます。 overlayネットワークやカスタムプラグインを使ったマルチホスト接続に対応している場合、コンテナーがマルチホスト対応ネットワークに接続し、かつ異なる Engine から起動されたものであっても、そのようなやりとりを通じてコンテナー間の通信が可能です。

ネットワークからコンテナーを切断するにはdocker network disconnectコマンドを使います。

高度なオプションの設定

ネットワーク生成時に Engine は、デフォルトではサブネットワークが重複しないようにします。 このサブネットワークは、既存のネットワークを分割したものではありません。 純粋に IP アドレスの利用のためにあります。 このデフォルト設定はオーバーライドすることが可能であり、サブネットワークの値を直接--subnetオプションに指定します。 bridgeネットワークにおいては、単一のサブネットしか生成することはできません。

$ docker network create --driver=bridge --subnet=192.168.0.0/16 br0

また--gateway--ip-range--aux-addressといったオプションを指定することもできます。

$ docker network create \
  --driver=bridge \
  --subnet=172.28.0.0/16 \
  --ip-range=172.28.5.0/24 \
  --gateway=172.28.5.254 \
  br0

--gatewayフラグを省略すると、Engine は適切なアドレスプールからアドレスを選び出します。 overlayネットワークやネットワークドライバープラグインでは、複数のサブネットワークを生成することができます。 以下の例では 2 つの/25サブネットマスクを利用して、単一の overlay ネットワーク内において IP アドレスが 256 個以上にならないように、現在のガイダンスに従っているものです。 各サブネットワークでは 126 個のアドレスが利用可能です。

$ docker network create -d overlay \
  --subnet=192.168.10.0/25 \
  --subnet=192.168.20.0/25 \
  --gateway=192.168.10.100 \
  --gateway=192.168.20.100 \
  --aux-address="my-router=192.168.10.5" --aux-address="my-switch=192.168.10.6" \
  --aux-address="my-printer=192.168.20.5" --aux-address="my-nas=192.168.20.6" \
  my-multihost-network

サブネットワークは重複しないように注意してください。 重複してしまうとネットワーク生成に失敗し、Engine がエラーを返します。

ブリッジドライバーオプション

カスタムネットワークを生成すると、デフォルトのネットワークドライバー(つまり bridge)には、指定可能なオプションが追加されます。 以下に示すのがその追加オプションであり、docker0 ブリッジに対して用いられる同等の Docker デーモンフラグを合わせて示します。

オプション 同等の指定 内容説明
com.docker.network.bridge.name - Linux ブリッジの生成時に利用されるブリッジ名。
com.docker.network.bridge.enable_ip_masquerade --ip-masq IP マスカレードを有効にします。
com.docker.network.bridge.enable_icc --icc コンテナー間の接続(Inter Container Connectivity)を有効あるいは無効にします。
com.docker.network.bridge.host_binding_ipv4 --ip コンテナーポートのバインディング時におけるデフォルトの IP。
com.docker.network.driver.mtu --mtu コンテナーにネットワーク MTU を設定します。
com.docker.network.container_iface_prefix - コンテナーのインターフェースにカスタムプリフィックスを設定します。

以下に示すのはdocker network createに指定できる引数であり、どのネットワークドライバーに対しても用いることができます。 ここでは上と同じようにdocker daemonに対する同等の指定を示します。

引数 同等の指定 内容説明
--gateway - マスターサブネットに対する IPv4 または IPv6 のゲートウェイ。
--ip-range --fixed-cidr 指定範囲から IP を割り当てます。
--internal - ネットワークへの外部アクセスを制限します。
--ipv6 --ipv6 IPv6 ネットワークを有効にします。
--subnet --bip ネットワークのサブネット。

たとえばポート公開のために割り当てる IP アドレスを指定するには-oまたは--optオプションを使ってください。

$ docker network create \
    -o "com.docker.network.bridge.host_binding_ipv4"="172.19.0.1" \
    simple-network

ネットワーク内部モード

コンテナーをoverlayネットワークに接続する際に、デフォルトで Docker は外部接続を可能にするために bridge ネットワークにも接続します。 外部とは切り離されたoverlayネットワークを生成したい場合は、--internalオプションを指定します。

ingress モード

Swarm クラスター内においてルーティングメッシュを提供するためのネットワークを生成することができます。 これを行うにはネットワーク生成時に--ingressを指定します。 一度に生成できる ingress ネットワークはただ一つです。 ネットワークは、どのサービスもそのネットワークに依存していない場合に限って削除することができます。 overlay ネットワークの生成時に利用可能なオプションは、同じく ingress ネットワーク生成時にも利用可能です。 ただし--attachableオプションは ingress ネットワークでは利用できません。

$ docker network create -d overlay \
  --subnet=10.11.0.0/16 \
  --ingress \
  --opt com.docker.network.driver.mtu=9216 \
  --opt encrypted=true \
  my-ingress-network

上位コマンド

コマンド 説明
docker network ネットワークを管理します。
コマンド 説明
docker network connect コンテナーをネットワークに接続します。
docker network create ネットワークを生成します。
docker network disconnect ネットワークからコンテナーを切断します。
docker network inspect 1 つまたは複数ネットワークの詳細情報を表示します。
docker network ls ネットワークを一覧表示します。
docker network prune 未使用のネットワークをすべて削除します。
docker network rm 1 つまたは複数のネットワークを削除します。