コマンド一発で次世代ASP.NETを(^ω^)ペロペロする

2014年10月27日月曜日

10月はDocker強化月間です。

前回の話: 今更Dockerを使い始めて初日に感じたことメモ

初日には、どうやらコンテナ同士のリンクという概念が面白そうというところで終わってました。

今回はもう少し実用的な話です。

ここしばらく、C#を使ってWebアプリケーションを構築するフレームワークであるASP.NET vNextに興味を持っています。
ASPといえば.aspのアレで、ASP.NETといえば.aspxのアレという、今となってはレガシーを絵に描いたようなものというイメージなのですが。
まあ、そう言いつつ、ASP系で記憶にあるのは<script language="JavaScript" runat="server">...</script>なんていう、Node.jsぱいせんも真っ青の20世紀サーバサイドJSの走りという黒歴史なのですけれど。



ともかく、ASP.NETは着実に進化を続けています。
  • まず、Webサイト構築用途として、この5年ほどはASP.NET MVCという名前のまんまのフレームワークがメインでメンテされてきています(今ではライセンスもApache系になっています)
  • そして、ここ数年皆大好きのRESTful API(GETしかできないRESTful??サービスとかよく見かけますよね!)を実現するものとして、ASP.NET Web APIという仕組みも拡充されています。 WCFはもういやだぁぁぁという、辛さを経験した人にウケているようです(要出典)
  • 加えて、SignalRという、非MSのWebスタックに馴染んだ方には「Socket.IOっぽい通信をしつつ高レベルのRPC APIを提供するもの」 というと強そうさが伝わる感のライブラリがメインプレイヤーとして参戦しています
最近のMicrosoftは、これら3つとその周辺の技術群を統合して"One ASP.NET"というコンセプトで括っています。そうして絶賛開発中の新バージョンがASP.NET vNextです。
ASP.NET関連の多くのプロジェクトはGitHub上にホストされているのですが、あまりにも話がデカいのでHomeというリポジトリにインデックスが用意されています。

ASP.NET vNextの実行に必要なライブラリ群がK Runtimeと呼ばれるもので、このバージョン管理をしてくれるnodebrewのような格好のものがkvmと呼ばれます。ASP.NET vNextアプリの依存ライブラリ管理はnpmっぽい感じでkpmというのが用意されています。
内部の用語ではCoreがKoreとなっていたり(あっ、KDEっぽい!)。

で、なぜASP.NET vNextに注目してるかというあたりですが、これは単純にMonoを使ったLinux上でのデプロイメントが割と強く意識されているためです。

Servers のくだりを読むと、従来のIISへの依存度が高かったWebハンドラ実装に加えて、Kestrelという新たなクロスプラットフォームのサーバが用意されていることがわかります。

これは試してみねばということで、Monoを入れていい感じにASP.NET vNextで遊べる状態にしたDockerコンテナを作ってみようと考えました。

最初に見つけたのは akoeplinger / mono-aspnetvnext でした。
Hello Worldなサンプルアプリも入っていて、割と扱いやすそうです。
が、結構長い間メンテされていないようでした。

もう少し探して見つけたのが ahmetalpbalkan / aspnet-vnextです。
aptでごっそりとMonoバイナリを投入できるDebianのほうが何かと扱いやすいところはあるので、こちらをforkしてKestrel対応を試していくことにしました。

結果、libuvがそもそも入っていないので入れるあたりからスタートし、環境変数など細かな調整をおこなったものを muojp / docker-asp.net にて公開しました。

これだけではあまり扱いやすくはないので、前述のもう一方のDockerコンテナから参照されていたHello Worldアプリを含めて、すぐに試せるようなDockerコンテナも作ってみました。

それが muojp / docker-hellovnext です。Dockerfileを見ての通りですが、
FROM muojp/docker-asp.net:latest

RUN git clone https://github.com/davidfowl/HelloWorldVNext ~/helloworld
WORKDIR /root/helloworld/src/helloworldweb
RUN kpm restore

EXPOSE 5000
CMD k web
これだけで追加リポジトリのcloneとパッケージダウンロードまでおこなった状態のコンテナを作れるのだから本当にDocker環境はラクです。

ちなみに、Dockerのインストールされた環境なら、こんな感じで試せます。
$ docker run -d -i -p 5000:5000 muojp/docker-hellovnext:latest
$ curl http://localhost:5000/
Hello World
大変ラクですね。

なお、実は muojp / docker-asp.net を長くメンテする気はなくて、本家にPRが取り込まれたら適当に取り下げる所存です。マメにこれをメンテしていくのはだいぶ大変そうだし、fork状態のままだと実際試してみようという人にあまり優しくないので。

0 件のコメント:

コメントを投稿