docker network create
内容説明 | ネットワークを生成します。 |
---|---|
利用方法 | docker network create [OPTIONS] NETWORK |
内容説明
新たなネットワークを生成します。
DRIVER
にはビルトインネットワークドライバーである bridge
か overlay
を指定します。
サードパーティ製のドライバーをインストールしているか、独自のカスタムネットワークドライバーを利用する場合は、この 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 ネットワークを複数利用するようにします。
さまざまなエンドポイントモードに関する詳細は
サービスディスカバリーの設定 を参照してください。
オプション
オプション | デフォルト | 内容説明 |
---|---|---|
--attachable | API 1.25 以上 手動によるコンテナーのアタッチを有効にします。 | |
--aux-address | ネットワークドライバーが利用する IPv4 または IPv6 による補助アドレス。 | |
--config-from | API 1.30 以上 設定のコピー元とするネットワーク。 | |
--config-only | API 1.30 以上 ネットワークについてのみ設定を生成します。 | |
-d, --driver | bridge | ネットワークを管理するドライバー。 |
--gateway | マスターサブネット用の IPv4 または IPv6 ゲートウェイ。 | |
--ingress | API 1.29 以上 Swarm のルーティングメッシュネットワークを生成します。 | |
--internal | ネットワークへの外部アクセスを制限します。 | |
--ip-range | IP の部分的な範囲からコンテナー IP を割り当てます。 | |
--ipam-driver | IP アドレス管理ドライバー。 | |
--ipam-opt | IPAM ドライバーの特定オプションを設定します。 | |
--ipv6 | IPv6 ネットワークを有効または無効にします。 | |
--label | ネットワークに対してメタデータを設定します。 | |
-o, --opt | ドライバー固有のオプションを設定します。 | |
--scope | API 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-masq | Enable IP masquerading |
com.docker.network.bridge.enable_icc | --icc | Enable or Disable Inter Container Connectivity |
com.docker.network.bridge.host_binding_ipv4 | --ip | Default IP when binding container ports |
com.docker.network.driver.mtu | --mtu | Set 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-cidr | Allocate IPs from a range |
--internal | - | Restrict external access to the network |
--ipv6 | --ipv6 | Enable or disable IPv6 networking |
--subnet | --bip | Subnet 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