はじめに
yo のジェネレーターを使って ASP.NET 5 プロジェクトを作成したら、 次のような Dockerfile も含まれていた。
FROM microsoft/aspnet:1.0.0-beta7 COPY project.json /app/ WORKDIR /app RUN ["dnu", "restore"] COPY . /app EXPOSE 5000 ENTRYPOINT ["dnx", "-p", "project.json", "kestrel"]
せっかくなんで、Docker で動くか試してみよう。
Docker Toolbox をインストール
Mac OS X で Docker を使うために、Docker Toolbox をインストールする。
Docker Toolbox は次のツールが含まれていた。
- Docker Client
- Docker Machine
- Docker Compose (Mac only)
- Docker Kitematic
- VirtualBox
余談だけど、Docker Toolbox がインストールした VirtualBox が新しくて、 Vagrant が実行できなくなった。vagrant upgrade もできなくてツライ。
Docker Quickstart Terminal を起動
Launchpad から Docker Quickstart Terminal を起動。
## . ## ## ## == ## ## ## ## ## === /"""""""""""""""""\___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\_______/ docker is configured to use the default machine with IP 192.168.99.100 For help getting started, check out the docs at https://docs.docker.com
192.168.99.100
はコンテナにアクセスするときに使う IP アドレスだった。
これに気づかずに、ずっと localhost でアクセスしようとしていた。
そりゃ繋がらないはずだ。
コンテナイメージを作成
Dockerfile があるディレクトリに移動し、タグとバージョンを指定して、コンテナイメージを作成する。
docker build -t tnakamura/helloaspnet:1.0 .
-t オプションを使ってタグとバージョンをつけておかないと、どちらも
コンテナを実行
docker run コマンドでコンテナを起動。
docker run -it -p 5000:5000 --name helloaspnet tnakamura/helloaspnet:1.0
-i オプションをつけると、コンテナで実行したコマンドの標準入出力に接続して、 対話的に操作できるようになる。
-t オプションはコンテナに擬似 TTY 端末を割り当てるもので、 コマンドライン操作を行うプロセスを使用するときは必須。
これら2つはほぼすべての場合に指定しておいたほうがいいみたい。 付け忘れると端末が入力を受け付けてくれなくなって、タブを閉じるしかなくなった(体験済み)。
あと、-p はポートフォワーディング、--name はコンテナに名前をつけるやつね。
Safari でアクセスしてみる
192.168.99.100:5000 にアクセスしてみたのがこちら。
上手くいったけど、スクリーンショットじゃ分かりにくいかな。 ホントに Docker で動いてるからね。
まとめ
最小の ASP.NET 5 アプリではあるけど、Docker のコンテナで動かすことができた。
今回作ったコンテナが、Docker コンテナのデプロイをサポートしている PaaS でそのまま動かせるのだとしたら胸熱だな。
Google Container Engine、Elastic Beanstalk、Azure Container Services、Heroku。 Heroku は確か、 Heroku が用意したコンテナイメージから作る必要があったっけ。
そのうちデプロイも試してみよう。