LoginSignup
18
20

More than 5 years have passed since last update.

Docker1.10に追加されたEmbedded DNS Serverを試す

Last updated at Posted at 2016-03-23

Docker1.10からユーザー定義ネットワークを使うと同じネットワーク内のコンテナのIPをコンテナ名で引けるようになりました。
https://docs.docker.com/engine/userguide/networking/configure-dns/

これを使うとコンテナ同士で連携している場合などにコンテナの差し替えがとても簡単になりそうです。
アプリケーションのデプロイもdocker rename(コンテナ名を変更する)で可能になるのではないでしょうか。

実行例

ユーザー定義ネットワークを作成する

$ docker network create --driver bridge isolated_nw

作成したネットワークを指定して通信先にするコンテナを立ち上げ

$ docker run -ti --net=isolated_nw --name=foo busybox

作成したネットワークを指定して通信元のコンテナを立ち上げて、コンテナ名を使って通信

$ docker run -ti --net=isolated_nw --name=bar busybox
$ ping foo
PING foo (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=255 time=0.050 ms
64 bytes from 172.18.0.2: seq=1 ttl=255 time=0.061 ms
64 bytes from 172.18.0.2: seq=2 ttl=255 time=0.090 ms

--- foo ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.050/0.067/0.090 ms

デフォルトネットワークのコンテナをユーザー定義ネットワークに接続する

デフォルトのブリッジ(docker0)でコンテナを起動。このままでは先ほどのユーザー定義ネットワークに参加しているコンテナから名前解決できない。

$ docker run -ti --name=hoge busybox

作成済みのユーザー定義ネットワークにコンテナを接続する

$ docker network connect isolated_nw hoge

余談

docker renameによる簡単デプロイが可能になりそうですがダウンタイムが発生しますね。
docker rename自体は高速なので一瞬だとは思いますが。
複数回のdocker renameをアトミックに行える機能とか追加されたらゼロダウンタイムのデプロイができるのにとかいう妄想が広がります。

追記
docker renameでアプリケーションサーバのデプロイをするとして、前段にNginxがいる構成の場合、NginxのDNSキャッシュがあるのでゼロダウンタイムでのデプロイが可能になるはず。

追記2
1.10.3にはIPv6絡みのバグがあって、名前解決にすごく時間がかかったりする場合があるみたいです。
その現象が発生する場合はホストマシンのIPv6を無効にするととりあえず直ります。
このバグの修正は1.11(4/11リリース)に入るようです。

18
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
20