ASP.NET Core + Docker:一緒に料理する

ASP.NET Coreプラットフォーム(以前のASP.NET 5)に関する一連の記事の中で、別の記事を共有できることを嬉しく思います。 今回は、Radarioの.NET開発者であるVyacheslav Bobikが、DockerコンテナでASP.NETを使用することで、プラットフォームに関する話を続けます。 サイクルのすべての記事はここでいつでも見つけることができます#aspnetcolumn -Vladimir Yunev


画像



ASP.NET CoreのCamは、WindowsだけでなくMacやLinuxでも実行できます(必要な場合もあります)。 これにより何が得られますか? たとえば、アプリケーションをすべての依存関係とともにdockerコンテナーにパックし、テスト/運用環境に便利にデプロイできます。 dockerの概要と インストール方法については説明しませんが、代わりにASP.NET Coreを使用してイメージを構築してみます。



テストアプリケーションの準備



最初のASP.NET Coreアプリケーションを起動する対象として、 monoまたはcoreclrを選択できます。 ファッショナブルでスタイリッシュな若者なので、2番目のオプションを選択します。



従来、空のASP.NET Coreプロジェクトを作成します。



alt



作成後、 project.json



ファイルに移動します。次のフィールドが含まれている必要があります。



 .... "dependencies": { "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final", "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final" }, "commands": { "web": "Microsoft.AspNet.Server.Kestrel --server.urls http://*:5004" } , ....
      
      





コマンドセクション、つまりweb



コマンドに興味があります 。 実行されると、 kestrel



Webサーバーが起動され、ポートkestrel



で利用可能になりますkestrel



(???)



アプリケーションがローカルで起動するかどうかを確認しましょう。このために、まず適切なバージョンのDNXがあり、使用するためにデフォルトで設定されていることを確認してください。



実施します



 dnvm list
      
      





alt



clrランタイムでバージョンを選択した場合次のコマンドでcoreclrに切り替える必要があります。



 dnvm use 1.0.0-rc1-final -r coreclr -p
      
      





coreclrバージョンがない場合は、次を実行することで簡単にインストールできます。



 dnvm upgrade -r coreclr
      
      





すでにアプリケーションを実行しましょう。作成したフォルダーに移動して実行します。



 > dnu restore > dnx web
      
      





最初のコマンドは依存関係をインストールし、2番目のコマンドはアプリケーションを起動します。 アドレスhttp:// localhost:5004にアクセスすると、ウェルカムメッセージが表示されます。 これで、アプリケーションをコンテナにパックする準備が整いました。



Dockerイメージを作成する



Dockerが画像を収集するために、Dockerファイルに記録されたコマンドを使用してこれを行う方法を[docker]に伝える必要があります。



Dockerは、 Dockerfile



からコマンドを読み取ってイメージを作成します。 次のコマンドを含むプロジェクトのルートにDockerfile



を作成しました( これはDockerfileを作成するためのベストプラクティスの多くと矛盾しませんが )。



 FROM microsoft/aspnet:1.0.0-rc1-update1-coreclr COPY . /app WORKDIR /app RUN ["dnu", "restore"] EXPOSE 5004 ENTRYPOINT ["dnx", "-p", "project.json", "web"]
      
      





FROM-基本イメージを示し、それに基づいて独自のイメージを作成します

COPY-フォルダー(。)からコンテナーファイルシステム、/ appフォルダーにすべてをコピーします

WORKDIR -RUN、CMD、ENTRYPOINT、COPY、およびADDコマンドを実行する作業フォルダーを設定し、Dockerファイルでこのコマンドを実行します。



RUN-アプリケーションのすべての依存関係をインストールします。 RUNは単にチームを引き抜くだけではありません。ここで詳しく説明します。

EXPOSE-イメージにポート5004( project.jsonファイルで指定した)をリッスンするサービスがあることをdockerに伝えます



ENTRYPOINT-コンテナーの開始時に実行されるコマンドを指定します。 CMDとの違い



それでは、イメージを組み立てましょう。



 docker build -t first-aspnet-app .
      
      





しばらくして、画像が収集されたら、それを起動します。



 docker run -d -p 80:5004 first-aspnet-app
      
      





-d-実行中のコンテナーをバックグラウンドに切り替え、最初にWebサーバーの入力/出力がシェルに接続されます。

-p-ホストポートをコンテナの公開ポートにマッピングします。 つまり、ポート80で受信したすべての要求はポート5004に転送されます



アドレスhttp://localhost:80



にアクセスすると、ウェルカムメッセージが表示されます。 私はwindows環境でdockerを操作しているため、直接ではなくdocker-machine



を介して対話するため、 docker-machine



IPアドレスにアクセスする必要があります。これはトリッキーなコマンドで認識できます。



 docker-machine ip
      
      





私の場合、アドレスhttp://192.168.99.100:80



アプリケーションを確認する必要がありhttp://192.168.99.100:80



(ポート80は省略できます)。



出来上がり!



alt



正しいドッカー画像を作成する



ただし、すべてがスムーズであるとは限りません。もちろん、ドッカーには落とし穴があります。 このような大きな水中の石畳の1つは、PID 1問題またはzobmiプロセスです 。詳細については、こちらをご覧ください 。 phusionのメンバー( phusionの乗客の作成者 )が私たちの面倒を見てくれて、 APU.NET Coreで画像を作成するために使用するphusion / baseimageイメージに多くの問題を解決させました。



MicrosoftのDockerファイルからコマンドを正直にコピーすることにより、独自のコマンドを取得できます。



 FROM phusion/baseimage:latest ENV DNX_VERSION 1.0.0-rc1-update1 ENV DNX_USER_HOME /opt/DNX_BRANCH ENV DNX_RUNTIME_ID ubuntu.14.04-x64 RUN apt-get -qq update && apt-get -qqy install unzip curl libicu-dev libunwind8 gettext libssl-dev libcurl3-gnutls zlib1g && rm -rf /var/lib/apt/lists/* RUN curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_USER_HOME=$DNX_USER_HOME DNX_BRANCH=v$DNX_VERSION sh RUN bash -c "source $DNX_USER_HOME/dnvm/dnvm.sh \ && dnvm install $DNX_VERSION -alias default -r coreclr \ && dnvm alias default | xargs -i ln -s $DNX_USER_HOME/runtimes/{} $DNX_USER_HOME/runtimes/default" RUN LIBUV_VERSION=1.4.2 \ && apt-get -qq update \ && apt-get -qqy install autoconf automake build-essential libtool \ && curl -sSL https://github.com/libuv/libuv/archive/v${LIBUV_VERSION}.tar.gz | tar zxfv - -C /usr/local/src \ && cd /usr/local/src/libuv-$LIBUV_VERSION \ && sh autogen.sh && ./configure && make && make install \ && rm -rf /usr/local/src/libuv-$LIBUV_VERSION \ && ldconfig \ && apt-get -y purge autoconf automake build-essential libtool \ && apt-get -y autoremove \ && apt-get -y clean \ && rm -rf /var/lib/apt/lists/* ENV PATH $PATH:$DNX_USER_HOME/runtimes/default/bin COPY . /app WORKDIR /app RUN ["dnu", "restore"] EXPOSE 5004 ENTRYPOINT ["dnx", "web"]
      
      





私たちがすでに知っていること



 docker build -t aspnetcore-phusion .
      
      





 docker run -d -p 80:5004 aspnetcore-phusion
      
      





私のように、記事の冒頭で作成されたコンテナを停止しなかった場合、ドッカーはポート80がすでに使用されていることを通知します。



 docker: Error response from daemon: failed to create endpoint loving_kowalevski on network bridge: Bind for 0.0.0.0:80 failed: port is already allocated.
      
      





以前に起動したコンテナを停止し、新しいコンテナを起動します。



 docker stop loving_kowalevski docker run -d -p 50:5004 aspnetcore-phusion
      
      





dockerコンテナーを起動するたびに、ランダムな名前を生成します。 正確に- ここで見ることができます



おわりに



この短いレビュー記事では、単純なASP.NET Coreアプリケーションを使用したコンテナーをいくつか作成しました。 もちろん、実際には、アプリケーションは通常、より複雑であり、コンテナも多くあります。



私の意見では、coreclrで実行されているASP.NET Coreアプリケーションはまだ生産準備が整っていません。 たとえば、 mongodbの場合、ドライバーはまだなく、 autofacはまだアルファ版です。 もちろん、 モノで抜け道を見つけることができますが、ここではcoreclrについて説明します。 ただし、進歩は止まっておらず、ライブラリは移植されており、まもなくASP.NET Coreで実際のクロスプラットフォームアプリケーションが表示されます。



著者向け



ご友人、ご自身の資料でコラムをサポートすることに興味がある場合は、すべての詳細を議論するためにvyunev@microsoft.comまでご連絡ください。 ASP.NETおよびその他のトピックについて興味深い話ができる著者を探しています。



著者について



ボビク・ヴィャチェスラフ





会社開発者のラダリオ



発表! DevCon 2016でのディープインテンス



画像



DevCon 2016でASP.NET Coreの詳細な集中コースを発表します。 このコースは会議の2日目に行われ、6時間以内に会議の1日がかかります。



オープンプラットフォームASP.NET 5での最新のWebアプリケーションの開発

この取り組みの一環として、参加者は最新のASP.NET 5でWebアプリケーションを開発することに専念するエキサイティングで冒険的な旅に参加します。ゼロからクラウドに展開される本格的なアプリケーションに至るまで行きます。 また、参加者は、ASP.NETの内部構造の調査を停止し、Entity Framework 7を使用してリレーショナルデータベースとNoSQLデータベースを操作し、MVCフレームワークでアプリケーションを開発し、モデル、ビュー、ビジネスロジックを構築し、REST APIを作成し、継続的な開発プロセスを整理することができますGitとVisual Studio Onlineでテストし、AzureコンテナーとDockerコンテナーでデプロイします。 旅の終わりに、すべての参加者は開始に合格し、ASP.NETの名誉ある騎士になります。



DevCon 2016カンファレンスへの登録はすでに開始されています! こちらから登録してください




All Articles