docker network create

内容説明ネットワークを生成します。
利用方法docker network create [OPTIONS] NETWORK

内容説明

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

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

ブリッジネットワークは、インストールされている 1 つの Docker Engine 上において分離されているネットワークです。 複数の Docker Engine 上において稼動している複数の Docker ホストにわたるようなネットワークを生成したいのであれば、swarm モードを有効にして overlay ネットワークを生成することが必要です。 swarm モードにおいてオーバーレイネットワークを利用する詳細については "オーバーレイネットワークの利用" を参照してください。

swarm モードを有効化したら swarm 内でのオーバーレイネットワークを生成します。

$ docker network create --scope=swarm --attachable -d overlay my-multihost-network

By default, swarm-scoped networks do not allow manually started containers to be attached. This restriction is added to prevent someone that has access to a non-manager node in the swarm cluster from running a container that is able to access the network stack of a swarm service.

The --attachable option used in the example above disables this restriction, and allows for both swarm services and manually started containers to attach to the overlay network.

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

オーバーレイネットワークの制約

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

オプション

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

利用例

コンテナーの接続

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

$ docker run -itd --network=mynet busybox

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

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

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

高度なオプションの設定

ネットワーク生成時に Docker 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 フラグを省略すると、Docker Engine は適切なアドレスプールからアドレスを選び出します。 overlay ネットワークやネットワークドライバープラグインでは、複数のサブネットワークを生成することができます。 以下の例では 2 つの /25 サブネットマスクを利用して、単一のオーバーレイネットワーク内において 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

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

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

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

オプション同等の指定内容説明
com.docker.network.bridge.name-Bridge name to be used when creating the Linux bridge
com.docker.network.bridge.enable_ip_masquerade--ip-masqEnable IP masquerading
com.docker.network.bridge.enable_icc--iccEnable or Disable Inter Container Connectivity
com.docker.network.bridge.host_binding_ipv4--ipDefault IP when binding container ports
com.docker.network.driver.mtu--mtuSet the containers network MTU
com.docker.network.container_iface_prefix-Set a custom prefix for container interfaces

The following arguments can be passed to docker network create for any network driver, again with their approximate equivalents to Docker daemon flags used for the docker0 bridge:

引数同等の指定内容説明
--gateway-IPv4 or IPv6 Gateway for the master subnet
--ip-range--fixed-cidrAllocate IPs from a range
--internal-Restrict external access to the network
--ipv6--ipv6Enable or disable IPv6 networking
--subnet--bipSubnet for network

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

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

ネットワーク内部モード (--internal)

Containers on an internal network may communicate between each other, but not with any other network, as no default route is configured and firewall rules are set up to drop all traffic to or from other networks. Communication with the gateway IP address (and thus appropriately configured host services) is possible, and the host may communicate with any container IP directly.

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

ネットワーク ingress モード (--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

Run services on predefined networks

You can create services on the predefined Docker networks bridge and host.

$ docker service create --name my-service \
  --network host \
  --replicas 2 \
  busybox top

Swarm networks with local scope drivers

You can create a swarm network with local scope network drivers. You do so by promoting the network scope to swarm during the creation of the network. You will then be able to use this network when creating services.

$ docker network create -d bridge \
  --scope swarm \
  --attachable \
  swarm-network

For network drivers which provide connectivity across hosts (ex. macvlan), if node specific configurations are needed in order to plumb the network on each host, you will supply that configuration via a configuration only network. When you create the swarm scoped network, you will then specify the name of the network which contains the configuration.

node1$ docker network create --config-only --subnet 192.168.100.0/24 --gateway 192.168.100.115 mv-config
node2$ docker network create --config-only --subnet 192.168.200.0/24 --gateway 192.168.200.202 mv-config
node1$ docker network create -d macvlan --scope swarm --config-from mv-config --attachable swarm-network