戸田さんがJAWS-UG大分で語ったコンテナの基礎と活用法

アスキー 2016年10月26日(水)07時00分配信

アプリケーションが動作するためには、多くの準備が必要だ。OSはもちろん、アプリケーションが必要とするライブラリ、さらに言えばそれらのライブラリと依存関係にある多数のライブラリや設定ファイル群など。これらを、アプリケーションが求めるバージョンに従って準備しておかなければならない。そんなサーバー構築や運用の苦労をなくす手法のひとつが、アプリケーションのコンテナ化だ。JAWS-UG大分ではフリーランスエンジニアの戸田 浩史氏が、アプリケーションコンテナのひとつであるDockerについて紹介した。

アプリケーションをコンテナ化すればサーバー運用の負担を軽減できる

 コンテナ、Containerとはその言葉通り、中にものを入れるものを指す。貨物で使われるコンテナを思い浮かべれば容易にわかることと思うが、ものを入れるだけではなく、それを持ち運べるところに重要性がある。貨物の場合は規格化されたコンテナにものを入れることで、船舶や列車、トラックなど運ぶ道具が変わっても同じように持ち運べるところに意義がある訳だ。

 AWSにおけるコンテナも同様に、アプリケーションを規格化された容れ物に収めることで、アプリケーションの可搬性を高めることができる。具体的に言えば、サーバーに用意されたライブラリなどに依存することなく、同じ規格のコンテナにさえ対応していてくれればアプリケーションを動かせるようになる。

「事業者の本来の目的はサービスを維持することであって、サーバーを運用することではありません。Dockerを使ってアプリケーションをコンテナ化すれば、アプリケーションとサーバーが疎結合になり、サーバー運用の負担を軽減できます」(戸田さん)

TD
フリーランスエンジニア 戸田 浩史さん

 Dockerを使ってアプリケーションをコンテナ化することで、なぜサーバー運用の負担が軽減されるのか。それは、アプリケーション作成者がライブラリまで管理できるようになるからだ。サーバー運用者はDockerにさえきちんと対応させておけば、個別のアプリケーションに合わせた動作環境を用意する必要がなくなる。ライブラリの依存関係に振り回される日々ともおさらばだ。

TD
ビルド、テストのサイクルをスピードアップするなど開発者のメリットも大

 Dockerを使ってるメリットを得るのは、サーバー運用者だけではない。アプリケーション開発者の側にも多岐にわたるメリットがもたらされる。

コンテナ化によって期待されるメリットの数々

 第一にアプリケーションをビルドして実際に動かし、テストするまでの時間を大きく短縮できる。従来の手法では、新たなライブラリを使う更新を行なった場合、サーバー運用者に依頼してライブラリのアップデートや必要なライブラリの追加インストールをしなければならなかった。この作業がを待つ間、新バージョンのリリースはお預け。ところがDockerを使えば、アプリケーション作成者側で必要なライブラリの管理までできるようになるので、テスト環境で動作したアプリケーションをすぐに本番環境に移行できるようになる。

 リリースまでのスピードが早くなるだけではない。開発環境、テスト環境、本番環境の整合性を取るのも簡単になる。これまではそれぞれの環境にインストールされているライブラリのバージョンを揃えるだけでも手間がかかっていたはずだ。開発のために開発環境にのみ新バージョンのライブラリをインストールするなどした場合、その管理はより複雑になる。こうした面倒くさい問題も、Dockerを使えば万事解決という訳だ。

「インフラ管理はアプリケーション中心の管理に代わりの、インフラ担当者が見なければならない範囲、アプリケーション作成者が見なければならない範囲が変わります。インフラ担当者が見なければならない範囲は減り、開発者はDockerが動く環境であればどこでも動くアプリケーションを開発できるようになります」(戸田さん)

TD
コンテナ化によりアプリケーションとOSは疎結合に

 アプリケーションとインフラだけではなく、アプリケーション同士も疎結合になり、ライブラリのバージョン違いによるコンフリクトに悩まされることもなくなる。分散型で弾性のあるマイクロサービス化が可能になると戸田氏は言う。

みんなにメリットをもたらすDocker、実際には誰がどこで使えばいい?

 開発、運用双方にメリットをもたらすDockerだが、実際の開発現場では誰が使うべきなのだろうか。ライブラリのバージョン管理にまで責任を持つという観点からは開発者が使うのがわかりやすいと思うのだが、戸田さんは「開発者が使っても、運用担当者が使ってもどちらでもいい」と言う。

「日々のバッチやログ分析に使いたいときには、運用者がDockerを使ってアプリケーションをコンテナ化してサービス間を疎結合にするというのもアリだと思います。コンテナ化しておけば、他のアプリケーションから影響を受けなくなりますから」(戸田さん)

 使う場所は、どこでもいい。そもそも、どこにでも持ち運べるというのがコンテナ化のメリットのひとつなのだから。AWSに限らず、Dockerが動く環境さえ整っていれば、開発環境をオンプレミスで準備し、サービス環境をクラウドに展開することも容易だ。

 とはいえAWSの勉強会なので、AWSでDockerを使う場合に便利な機能の紹介もしっかり用意されていた。まず紹介されたのは、Amazon ECS(EC2 Container Service)だ。コンテナ化されたアプリケーションの管理ができるだけではなく、アプリケーションとWebサーバー運用者をワンパッケージにしてオートスケールを設定できるなど、Dockerを使ったサービスを俯瞰的に管理できる。また、スケーリングに欠かせないAmazon ALB(Application Load Balancer)やAmazon ELB(Elastic Load Balancer)も、ECSで設定した動的ポートマッピングに対応するなどDockerを使いやすいよう配慮されているとのこと。

TD
AWSではECSを使ってDockerコンテナを管理できる

 開発側にとって便利な機能としては、Amazon Elastic Beanstalkが挙げられていた。アプリケーションのデプロイを支援する機能だが、デプロイ時にDockerコンテナとして書き出す機能が備わっているので、コンテナ化に詳しくない開発者がとりあえず気軽にDockerを使ってみたい場合にもよさそうだ。

 こうしたコンテナの話題は、実はJAWS-UG大分では初めて取り上げられたそう。初心者向けのタイトル並ぶこの日のセッションの中ではやや難しめの内容だったが、十分に噛み砕かれた説明に参加者が真剣に聞き入っていたのが印象的だった。

アスキー
もっと見る もっと見る

【あわせて読む】

    最終更新: 2016年10月26日(水)07時00分

    【関連ニュース】

    【コメント】

    • ※コメントは個人の見解であり、記事提供社と関係はありません。

    【あなたにおススメ】