本記事はDocker ver24.0.7の環境で確認しています。
このコマンドは、コンテナをDockerネットワークに接続する際に使用します。
コンテナをDockerネットワークに接続する方法は、接続するネットワークをコンテナ起動時に指定する方法と、docker network connectコマンドを使用する方法の2つあります。
コンテナ起動時に指定する方法では、1つのネットワークしか指定できませんが、docker network connectを使用することで、コンテナを複数のネットワークに接続させることが可能になります。
dockerネットワークに関しましては、別記事「Dockerネットワークの概要とその作り方の解説」をご参照ください。
docker network connectコマンドのフォーマットとオプション
フォーマット
docker network connect [オプション] ネットワーク コンテナ
主なオプション一覧
オプション | 概説 |
---|---|
--alias=[] | 対象のネットワーク内で使用可能なコンテナ用の エイリアスを追加する |
--ip | 接続するコンテナのIPアドレス(v4)を指定する |
--ip6 | 接続するコンテナのIPアドレス(v6)を指定する |
コマンド例
$ docker network connect testnet1 testvm
docker network connectコマンドの主な使い方
以下で実例をまじえたコマンドの使い方を解説していきたいと思います。
基本事項の解説
docker network connectコマンドは、コンテナを指定したDockerネットワークに接続することができます。
Dockerネットワークに接続したコンテナのIPアドレスは、デフォルトではDockerが自動付与しますが、オプションで指定することもできます。
コンテナを指定したDockerネットワークに接続する
まず、テスト用のコンテナtestvmを作成して起動します。
$ docker run -d --name testvm centos init
docker inspectコマンドにて「Networks」の設定内容を確認してみましょう。
$ docker inspect testvm
「Networks」の部分は以下のようになっています。
(省略)
"Networks": {
"bridge": {
(省略)
これは、testvmはbridgeという名前のネットワークに接続していることを表しています。Dockerコンテナ起動時にネットワークを指定しなかった場合は、デフォルトでbridgeネットワークに接続されます。
docker runコマンドにてネットワークの指定を行わずにコンテナを起動しましたので、仕様どおりの動きですね。
コンテナtestvmを接続するもうひとつのDockerネットワークtestnet1を作成します。
$ docker network create -d bridge testnet1
ネットワークtestnet1にコンテナtestvmをdocker network connectコマンドで接続します。
$ docker network connect testnet1 testvm
再度docker inspectコマンドにて、コンテナtestvmの「Networks」の設定内容を確認してみましょう。
$ docker inspect testvm
「Networks」の部分は以下のようになりました。
(省略)
"Networks": {
"bridge": {
(省略)
},
"testnet1": {
(省略)
先ほどはネットワークbridgeしか表示されてなかったのですが、今回はネットワークtestnet1が追加されています。
docker network connectコマンドでコンテナtestvmがネットワークtestnet1に接続されたことが確認できました。
ネットワークに接続する際にコンテナのIPアドレスを指定する
まず、前項で作成したネットワークtestnet1に接続したコンテナtestvmのIPアドレスを確認します。
docker inspectコマンドでtestvmの情報を確認してみましょう。
$ docker inspect testvm
「Networks」の「IPAddress」部分のみ確認します。
"Networks": {
"bridge": {
(省略)
"IPAddress": "172.17.0.2",
(省略)
"testnet1": {
(省略)
"IPAddress": "172.20.0.2",
(省略)
ネットワークbridgeでは「172.17.0.2」、ネットワークtestnet1では「172.20.0.2」であることがわかりました。
※付与されるIPアドレスは環境によって異なります
Dockerネットワークでは、ネットワーク毎に使用可能なアドレス帯やコンテナのIPアドレスが自動的に割り当てられます。これはDHCP機能ではなく、Docker独自の仕組みです。
基本的に、IPアドレスに関しましてはDockerに任せておけば重複などの心配は無いのですが、場合によっては自分で指定したい場合もあると思います。
例えば、WebサーバとDBサーバで構成されたシステムで、お互いのIPアドレスを設定しなければいけないような場合です。
Dockerネットワークで、自分でIPアドレスを決めたい場合は、まずネットワークを作成する際に、そのネットワークのサブネットを自分で指定して作成する必要があります。
以下のコマンドで新しいネットワークtestnet2を作成します。作成する際にtestnet2のサブネットは「172.20.0.0/24」を指定することにします。
$ docker network create --subnet 172.24.0.0/24 testnet2
このネットワークtestnet2にコンテナtestvmを接続してみます。IPアドレスは「172.24.0.77」を指定します。
$ docker network connect --ip 172.24.0.77 testnet2 testvm
docker inspectコマンドでtestvmの情報を確認してみましょう。
$ docker inspect testvm
「Networks」の「IPAddress」部分のみ確認します。
"Networks": {
"bridge": {
(省略)
"IPAddress": "172.17.0.2",
(省略)
"testnet1": {
(省略)
"IPAddress": "172.20.0.2",
(省略)
"testnet2": {
(省略)
"IPAddress": "172.24.0.77",
(省略)
}
(省略)
ネットワークtestnet2上では、コンテナtestvmのIPアドレスは「172.24.0.77」に設定されていることが確認できました。
IPv6を使用する場合は、「--ip6」オプションを使用します。
ネットワークに接続する際にコンテナのエイリアス名(別名)を指定する
コンテナをDockerネットワークに接続する際に、コンテナにエイリアス名を設定することができます。
エイリアスのテストを行うためにコンテナtestvm2を起動します。
$ docker run -d --name testvm2 centos init
このコンテナを前項で作成したネットワークtestnet2に接続してみましょう。接続する際に、betsumeiというエイリアス名を設定します。
$ docker network connect --alias betsumei testnet2 testvm2
前項で使用したコンテナtestvmからbetsumeiに対してpingを飛ばしてみます。
$ docker exec -it testvm ping betsumei
PING betsumei (172.20.0.2) 56(84) bytes of data.
64 bytes from testvm2.testnet2 (172.20.0.2): icmp_seq=1 ttl=64 time=0.065 ms
64 bytes from testvm2.testnet2 (172.20.0.2): icmp_seq=2 ttl=64 time=0.055 ms
^C
--- betsumei ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1028ms
rtt min/avg/max/mdev = 0.055/0.060/0.065/0.005 ms
testvm2のエイリアス名betsumeiからpingの応答がありました。
pingの出力を止めるには「Ctrl + c」を押します。
念のためtestvm2に対してもpingを飛ばしてみます。
$ docker exec -it testvm ping testvm2
PING testvm2 (172.20.0.2) 56(84) bytes of data.
64 bytes from testvm2.testnet2 (172.20.0.2): icmp_seq=1 ttl=64 time=0.046 ms
64 bytes from testvm2.testnet2 (172.20.0.2): icmp_seq=2 ttl=64 time=0.054 ms
^C
--- testvm2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1021ms
rtt min/avg/max/mdev = 0.046/0.050/0.054/0.004 ms
testvm2からもpingの応答がありました。testvm2とbetsumeiのIPアドレスも同じですね。
おわりに
以上でdocker network connectコマンドの紹介を終わります。
ご指摘、ご要望などが御座いましたらコメントいただけるとうれしいです。
他のDockerコマンドの実例付紹介記事は、本サイト内の別記事「Dockerのコマンドの一覧(オリジナルな実例付き)」をご参照ください。
ご訪問ありがとうございました。
コメント