うさぎ好きエンジニアの備忘録

うさぎたちに日々癒されているエンジニアが業務で直面したもの & 個人的な学習メモを残していきます。

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 オプションによるエイリアス名でも通信可能。