CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
少し遅くなりましたが、本コラムを愛読いただいている皆様、新年あけましておめでとうございます。今年もまた、クラウドに関連したオープンソースの話題をお届けしていきます。今回は、前回に引き続いて、「OpenStack/Docker/Ansibleハンズオン」の内容を紹介していきたいと思います。
前回は、OpenStackとDockerを組み合わせた活用法として、OpenStackで用意した仮想マシンインスタンスに、Dockerイメージでアプリケーションを配信するという方法を紹介しました。あわせて、Dockerが稼働する仮想マシンインスタンスのテンプレートイメージ作成方法も解説しました。今回は、これを利用して、実際に動作するアプリケーションを配信してみましょう。
ここでは、Etherpad-Liteのアプリケーションイメージを配信します。Webブラウザー上でテキストを共同編集するツール「Etherpad」の簡易版です。図1のように、node.jsのWebアプリケーションとMySQLデータベースが連携する構成となります。
図1 Etherpad-Liteのアプリケーション構成
ここで、node.jsのコンテナとMySQLのコンテナを別々の仮想マシンインスタンスに配置している点に注意してください。1つの仮想マシン上で複数のコンテナを稼働することももちろん可能ですが、ここでは、あえて、1つの仮想マシンに対して、1つのコンテナという配置にしています。これは、コンテナを利用する目的として、「アプリケーションの配信を安全に行う」という点を明確するためです。
従来の環境では、アプリケーションごとに仮想マシンを分けることで、リソース配分を最適化したり、障害発生時の影響範囲を限定するなどの対応を行ってきました。1つの仮想マシンに複数のコンテナを配置した場合は、コンテナのレベルで同じことを実現する必要があるため、設定手順が複雑になったり、問題発生時の対応手順が従来と大きく変わるなどの影響が生まれます。ここでは、リソース配分や障害の影響範囲のコントロールは従来どおり仮想マシンにまかせて、アプリケーション配信という目的に特化して、Dockerを利用していることになります。コンテナでアプリケーション配信を安全にしつつ、設計や運用はなるべく従来から変えない工夫です。Docker活用のファーストステップとして、よい方法ではないでしょうか。
それでは、図1の環境を実際に構築してみましょう。まずは、OpenStackを用いて、前回に作成したDocker用のテンプレートから、仮想マシンインスタンスを2つ起動して、それぞれにフローティングIPを割り当てておきます。この際、「SSH(TCP22番ポート)」「HTTP(TCP80番ポート)」「MYSQL(TCP3306番ポート)」での通信を許可したセキュリティグループを適用しておきます。また、MySQL用の仮想マシンインスタンスには、数GB程度のCinderボリュームを接続した後、ゲストOSでファイルシステムの作成とマウント処理を行っておきます。この際、ゲストOSで実行するコマンドは、具体的には次のようになります。最後のchconコマンドは、コンテナ内部からのアクセスをSELinuxで許可するための設定です。
$ sudo -i # mkfs.xfs /dev/vdb # mkdir /data # mount /dev/vdb /data # chcon -Rt svirt_sandbox_file_t /data
続いて、同じゲストOS上で、dockerコマンドを用いて、MySQLのコンテナを配信します。
# docker run -itd --name epmysql -p 3306:3306 \ -v /data:/var/lib/mysql enakai00/epmysql:ver1.0
ここでは、筆者が事前に作成して、Docker Hubで公開しているDockerイメージを使用しています。このイメージでは、コンテナ起動時にEtherpad-Liteから使用するデータベースの作成などを自動で行うように設定してあります。また、-vオプションにより、先ほどCinderボリュームをマウントした/dataをコンテナ内の/var/lib/mysqlにマッピングしています。これによって、コンテナ内のMySQLが/var/lib/mysql以下に作成したデータベースファイルは、Cinderボリュームに永続保存されることになります。
最後に、もうひとつの仮想マシンインスタンスのゲストOSにログインして、dockerコマンドでEtherpad-LiteのWebアプリケーションのコンテナを配信します。
$ sudo -i # docker run -itd --name eplite -p 80:80 \ -e FIP=192.168.253.19 \ -e DB_PORT_3306_TCP_ADDR=192.168.253.18 \ enakai00/eplite:ver1.0
ここでのポイントは、-eオプションで環境変数を設定していることです。「FIP=192.168.253.19」には、この仮想マシンインスタンスのフローティングIP、そして、「DB_PORT_3306_TCP_ADDR=192.168.253.18」には、MySQLの仮想マシンインスタンスのフローティングIPを指定します。これらのフローティングIPは、環境によって変わるため、コンテナ内のアプリケーションに対しては、環境変数を通して設定するようにイメージを作ってあります。これらのDockerイメージの作り方については、前回紹介したハンズオン資料に記載されていますので、そちらも参考にしてください(*1)。
この後は、外部のWebブラウザーから、Webアプリケーションのコンテナが稼働する仮想マシンインスタンスのフローティングIPに接続すると、Etherpad-Liteを利用することができます。
今回は、OpenStackで起動した仮想マシンインスタンスに、Dockerイメージでアプリケーションを配信してみました。アプリケーションの配信そのものはとても簡単でしたが、セキュリティグループの設定や仮想マシンインスタンスの起動など、OpenStack側での操作が少し面倒だったかも知れません。次回は、Ansibleを用いて、今回の作業をまとめて自動化する方法を紹介します。
*1 「OpenStackをさらに"使う"技術 - OpenStack&Docker活用テクニック」- 当日使用したハンズオン資料(Docker編)です。
++ CTC教育サービスから一言 ++
このコラムでLinuxや周辺技術の技術概要や面白さが理解できたのではないかと思います。興味と面白さを仕事に変えるには、チューニングやトラブルシューティングの方法を実機を使用して多角的に学ぶことが有効であると考えます。CTC教育サービスでは、Linuxに関する実践力を鍛えられるコースを多数提供しています。興味がある方は以下のページもご覧ください。
CTC教育サービス Linuxのページ
http://www.school.ctc-g.co.jp/linux/
筆者書籍紹介 Software Design plusシリーズ 「独習Linux専科」サーバ構築/運用/管理 ――あなたに伝えたい技と知恵と鉄則 本物の基礎を学ぶ!新定番のLinux独習書 中井悦司 著 B5変形判/384ページ 定価3,129円(本体2,980円) ISBN 978-4-7741-5937-9 詳しくはこちら(出版社WEBサイト) |
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes