docker network create
読む時間の目安: 5 分
説明
ネットワークを生成します。
API 1.21 以上
このコマンドを利用するには、クライアントとデーモンの API はともに、最低でも
1.21
である必要があります。
クライアント上においてdocker version
コマンドを実行して、クライアントとデーモンの API バージョンを確認してください。
利用方法
$ docker network create [オプション] NETWORK
追加説明
新たなネットワークを生成します。
DRIVER
には、ビルトインネットワークドライバーであるbridge
かoverlay
を指定することができます。
サードパーティ製のドライバーをインストールしているか、独自のカスタムネットワークドライバーを利用する場合は、この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(分散ストア)といったキーバリューストアをサポートしています。
- クラスターがキーバリューストアとやりとりできること。
- クラスター内の各ホストにおいて Engine
daemon
が適切に設定されていること。
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 つまたは複数のネットワークを削除します。 |