開発生産性を高めるJavaとコンテナ型サービスDockerの組み合わせ
Dockerは、2014年10月に発表されたDocker社との提携により、AzureにおいてLinuxのコンテナとして提供が開始された。本セッション参加者への会場アンケートでは、本番環境で使っている人はまだ少ないようだ。マイクロソフトはDockerに強くコミットしており、次期Windows Serverで採用するとしている。
DockerはJava界からも注目されている。寺田氏が世界最大のJavaイベントJavaOne 2015のセッションを検索したところ約400中25がヒットした。また世界で約100人いるJavaチャンピオンの一人Adam Bien氏は「JavaとDockerを組み合わせると非常に開発生産性が高い」と自身のブログに書いている。同じくJavaチャンピオンであるMarkus Eisele氏は「組み合わせにより、非常に素晴らしいサービスをいち早く提供できるようになる」と記述している。
寺田氏は「Dockerが提供され、注目されている背景には、開発環境の統一が困難という事情がある」と語る。例えば、JDK、Tomcat、MySQLを使う場合、バージョンの組み合わせは無数にある。それはテスト環境、本番環境でも起こっている。
この問題解決のために行われてきたのは、管理台帳に記載しての管理化や、仮想マシンイメージの共有だ。しかし、管理台帳を利用した場合、記載内容に従い人間が直接操作をするためミスが発生する可能性がある。また台帳に対する更新漏れによって、台帳の記載内容と実際の環境で設定が異なる事態も発生する。仮想マシンで共有した場合、1つのイメージを渡すのに数十ギガ必要かもしれない。さらには、仮想マシンに対して施した変更に対する追従が困難だ。こうした問題を解決するのが、アメリカのDocker社が開発・提供するコンテナ管理ソフトウェアDockerだ。
コンテナ型サービスは、仮想マシンに対して以下の利点をもっている。
- サイズが小さい
- オーバヘッドが低い
- 移植性が高い
- 開発・運用の効率改善
そこから"Immutable Infrastructure"、"Microservices Architecture"、"DevOps"といった言葉と共にDockerが使われる場面が多くあるという。
Dockerではミドルウェア、Webアプリケーションのデプロイ方法などのシステム構築を全部コード、スクリプトで書く。以後、システムの構成変更は、コードに対して実施する。
Dockerコンテナの構造だが、まずホストOS(現在はLinux)があり、その上にDockerのエンジンをインストールする。その環境で、スクリプトで作成したコンテナをどんどん動かしていく。
Azureでは、Dockerのエンジンを動作させるために、いくつかの方法を提供している。例えば、Dockerコンテナを稼働させるために最適化した、CoreOS(軽量Linux)というものを組み込んでいる。CoreOSは、Azureのポータルから選択すれば、エンジンがインストールされた形でサービスが立ち上がる。
Dockerを使うにはDockerfileを作る。ADD、COPY、FROMなどのコマンドに対して引数を書き、環境構成を作る。一回そのテキストファイルを作ると、それを元に同じコンテナを作っていくことができる。
また、例えばJDKやGlassFishなどの新バージョンが出たときは、そのURLを書き換えてやれば差分だけ取ってきてくれる。同様にWebアプリケーションのデプロイで、アプリケーションの部分が変わった場合、warファイルだけを取ってきてサービスを提供できるようになる。
ここで寺田氏はデモを披露した。AzureポータルのMarketplaceに選択肢があり、そこでCoreOSを選び、必要な構成、設定情報などを記入する。リソースグループを設定し、リージョンとして東京、東日本を選択し、OKボタンを押す。寺田氏は「選択するインスタンス・タイプは結構重要で、システム構築する(後述:docker build)際の時間の差や、サービスのパフォーマンスに影響するので、必要に応じて選んでほしい」と語った。続けてDockerfileを作れば、準備はOKだ。
Dockerfileからのイメージ作成は、docker buildというコマンドの実行で行う。コンテナの起動はdocker runを使い、自分が作成したイメージファイルを指定すれば、自動的に立ち上がる。
基本的に、設定ファイルを作り、コマンドを2個叩けばいいだけだ。これで環境が統一しやすくなる。
Azure上にはJavaで利用可能なサービスが多数用意されている
Docker以外にも、AzureのSDK提供により、いろいろなサービスをJavaから制御できるようになっている。すべてOSSのJavaプロジェクト管理ツールMavenによるもので、POMファイルにちょっとした設定をすれば、普通に開発ができる。
このAzureSDKの中で、扱いやすいとして寺田氏のオススメはブログサービスで、デモも披露された。またAzure上でPaaSとして提供されているSQLサーバをJavaから普通に扱うことができることも強調された。
続けて寺田氏が紹介したのが、Visual Studio Onlineだ。これは開発ツールではなくチームで開発する際に必要な機能がまとめられたもので、SaaSとして提供されている。これにより、今まで面倒だった大規模なチーム開発におけるツール構成が、より簡単になる。
最後に寺田氏は、「Azureを試して使い勝手が悪いと感じたことがあれば、フィードバックしてほしい」と呼びかけた。「今のマイクロソフトのすごさは、フィードバック対応力だと思っています。ちょっとしたことでもいい。フィードバックが次の時代のAzureをよくしていきます」と語り、セッションを閉じた。
Microsoft Azureに対するフィードバック先はコチラ。