本投稿は、「Multi-Host Docker Networking is now ready for production」の参考日本語訳です。
■ プロダクションに対応するマルチホスト Docker ネットワーク機能
6月の DockerCon では、Docker ネットワークの実験的なサポートを真っ先に紹介しました。Docker 1.9 では、ネットワーキングはプロダクションにおける利用準備が整い、Swarm と Compose とも動くことをアナウンスできるので、私達は嬉しく思います。
ネットワーキング(networking)は Docker エンジンの機能です。アプリケーションに対して仮想ネットワークを作成し、コンテナに作成したネットワーク・トポロジを取り付ける(attach)機能を持ちます。ネットワークに対応したコンテナは、複数のホストにまたがるだけではありません。どのホスト上でコンテナを実行するか、それを考える必要もありません。どこにいてもシームレスに通信できます。すなわち、本当の分散アプリケーションを実現します。
ネットワーク機能は取り外し可能(pluggable)です。そのため、アプリケーションに変更を加えずに、ネットワークにサードパーティ製のネットワーキング・ドライバを使えます。こちらに利用可能なプラグインの一覧があります。私達のパートナーである、Weave、プロジェクト Calico、VMware、Cisco、Midokura によるプラグインが利用可能なことをご確認ください。
■ ネットワーキング VS リンク
私達は何人もの利用者がリンク機能(link)のシンプルが好きだと知っていますし、「docker0」ネットワークにおいては、まだ使うことができます。しかし、ネットワーキング機能にはリンクにはできない以下のことができるので、ネットワーキング機能を試すことをお勧めします。
1. 異なった物理・仮想ホストにまたがるコンテナを相互に接続
2. コンテナはネットワーク機能を、他のコンテナとの通信を途絶せず、簡単に停止・開始・再起動
3. リンクする前にコンテナを作成しておく必用がありません。ネットワーク化されたコンテナを作成しておけば、コンテナ名を使って相互に認識できます。
■ ネットワーキングを使う
ネットワーク機能は Swarm と Compose を連携して使えます。ここでは使い方について概要を紹介します。
■ 単一ホスト
新しい「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」を使ってアプリケーションに接続できるようになります。
■ マルチホスト・ネットワーキング
こちらのスクリプトを使えば、Docker Machine を使って実験的なマルチホスト・ネットワーキング環境をセットアップできます。1つのマシンを作成し、コンテナの中で Consul を実行します。それからコンテナを実行するための2つのマシンを作成します。どのように動作するかは、次のビデオをご覧ください。
リンク:Docker Multi Host Networking Demo
このように使いやすいだけでなく、ここでは「docker-machine config」を使い、 Docker クライアントが各々のマシン環境を指定しているのに注意してください。
Swarm を使えば、更にエキサイティングになります。こちらのスクリプトで Docker Machine から Swarm を作ります。この設定もマルチホストの例ですが、今回は Swarm をエンジンに使ってクラスタ化します。
こちらの映像をご確認ください。
リンク:Docker Multi Host Networking with Docker Swarm Demo
■ Compose を使った構成
Compose は分散アプリケーションの定義に最適な方法です。次の例では、シンプルな Python ウェブアプリケーションで、誰かがページを表示すると、MongoDB 上のカウンタを毎回増やすものです。これは Swarm を使ったサンプルと同じ環境にデプロイしています。先ほどまでコンテナはリンク機能を使っていましたが、ネットワーク機能に置き換えます。Swarm を使えば、Swarm が動作するあらゆるホスト上にコンテナをスケジュールできます! 試してみましょう。
リンク:Docker Multi Host Networking with Docker Swarm and Docker Compose
■ まとめ
Docker の新しいネットワーキング機能はコンテナ向けのソフトウェア定義ネットワーク(SDN)です。SDNを使えば、開発者に対して柔軟性をもたらします。アプリケーションのネットワーク設定が必要であれば、ネットワーク運用チームに依頼するような待ち時間は必要ありません。
その一方で、これはネットワーク運用チームにとっても好意的な手法と考えています。それは VXLAN という技術です。VXLAN は私達がマルチホスト・ドライバを支える技術であり、ここまで4年間費やしてきました。これは2014年8月に標準化されているものです。これはまた、ネットワーク運用チームの必要があれば、アプリケーションに変更を加えることなく、自身でネットワーク・ドライバを入れ替えられる能力をもたらします。
私達は皆さんに対して、新しいネットワーク機能が役立つことを知っていただきたい、そう思っています。例のごとく、私達は常に改善し続けていますので、何かしら提案があれば GitHub にご連絡いただけますと幸いです。また、実験的リリースから今日に至るまで、触っていただいた全ての皆様に感謝いたします。皆さんのフィードバックは非常に貴重なものでした。
Docker ネットワーク機能を使うには、Docker Toolbox をダウンロードし、ドキュメントをご確認ください。そして、ネットワーキング担当の Docker エンジニアによるオンライン・ミートアップにもご参加ください。もし疑問があれば、Freenode の IRC チャンネル #docker-network にご参加いただくか、フォーラムに投稿いただくか、SlackOverflow に投稿願います。
—- ここまで —-
■ あわせてこちらもどうぞ
【参考訳】 Docker 1.9 発表:Swarm とマルチホスト・ネットワーキングのプロダクション対応
【参考訳】 Swarm 1.0 発表:スケールするクラスタリングがプロダクション対応
■ 原文
Multi-Host Docker Networking is now ready for production | Docker Blog
http://blog.docker.com/2015/11/docker-multi-host-networking-ga/