Docker network is ready for production

http://blog.docker.com/2015/11/docker-multi-host-networking-ga/

上記の翻訳です。

Multi-Host Networking is now ready for production
-----
6 月の DockerCon で Docker Networking の実験的サポートを紹介しました。
Docker 1.9 で、 Networking を production で利用可能になり、 Swarm および Compose で機能していることをお伝えできることに喜んでいます。

Networking は仮想的なネットワークを作成し、コンテナをアタッチすることで、アプリケーションに適したネットワークトポロジを作ることができる Docker Engine の機能になります。
ネットワークに接続されたコンテナは複数のホストに対しても利用でき、コンテナがどのホストに存在しているかに気を配る必要がなくなります。
どこのホストにあるかにかかわらず、シームレスにコミュニケートし、ほんとうの意味での分散アプリケーションが可能になります。

Networking はまたプラガブルに作成されており、サードパーティ製のネットワークドライバも利用でき、アプリケーションに変更を入れることなく、ネットワークを増強することができます。
[こちら](https://docs.docker.com/extend/plugins/)で最新の利用可能なプラグインを確認し、 Weave, プロジェクト Calico, VMWare, Cisco, Midoura そして Microsoft から提供されているプラグインを利用可能です。
 
## Networking vs. Links
Link 機能のシンプルさを好む人がいることは存じていますし、まだ docker0 network で link を利用しているかもしれません。
しかし、 link ではなく、新しい networking を利用してみることをおすすめします。

1. コンテナを異なる物理的/仮想的なホストを横断して接続する
2. Networking を利用しているコンテナは他のコンテナとの接続を中断させることなく容易に停止・起動・再起動ができる
3. link するコンテナを事前に立ち上げる必要がなくなる。 Networking されているコンテナは好きな順序で生成され、コンテナ名からお互いに発見することができる。

## Netwoking を利用する

それ自体または Swarm や Compose で結合されるように Networking を利用できます。
手順を簡単に見てみましょう。

### Single-Host
新しい `docker network` コマンドを利用して、初めて見ます。

`docker network create` コマンドで新しいネットワークを作成します。
この例では、 "frontend" というネットワークを生成し、 nginx コンテナを組み入れます。

```
$ docker network create frontend
$ docker run -itd --net=frontend --name web nginx
```

ネットワークをアプリケーションの分離、アプリの同一のコンポーネントの分離にさえ、利用できます。
例えば、 "app" というネットワークでウェブアプリを立ち上げていたとします。
その後に `docker network connect` コマンドを利用して Nginx コンテナからフォワーディングするようにします

```
$ docker network create app
$ docker run -itd --name myapp --net=app <my application container>
$ docker network connect app web
```

Nginx はホスト名 "myapp.app" を利用したアプリケーションに接続されるようになるはずです。

### Multi-Host Networking
[このスクリプト](https://github.com/dave-tucker/docker-network-demos/blob/master/multihost-local.sh)を利用することで、
実験的にマルチホストネットワーキングの環境をセットアップすることができます。
１つマシンを作ったあと、コンテナ内でコンサルを走らせます。これは、Engineにわたってネットワークステートを共有を可能にするために必要tお成ります。
さらに２つのマシンを生成します。次のビデオを御覧ください。

[Youtube](https://www.youtube.com/watch?v=B2wd_UigNxU)

これは便利ではありますが、お気付きの通り、各々のマシンの Docker Client を指すために `docker-machine config` を利用しなければなりません。

Swarm を利用すると、少しだけ簡単にこの作業を実現できます。
[このスクリプト](https://github.com/dave-tucker/docker-network-demos/blob/master/swarm-local.sh)を利用することで、 Machine 内に Swarm を生成できます。
セットアップはマルチホストの例で記述したものの通りになりますが、今回は、 Swarm を利用して Engine をクラスタ化します。

このビデオを御覧ください。

[Youtube](https://www.youtube.com/watch?v=MJL0ANWcxZM)

### Adding Compose to the mix
Compose は分散アプリケーションを定義するとても素晴らしい方法です。
この例では、 MongoDB で、ページの訪問者をカウントする簡単な Python のウェブアプリを利用します。
Swarm の例で説明したものと同じ環境にデプロイされます。
今回は Link ではなく Networking を利用しています。
Swarm は Swarm 内のどのホストにコンテナがあるかをスケジュールすることができます！試してみてください！

[Youtube](https://www.youtube.com/watch?v=Fi2rwjYwRAg)

## Conclusion
Docker の新しい networking はコンテナの Software Defined Networking (SDN) です。
SDN を利用することで、開発者はネットワーク運用チームを待つ必要なく、柔軟にアプリをネットワーキングすることができるようになります。

他方、ネットワーク運用チームともうまくやっていけるとも考えています。
VXLAN(マルチホストドライバを支えている技術)が4年前から利用されており、2014年8月に標準化されました。
私たちは私達自身のドライバからアプリケーションを変更することなくネットワーク運用チームが必要なドライバに入れ替える方法もまた提供しています。

新しい networking の特徴が便利であることを気づいて欲しいと思っています。
いつだって GitHub からサジェスチョンをもらえれば改善し続けます。
実験的な機能の時から試してくださった皆さんに感謝しています。
フィードバックは不可欠なものでした。

Docker Networking を初めるためには Docker Toolbox をダウンロードしてドキュメントをチェックしてください。
そして Docker engineert とのオンラインミートアップにご参加ください。
何か質問があれば、 #docker-network の IRC チャンネルに参加, フォーラムへの投稿、 StackOverflow への投稿をお願いします。