fbpx

[和訳]Dockerでサーバーレスのアプリを構築 #docker

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

本稿は
BUILDING SERVERLESS APPS WITH DOCKER(2016/6/21) の和訳記事です。

 

時々、これまでのテクノロジーを陳腐化させる新しいテクノロジーの波に脅かされます。"サーバーレス"のアプリを書くためのテクニックについてこれまで非常に多く議論されて来ました。その考えは、あなたのアプリケーションを一連の機能のようにデプロイするもので、必要とされるときに動作する、オンデマンドと呼ばれるものです。この、オンデマンドと呼ばれるクラスタ上で動作する機能により、サーバーを管理する悩みから解放されるとともにその機能は必要なだけスケールします。

 

しかし、サーバーレスと言うことがDocker不要と言うことを意味するものではありません。事実、Dockerはサーバーを必要としないのです。Dockerを使うことによりこれらの機能をコンテナ化し、Swarm上でオンデマンドで動作させることができます。サーバーレスとは、分散アプリを構築するためのテクニックであり、Dockerはそれらアプリを動作させるための完全なプラットフォームなのです。

 

 

サーバーからサーバーレスへ

それでは、どのようにアプリケーションを書けば良いのでしょうか?我々の作成した5つのサービスからなる投票アプリの例を見てみましょう。

このアプリは以下のものから成り立っています;

docker_serverless001

 

  • 2つのwebフロントエンドアプリ
  • バックグラウンドで投票を処理するワーカーアプリ
  • 投票を処理するメッセージキュー
  • データベース

 

投票を処理するバックグラウンドアプリは簡単にサーバーレスアーキテクチャに変更する事が出来ます。投票アプリでは、バックグラウンドタスクを動作させるために次のような小さなコードを走らせます:


import dockerrun

client = dockerrun.from_env()

client.run("bfirsh/serverless-record-vote-task", [voter_id, vote], detach=True)

 

ワーカーとメッセージキューは要求に応じて自動的にスケールし、Swarm上でオンデマンドで動作するDockerコンテナと置き換えることができます。

 

さらに、webフロントエンドアプリもなくす事が可能です。これらのアプリは、それぞれのHTTPリクエストをDockerに送信する軽量なHTTPサーバーによってトリガーされる単一のHTTPリクエストでDockerコンテナと置き換えることができます。負荷に応じて自動的にスケールするため、力仕事は長期間動作しているHTTPサーバーからオンデマンドのDockerコンテナに移されています。

 

新しいアーキテクチャはこの様になります:
docker_serverless002

 

赤いブロックは継続的に動いているサービスで、緑のブロックはオンデマンドで動作するDockerコンテナです。このアプリケーションは管理が必要な長期間動作するサービスが少なくなっており、また、要求に応じて自動的にスケールするようになっています。(Swarmのサイズによりますが。)

 

 

これによって何ができるのでしょうか?

アプリで使える3つの便利なテクニックがあります。

 

  1. あなたのプログラムの機能としてオンデマンドのDockerコンテナを動作させます。
  2. Swarmを使ってこれらをクラスタで動作させます。
  3. DockerのAPIソケットを呼び出し、コンテナからコンテナを動作させます。

 

これらのテクニックを組み合わせることで、アプリケーションをどのように設計するか可能性が広がります。バックグラウンドワークを走らせる事はそれがうまく動く事のとても良い例ですが、他の負担も軽くすることが可能です。例として:

  • ユーザーのHTTPリクエストに対応するコンテナを動作させる事は待ち時間の関係からおそらく現実的ではありません。しかし、Swarmで動作するコンテナによってフロントエンドが自動的にスケールするロードバランサーを書くことができます。
  • Swarmの内向きな構造を伝えるMongoDBのコンテナは正しいシャードやレプリカをローンチします。

 

次は?

 

我々はこれらの劇的に新しいツールを得、アプリケーションの構築を抽象化しましたが、単にそれらによって可能になることの表面を引っ掻いただけに過ぎません。我々はまだ長年必要としてきたサーバーのようなアプリケーションを構築しています。しかし、それはプログラムをどんなインフラストラクチャでもオンデマンドで動作させる事の出来るSwarmのある将来ではありません。

 

これがあなたの構築しようとしているものに対してのアイデアとなれば幸いです。さらに我々はあなたのヘルプも必要としています。我々はこれらのアプリケーションの構築をスタートするための基本的なものをそろえましたが、まだ生まれて間もないため、より良いツールやライブラリ、例えばアプリケーションやドキュメンテーションなどを必要としています。

 

このGitHubのリポジトリはツール、ライブラリや事例、およびブログへのリンクとなっています。より良いものに成長させていくため、もしもっと深く学びたい場合、また、今後協力して行くためにあなたの持っているリンクでの貢献をお願いします。

 

一緒に、Happy Hacking!

 

 

Dockerに関してさらに学ぶには

・Docker初心者は、10分のオンラインチュートリアルをご覧ください。
・画像、自動構築などを無料のDocker Hubアカウントでシェアしてみましょう。
・Docker 1.12リリースノートを読んでみましょう。
Docker Weeklyを購読してみましょう。
・次に予定されているDockerオンラインMeetupに登録してみましょう。
・次に予定されているDocker Meetupに参加してみましょう。
DockerCon 2016に登録してみましょう。
DockerCon EU 2015のビデオを見てみましょう。
Dockerコミュニティへの貢献を始めましょう。

新規CTA