OpenStackディストリビューション「RDO」を用いて、実際に動作するOpenStack環境を構築しながら、OpenStackの利用方法や内部構造を学ぶ特集の第8回です。今回は、OpenStackとDockerを組み合わせて、仮想マシンインスタンスの作成からアプリケーションの実行までをまとめて自動化する方法を紹介します。
「基礎編」第4回では、1台の仮想マシンインスタンス上でDockerを利用しましたが、ここでは、複数の仮想マシンインスタンスが連携する環境を構築します。OpenStackによって仮想マシンインスタンスの作成そのものは自動化されていますが、アプリケーション環境が複雑になると、手作業での環境構築には時間がかかります。
そこで、自動化ツールのAnsibleを利用して、一連の作業を自動化していきます。Ansibleには、OpenStackやDockerを操作するモジュールが用意されているので、HorizonダッシュボードでのGUI操作やdockerコマンドによる操作手順をそのままの形で自動化していくことが可能になります。
構築環境の全体像
初めに、構築する環境の全体像を説明しておきます。図1のように、2つの仮想マシンインスタンスを用意して、それぞれ、MySQLとEtherpad-LiteをDockerで起動します。Etherpad-Liteは、Webブラウザーでテキストの共同編集を行うWebアプリケーションで、「基礎編」第4回で使用したものと同じです。これは、Node.jsによるアプリケーションですが、バックエンドのデータベースとして、MySQLを使用します。
そして、MySQLを実行する仮想マシンインスタンスでは、データ保存領域として、Cinderのブロックボリュームを接続しています。このボリュームは、ゲストOS上でディレクトリー「/data」にマウントした上で、Dockerの機能を用いて、コンテナ内部の「/var/lib/mysql」にマッピングされます。これにより、コンテナ内部のMySQLが「/var/lib/mysql」に作成したデータベースファイルは、Cinderのブロックボリュームに保存されます。コンテナ、あるいは、仮想マシンインスタンスを停止・破棄してもデータベースの内容を失わないための構成になります。
それでは、このような環境を構築する場合、どのような手順が必要になるでしょうか。Dockerをインストール済みのテンプレートイメージが用意されており、MySQLとEtherpad-Liteのイメージも事前にDocker Hubに登録されているとした場合でも、次のような手順が必要です。
- OpenStackのテナント環境の準備(公開鍵の登録とセキュリティグループの作成)
- 仮想マシンインスタンスの起動とフローティングIPの割り当て
- ブロックボリュームの作成と仮想マシンインスタンスへの接続
- ブロックボリュームのフォーマットとマウント
- Dockerによるアプリケーションの起動
さらにそれぞれの手順では、環境に応じたパラメーター設定なども必要です。このような作業を自動化するのがAnsibleの役割です。