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リリース)に入るようです。