第31回 Docker Swarmクラスタのオーバレイネットワークを構築する方法古賀政純の「攻めのITのためのDocker塾」(7/7 ページ)

» 2016年11月02日 08時00分 公開
前のページへ 1|2|3|4|5|6|7       

物理サーバをまたいでコンテナ同士を通信させる

 以上で、ワーカノードn0122上でWebサーバ入りのコンテナが稼働し、n0123にCentOS 7.2のコンテナが稼働しました。n0123上で稼働しているCentOS 7.2のコンテナから、Webサーバ入りのコンテナにアクセスできるかを確認してみましょう。この際、ワーカノードn0122上で稼働するWebサーバ入りのコンテナにアクセスしますが、このコンテナのIPアドレスを知るにはどうすればよいのでしょうか。

 Dockerにおいては、コンテナ上にipコマンドやifconfigコマンドをインストールすることで、コンテナのIPアドレスを知ることができますが、以下のように「docker inspect」を使えば、これらのコマンドをインストールすることなく、ホストOSから確認することもできます。以下の例では、n0122上で稼働するWebサーバ入りのDockerコンテナ「test01.1.bxaueu6be9a3itjkk13ekd2hg」のIPアドレスを表示します。


n0122 # docker inspect \
--format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' \
test01.1.bxaueu6be9a3itjkk13ekd2hg
172.19.0.3 ←Webサーバ入りのコンテナのIPアドレス

 同様に、ワーカノードn0123で稼働するCentOS 7.2のコンテナのIPアドレスも確認してみましょう。


n0123 # docker inspect \
--format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' \
test02.1.9s9m5j6dkweqrufb12wany6tt
172.19.0.5 ←CentOS 7.2のコンテナのIPアドレス

 上記の結果より、Webサーバ入りのDockerコンテナには、172.19.0.3が付与されており、CentOS 7.2のコンテナには、172.19.0.5が付与されていることが分かります。このコンテナ間の通信可否を確認するため、ワーカノードn0123で稼働するCentOS 7.2のコンテナのコマンドラインにログインします。


n0123 # docker exec -it test02.1.9s9m5j6dkweqrufb12wany6tt /bin/bash
[root@56dfaa68f9b4 /]#

 ワーカノードn0123で稼働するコンテナのコマンドラインから、ワーカノードn0122で稼働するWebサーバのコンテナのIPアドレス「172.19.0.3」に対してHTTP接続し、Webコンテンツが表示されるかを確認します。


[root@56dfaa68f9b4 /]# curl http://172.19.0.3
...
  <pre>
  ____                            _         _       _   _
 / ___|___  _ __   __ _ _ __ __ _| |_ _   _| | __ _| |_(_) ___  _ __  ___
| |   / _ \| '_ \ / _` | '__/ _` | __| | | | |/ _` | __| |/ _ \| '_ \/ __|
| |__| (_) | | | | (_| | | | (_| | |_| |_| | | (_| | |_| | (_) | | | \__ \
 \____\___/|_| |_|\__, |_|  \__,_|\__|\__,_|_|\__,_|\__|_|\___/|_| |_|___/
                  |___/
  </pre>
...

 Dockerイメージ「larsks/thttpd」は、上記のようなテスト用のWebコンテンツが用意されていますので、ワーカノードn0123のコンテナからcurlコマンドで上記のように表示が得られれば、物理サーバをまたいだ複数コンテナの通信は成功です。

 今回は、Swarmによる複数の物理サーバ間で稼働するDockerコンテナの通信を簡単に紹介しました。Docker 1.12からDocker Swarm導入のハードルが格段に下がり、簡単にクラスタを構築できるようになりました。Swarmクラスタは、複数の物理サーバ間でのコンテナの通信以外にも、サービスの複製(レプリカ)や、サービスの障害発生時の自動再起動(自動的に別のワーカノードでサービスを起動)、Dockerイメージの最新版への差し替えによるサービスの更新など、魅力的な機能が存在します。

 ぜひ複数の物理サーバで構成されるSwarmクラスタを構築し、コンテナ間のネットワーク通信だけでなく、外部の負荷分散ソフトウェアとの連係、可用性、サービスのスケーラビリティなどを調べてみてください。

古賀政純(こが・まさずみ)

日本ヒューレット・パッカード株式会社 オープンソース・Linuxテクノロジーエバンジェリスト。兵庫県伊丹市出身。1996年頃からオープンソースに携わる。2000年よりUNIXサーバーのSE及びスーパーコンピューターの並列計算プログラミング講師、SIを経験。2006年、米国ヒューレット・パッカードからLinux技術の伝道師として「OpenSource and Linux Ambassador Hall of Fame」を2年連続受賞。プリセールスMVPを4度受賞。現在は日本ヒューレット・パッカードにて、Hadoop、Spark、Docker、Linux、FreeBSDなどのサーバー基盤のプリセールスSE、文書執筆を担当。日本ヒューレット・パッカードが認定するオープンソース・Linux テクノロジーエバンジェリストとして、メディアでの連載記事執筆、講演活動なども行っている。Red Hat Certified Virtualization Administrator, Novell Certified Linux Professional, Red Hat Certified System Administrator in Red Hat OpenStack, Cloudera Certified Administrator for Apache Hadoopなどの技術者認定資格を保有。著書に「OpenStack 実践ガイド」「Docker 実践ガイド」「CentOS 7実践ガイド」「Ubuntu Server実践入門」などがある。趣味はレーシングカートとビリヤード。古賀氏の最新記事が読めるブログはこちら


前のページへ 1|2|3|4|5|6|7       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ