Dockerコンテナのネットワーク周りについて
第三弾はDockerコンテナのネットワーク操作周りについて。
- Dockerコンテナ同士が通信するときは、Dockerネットワークを介して行う
- コンテナ起動時に明示的に指定しない場合、コンテナはデフォルトのブリッジネットワークへ接続する
操作コマンド
ネットワーク一覧を取得
$ docker network ls
ネットワークの作成
$ docker network create <NETWORK_NAME>
何も指定せずにネットワークを作成すると、ブリッジネットワークを作成する。
--driver(-d)
オプションを使うことで、「bridge」または「overlay」をネットワークドライバとして指定可能。
ネットワークへの接続・切断
# 接続 $ docker network connect <NETWORK_NAME> <CONTAINER_NAME> # 切断 $ docker network disconnect <NETWORK_NAME> <CONTAINER_NAME>
ちなみに --net
オプションを利用することで、コンテナ起動時にネットワークを指定することも可能。
ネットワークの詳細確認
$ docker network inspect
ネットワークの削除
$ docker network rm <NETWORK_NAME>
ネットワークを削除する場合は、あらかじめ削除対象のネットワークに接続しているコンテナを全て切断する必要がある。
コンテナの名前解決
デフォルトのブリッジネットワークの名前解決
Dockerのデフォルトのブリッジネットワークにコンテナを接続した場合、起動したコンテナは名前解決を行うことができない。
そのため、コンテナ生成時に --link
オプションを指定し、コンテナ内の/etc/hostsにコンテナ名と割り当てられたIPアドレスを登録しておく必要がある
ユーザ定義ネットワークの名前解決
docker network create
で作成したネットワークでは、dockerデーモンに内蔵されている内部DNSサーバによる名前解決が行われる。
内部DNSを使用すると --link
オプションのように/etc/hostsに依存することなく名前解決が可能になる。
また、コンテナ起動時に指定した --net-alias
オプションによるエイリアス名でも通信可能。