Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

.NETアプリケーションをMacで開発してDockerで動かそう!

あらゆるソフトウェア開発者のサポートを目指す開発ツール「Visual Studio 2015」特集 第3回

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2015/07/30 14:00

目次

Dockerについて

 Dockerとは軽量なコンテナ型の仮想化ソフトウェア環境で、デプロイをシンプルに管理できます。ASP.NET5のアプリケーションもDockerで動作させることができます。

 先ほど作成したWebAPIアプリケーションをCoreOSで動かしてみましょう。CoreOSはDockerに特化した軽量Linuxディストリビューションです。本稿では、Microsoft AzureでDocker環境を準備しますが、Dockerがセットアップできれば、他のクラウドサービスでも構いません。

Microsoft Azureで、CoreOSの設定

 Azureでインスタンスを作るには、ギャラリーからCoreOSのStableを選択します。

CoreOSのセットアップでアカウント情報を設定(Azureの管理画面)
CoreOSのセットアップでアカウント情報を設定(Azureの管理画面)

 sshキーかパスワードを設定します。

CoreOSのセットアップでエンドポイントを追加(Azureの管理画面)
CoreOSのセットアップでエンドポイントを追加(Azureの管理画面)

 外部から接続するためエンドポイントにHTTPとSSHが存在する状態に設定します。CoreOSのセットアップが完了すると、そのままDockerが使用できる状態になっています。

CoreOSにログイン

 プロビジョニングが終わったら、ターミナルからSSHクライアント「ssh ユーザー名@アクセスするサーバー名」で接続します。サーバーに接続できたら、Docker用のフォルダとファイルを作成するため、以下のコマンドを実行します。

CoreOSでDockerの設定を準備(シェル)
##### ユーザーのホームへ移動 #####
cd 

##### 作業フォルダを作って移動 #####
mkdir sample
cd sample

##### デプロイ用Docker設定ファイルを作成(vim以外のエディタも可) #####
vim Dockerfile

Dockerfileの編集

 Dockerfileを記述する前に、コンテナに格納するファイル群を準備します。通常はGit等のソース管理リポジトリから最新ソースを取得してきますが、今回は手動でローカルフォルダのファイルを配置します。筆者の場合は、FileZillaのSFTPを使用してCoreOSにアップロードしました。

Dockerの設定を行うフォルダ構成
Dockerの設定を行うフォルダ構成

 ファイルが準備できたら、Dockerの挙動を設定する「Dockerfile」を作成します。

Dockerfileの設定内容
FROM microsoft/aspnet:1.0.0-beta5

ADD ./MyWebApi /app
WORKDIR /app
RUN ["dnu", "restore"]

EXPOSE 5000
ENTRYPOINT ["dnx", ".", "kestrel"]

 本稿のDockerファイルでは、以下の命令を設定しています。

  1. FROM命令で、Microsoftが提供しているDockerのOSイメージ「aspnet:1.0.0-beta5」を指定
  2. ADD命令で、MyWebApiフォルダに配置したホストファイル群をコンテナ側にappにコピー
  3. WORKDIR命令で、appフォルダを作業ディレクトリに設定
  4. RUN命令で、「dnu restore」コマンドを実行
  5. EXPOSE命令で、Dockerが通信に使用するポートを指定
  6. ENTRYPOINT命令で、Dockerで起動した時のコマンド「dnx . kestrel」を指定

 Dockerファイルの命令についてはコンテナ仮想化ツールDockerをつかったコードによるWebアプリケーション実行環境の構築をご覧ください。

Dockerイメージ作成

 Dockerfile設定とファイルの準備が整いました。続けてコンテナに配置する元となるDockerイメージを作成します。

Dockerイメージの作成コマンドを実行(dockerコマンド)
##### Dockerイメージを作成(Dockerfileが存在するフォルダで実行) #####
$ sudo docker build -t codezine .
...中略...
Successfully built 84217453f212

##### Dockerイメージの確認 #####
$ sudo docker images

REPOSITORY       TAG         IMAGE ID     CREATED       VIRTUAL SIZE
codezine         latest      84217453f212 8 minutes ago 821.7 MB
microsoft/aspnet 1.0.0-beta5 3f72afbf5e5a 2 days ago    729.7 MB

 まず「docker build」コマンドでcodezineという名前のDockerイメージを作成します。Dockerfileの内容に従い順次コマンドが実行されます。初回は、OSイメージの取得やdnu restoreコマンドでアセンブリの取得をするため時間がかかります。

 「docker build」コマンドでイメージが作成できたら、「docker images」コマンドでDockerイメージが作成されていることを確認します。

Dockerコンテナに配置

 Dockerイメージが作成できたので、コンテナにイメージを配置します。

Dockerイメージの確認(dockerコマンド)
sudo docker run -t -p 80:5000 codezine

 コマンド「docker run」でポート5000を80に割り当てて実行します。エラーがない場合は、そのままコンテナの実行モードに入りますので、ブラウザからデプロイ結果を確認します。

Dockerのデプロイに成功し、WebAPIを呼び出せていることを確認
Dockerのデプロイに成功し、WebAPIを呼び出せていることを確認

 無事動いていることを確認できました。

 Dockerコンテナに正しくデプロイできたので、いったん停止して、次はバックグラウンドとして起動します。これによって、常時起動することができます。

実行中のDockerコンテナの確認と停止
##### 上記コマンドで実行できているDockerコンテナを確認 #####
sudo docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
bc14f4a3267e        codezine:latest     "dnx . kestrel"     3 minutes ago       Up 3 minutes        0.0.0.0:80->5000/tcp   berserk_mestorf

##### 上記のコマンドで確認できるコンテナIDを指定して、コンテナを停止 #####
sudo docker stop bc14f4a3267e

##### デーモンとして起動する場合は、-dオプションをつけて実行 #####
sudo docker run -t -d -p 80:5000 codezine

 以上、C#とASP.NETで構築したアプリケーションが、Dockerで運用できるようになりました。

最後に

 駆け足でしたが、.NETアプリケーションをMacで開発してLinuxにデプロイするという流れを紹介してきました。C#と.NETは、15年以上の歳月を経て成長してきた信頼あるアプリケーション基盤です。今後、MacとDockerで簡単に開発できることから、活用する機会は増していくと思われます。まだプレビュー段階ですが、今後の開発言語の一つとして注目してみてはいかがでしょうか。

参考資料

  1. オープンソース化され、MacOS XとLinuxに対応する「.NET Core」とは何か?』(Publickey)
  2. Linux & Mac OS でも動く ASP.NET 5』(マイクロソフト 井上章 のブログ )
  3. GithubのASP.NETホーム(英語)
  4. ASP.NET5のHomeBrewプロジェクト(英語)
  5. ASP.NET5のMacインストール方法(英語)
  6. Visual Studio CodeにおけるMacのセットアップ(英語)
  7. あなたのWeb開発人生を変えるYeoman、Bower、Yoのインストールと使い方 』(@IT)


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 青木 淳夫(アオキ アツオ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きた...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:あらゆるソフトウェア開発者のサポートを目指す開発ツール「Visual Studio 2015」特集
All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5