Blogger Syntax Highliter

Tuesday, December 23, 2014

ASP.NET 5のMVCアプリをDockerを使ってAzureで動かしてみる

 

 GitHubのASP.NET 5のMVCサンプルをAzureのDockerで動かしてみます。サンプルは下記のURLから確認してください。

https://github.com/aspnet/Home 

それでは、Dockerのイメージを作っていきましょう!

下図のNOWINは、Kestrelを使わない時に使用していたものなので、本記事では関係ありません。

docker03

 

ASP.NETのサンプルコードを取得する

サンプルコードは普通にGitでcloneしてください。

$ cd ~

$ mkdir aspnetsample

$ cd aspnetsample

$ git clone https://github.com/aspnet/Home.git

 

Docker Imageを作成する

 Docker Imageを作成するためにDockerfileを下記のように作成します。ベースのイメージはマイクロソフト公式のmicrosoft/aspnetを使ってみました。

$ cd ~

$vi ./aspnetsample/Dockerfile

FROM microsoft/aspnet
# copy the contents of the local directory to /app/ on the image
ADD . /app/
# set the working directory for subsequent commands
WORKDIR /app
# fetch the NuGet dependencies for our application
RUN kpm restore
# set the working directory for subsequent commands
WORKDIR /app/Home/samples/HelloMvc
# expose TCP port 5004 from container (see project.json)
EXPOSE 5004
# Configure the image as an executable
# When the image starts it will execute the “k kestrel” command
# effectively starting our web application
ENTRYPOINT ["k", "kestrel"]




Dockerfileを作ったらBuildします。kpm restoreするので、少し時間がかかります。(前回の記事Microsoft AzureでDockerを使ってみるを参考にDockerを使える状態にしてから実行してください。)



$ docker --tls build --tag=hellomvc aspnetsample

Buildして作成されたImageは確認することができます。



$ docker --tls images
REPOSITORY                     TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
hellomvc                       latest              40c8011edf85        About an hour ago   541.3 MB
microsoft/aspnet               latest              a72542b6a95f        4 weeks ago         473.7 MB

 



ASP.NETサンプルアプリのDocker Imageを実行してみる




 それでは、DockerでASP.NETを実行してみます。コンテナ内のサーバはサンプルアプリのproject.jsonでTCPポート5004で動かすように設定されていたので、コンテナの外からはTCPポート8080で受け付けるようにしてみます。




$ docker --tls run -d -t -p 8080:5004 hellomvc
30a655f76e1660596079bf87fe446df605f20a3da2b2b856f848bede14ca9eb8




正常に実行されていることを確認するには、run実行後に作成されるコンテナのIDを使ってログを確認します。Startedと書かれていればサーバとしては正常に動作しています。



$ docker --tls logs -t 30a655f76e1660596079bf87fe446df605f20a3da2b2b856f848bede14ca9eb8
2014-12-23T06:51:01.512809000Z Started




あと、注意しないといけないのがAzureのエンドポイント設定です。適切に設定していない場合は、エンドポイントの設定を変更して、インターネットからTCPポート80で受け付けるようにしておいてください。



$ azure vm endpoint create mydockerhost 80 8080 -n HTTP




これで、WebブラウザからでもMVCアプリを確認することができるようになります。




docker02




停止するには




動いているDockerコンテナは下記のようにDockerのpsコマンドで確認することができます。また、Dockerコンテナは、stopコマンドで停止させることができます。



$ docker --tls ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
30a655f76e16        hellomvc:latest    "k kestrel"             About an hour ago   Up About an hour    0.0.0.0:8080->5004/tcp   stoic_mclean
$ docker --tls stop stoic_mclean
stoic_mclean


 



さいごに



Visual StudioのプロジェクトどDockerコンテナで利用する場合は、こちらの記事を参考にしてください。


http://kentablog.cluscore.com/2015/01/visual-studio-2015-ctp-5aspnet-5docker.html


今回の記事を書くにあたり、kestrelはLinuxで動かないと思っていたため、はじめはNOWINを使うようにNOWIN.vNextを使っていましたが、Linux実装されていることに気が付きました。libuv.so.1のShared LibraryをDynamic LinkするようにKestrelのLinux実装がされていたんですね。MonoはDLL以外もリンクできるんだ。すごい!



https://github.com/aspnet/KestrelHttpServer/blob/1fc591921b6ab00dda18f7d24cf7e549d4b1b308/src/Microsoft.AspNet.Server.Kestrel/KestrelEngine.cs



いやー面白い世の中になりましたねー。



では、皆様良いお年をー。



あ、来年開催されるGoAzure2015に是非参加してくださいね。以前、勝手に紹介した記事もありますので、ご参考にしていただければと。

Sunday, December 21, 2014

Microsoft AzureでDockerを使ってみる

 

Ubuntu 14.04のDockerクライアントとAzure CLIを使って、Docker HostをMicrosoft Azureで動かしてみます。

Docker01 

下記の手順は全て上図左側のDocker Clientの作業です。Docker Host上で作業することはありません。それでは、Docker Client上でAzure CLIの準備からいきますよー。

 

Microsoft Azure Cross Platform CLI Toolsのインストール

UbuntuなどWindows Powershell以外で動かすAzure CLIは、Microsoft Azure Cross Platform CLIと呼ばれており、Node.jsのパッケージマネージャーで配布されています。では、下記の通りNode.jsをインストールした後に、npmによりAzure CLIをインストールしてみます。

$ sudo apt-get install nodejs-legacy
$ sudo apt-get install npm
$ sudo npm install azure-cli --global

上記コマンドで、Azure CLIのインストールが完了したら、Azure CLIを自分のAzureサブスクリプションに対して発行できるように設定します。まずは、発行するために使用するクレデンシャルを下記コマンドで取得します。

$ azure account download
info:    Executing command account download
info:    Launching browser to http://go.microsoft.com/fwlink/?LinkId=254432
help:    Save the downloaded file, then execute the command
help:      account import <file>
info:    account download command OK

sshで接続するなどコマンドライン環境の場合は、上記メッセージが表示され、ブラウザでクレデンシャルを取得するように指示されます。その場合は、別途ブラウザから下記URLにアクセスしてクレデンシャルをダウンロードしてください。

http://go.microsoft.com/fwlink/?LinkId=254432

クレデンシャルのダウンロードに成功したら、下記のように、そのファイルをAzure CLI環境にインポートします。

$ azure account import "Azure Pass-12-16-2014-credentials.publishsettings"

インポートしたサブスクリプションは下記で確認することができます。

$ azure account list

また、Azure CLIで使用するサブスクリプションを変更する場合は下記コマンドを使用します。

$ azure account set [サブスクリプション名]

 

Dockerクライアントのインストール

Apt-getを使って、Dockerクライアントツールをインストールします。

$ sudo apt-get install docker.io

インストールされたDockerのバージョンを確認してみます。

$ docker --version

Dockerのメンテナンスパッケージをインストールする場合は下記のコマンドを実行。

$ curl https://get.docker.io/ubuntu/ | sudo sh

 

Microsoft AzureにDocker Hostを作成

Azure CLIの下記コマンドを使ってAzureにDocket Hostを作成します。

$ azure vm docker create -location "<location>" [options] <host-name> <image> <user-name> [password]

例えば、DNS名はmydockerhost、ロケーションはJapan West、イメージはUbuntsu、Linuxのユーザーはazureuser、パスワードはp@sswordの場合は、下記のようなコマンドになります。

$ azure vm docker create -location "Japan West" mydockerhost "b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04_1-LTS-amd64-server-20141125-en-us-30GB" azureuser p@ssword

なお、イメージはAzure CLIを使用して出力されるイメージ名から選択してAzure CLIのコマンド引数に使用します。

$ azure vm image list | grep Ubuntu-14_04

 

Docker Hostに接続してみる

作成されたDocker Hostへの接続は、下記のコマンドのように行います。接続先のホスト名はAzure CLIで作成されたホスト名を指定します。

$ docker --tls -H tcp://mydockerhost.cloudapp.net:4243 info

Dockerコマンドを実行する毎にホスト名を指定するのは大変なので、DOCKER_HOST環境変数を使用して、接続先のホスト名を設定します。

$ export DOCKER_HOST="tcp://mydockerhost.cloudapp.net:4243"

これによりDockerコマンドは、下記のように省略することが可能になります。

$ docker --tls info

 

これで、Microsoft Azure上でDockerが使えるようになりました。次の記事では、ASP.NET をDocker(Linuxコンテナ)で動かしてみます!

Friday, December 19, 2014

GoAzure2015 イベントをアプリケーション開発者視点で紹介してみる。

 

 この投稿は、Azure Advent Calendar 2014に参加した投稿となっています。(いろいろな方のネタにかぶっていたので、下記に行きつきました。)

 

2015年1月16日に「GoAzure」開催されます!

 GoAzure は、マイクロソフト と Microsoft Azure ユーザーコミュニティ (JAZUG) との共催によるイベントです。このイベントに合わせて「外資系エリートのシンプルな伝え方」の著者であるマイクロソフトの澤様もKeynoteに降臨されます!更に「Azure Friday」のオンラインセミナーでもお馴染みのマイクロソフト米国本社の Scott Hanselman が初来日!なんと!Keynote にも登壇します!

 

では、セッションを見てみよう!

 今回は、このGoAzureで予定されているセッションを、下図のような「IoTで集めたデータを機械学習し、Webサービスでユーザに提供する」シナリオにあてはめてみました。完全にシナリオに一致するセッションかわかりませんが、そのあたりの話になるのではないかと考えています。

 

GoAzure2015SessionsFig

 こう見てみると、今回のGoAzureは非常に興味深い内容になっているのではないかと考えています。なお、セッションはGoAzure開催までに変更があるかもしれませんので、最新の情報は下記URLから確認してください。あと、セッションの詳細な情報は現段階では2つのページに分かれているようですので、気になるセッションを探す場合は、両方の内容を確認してくださいね。(入り口は2つありますが、同じイベントですので、どちらのセッションも自由に参加できます。ややこしい)

1.Azureの基本からハイブリッドな利用方法までのセッション一覧

http://www.microsoft.com/ja-jp/server-cloud/azure/event/goazure2015/session.aspx

2.今回上記で紹介した、テクニカルなセッション一覧

http://r.jazug.jp/event/goazure/

 

注目セッションは

 完全に、偏った意見と言われるかもしれませんが、使いたいけど情報が少なくて使い方がわからない!超貴重で注目と思うセッションは、Session 3-3の「IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう」、Session 3-4の「Azure MLで機械学習をやってみよう」、そしてSession 2-5の「おばかIoTシンポジウム」です。

IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう

“モノから送られてくるデータ。1秒間に1つ発生するデータでも、数百万のモノが存在すると1秒間に何百万ものデータが発生することになる。これらの大量に発生するデータをリアルタイムにデータ処理し、瞬時に次のアクションに繋げるには?Azure Stream Analyticsを中心としたAzure Blob Storage、Azure Event Hubs(AMQP/HTTPS)との連携、そしてFluentd Plugin。開発者のためのビックデータのリアルタイム分析テクノロジーを紹介します!”

Azure MLで機械学習をやってみよう

“最近ではどのアプリケーションにも使われている機械学習。やってみたいけどどこから始めてよいのかわからない。アルゴリズムは知っているけど、データ整理、アプリへの実装に時間がかかりモデル作成に集中できない。Azure MLを使えばどこまでできるか?開発者のために鍛え抜かれた新しい機械学習プラットフォームの威力を紹介します!”

おばかIoTシンポジウム

あの!おばかアプリ選手権がやってくるの!?知らない方は下記URLを見てね。

http://www.atmarkit.co.jp/ait/articles/1002/19/news092.html

 

さいごに

 GoAzureは平日開催となりますので、会社に説明するときは、マイクロソフト社のページを利用したほうが説明しやすそうですね。だけど、今回の記事から自分のミッションのどこに適しているのか整理しやすくなったと思いますので、是非JAZUGのページで説明してみてはいかがでしょうか?

マイクロソフト社のページ

http://www.microsoft.com/ja-jp/server-cloud/azure/event/goazure2015/session.aspx

JAZUGのページ

http://r.jazug.jp/event/goazure/

 

ではー。

Sunday, March 9, 2014

Windows Azure仮想マシンのStatic IPアドレス設定

 

2014年2月26日、Windows Azure Japan Geo開設おめでとうございます!

このBlogは開設に合わせて始まったアドベントカレンダーに参加した3月10日の記事です。(ブラウザの言語を日本語に設定しないとアドベントカレンダーは表示されません)

今回は同じ時期にアップデートされた Windows Azure PowerShell 0.7.3(0.7.3.1) から、仮想ネットワーク向けに追加された機能を紹介したいと思います。

1.Windows Azure PowerShellに追加された機能

Windows Azure PowerShellに追加された機能は、こちらの更新履歴をみるとわかります。この履歴をみるとWindows Azureに追加されている機能も合わせて確認することができますね。

https://github.com/WindowsAzure/azure-sdk-tools/blob/master/ChangeLog.txt

今回はその中でも2014年2月12日に追加された仮想ネットワーク向けの機能を利用して、仮想マシンにStatic IP(静的IPアドレス)を設定してみたいと思います。特にWindows Azureの仮想ネットワークとサイト間VPN接続を使用して、Azureをプライベートクラウドのように利用したいと考えているエンタープライズな方には需要な機能だと思います。

2.Static IPアドレス設定について

Static IPアドレスは、次の2つのタイミングで設定することが可能です。また、既に動的に割り当てられているIPアドレスや静的に設定されているIPアドレスは設定することができません。

仮想マシン作成時に設定

PowerShellを使用して仮想マシンを作成する時に、Static IPアドレスの設定をすることができます。

下記のようにNew-AzureVMConfigで作成したコンフィグに、Set-AzureStaticVNetIPを使用してIPアドレスを設定して、新規VMを作成します。

$vmConfig = New-AzureVMConfig -Name $vmName -InstanceSize Small -ImageName $imageName |
Add-AzureProvisioningConfig -AdminUsername $adminUser -Windows -DisableGuestAgent -Password $adminPassword |
Set-AzureSubnet -SubnetNames $subNet |
Set-AzureStaticVNetIP -IPAddress 10.0.0.10  |
New-AzureVM -ServiceName $cloudService -VNetName $vnetName –WaitForBoot

 

仮想マシン存在時に設定

また、仮想マシンが既に存在する時に、Static IPアドレスを設定することもできます。仮想マシンの稼働中に変更する場合は、仮想マシンのリスタートが行われます。もちろん、停止中に変更することもできます。

下記のようにGet-AzureVMでStatic IPアドレス設定対象の仮想マシン情報を取った後、Set-AzureStaticVNetIPを使用してIPアドレスを設定して、アップデートを行います。

Get-AzureVM -servicename $cloudService -name $vmName |
Set-AzureStaticVNetIP -ipaddress 10.0.0.10 |
Update-AzureVM

 

3.動作イメージ

Static IPアドレスを使わない場合は、仮想マシンを起動した順に若い番号からIPアドレスが振られていきます。下の画像では、wm-jp-west-01、wm-jp-west-02、wm-jp-west-03の順で起動した場合です。

26

下の画像は、wm-jp-west-01、wm-jp-west-02を停止して、wm-jp-west-02、wm-jp-west-01の順で起動してみました。仮想マシンのInternal IPアドレスが変わってしまいますね。

31

それではPowerShellを使ってvm-jp-west-01のIPアドレスをStaticに設定してみます。下の画像の初めの行は既に使われているIPアドレスを指定していますので設定失敗のメッセージが表示されています。下の行は使われていないIPアドレスを設定していますので、Static IPアドレス設定が成功しています。

19

update-AzureVM実行後は、プロビジョニングされIPアドレスが設定されます。

20

Static IPアドレスの設定をした後であれば、wm-jp-west-01、wm-jp-west-02の順で起動しても、wm-jp-west-01は設定したIPアドレスで起動されます。

30

4.Static IPアドレス設定解除について

Static IPアドレスの設定を解除することもできます。下記のように、Remove-AzureStaticVNetIPを使用します。

Get-AzureVM -servicename $cloudService -name $vmName |
Remove-AzureStaticVNetIP |
Update-AzureVM

 

5.さいごに

日本国内のデータセンターで稼働するWindows Azure Japan Geoがリリースされ、国外に持ち出すことのできなかったデータをAzureで利用できるようになりましたね。Azureへのネットワークのレイテンシーもはるかに速くなり、エンタープライズ分野におけるプライベートクラウド利用が増えていくと思います。今後のエンタープライズ向け機能追加が楽しみですね。