Docker上でアプリケーションを動かしてみよう
次はDocker上でASP.NET Core 2.0のアプリケーションを実行してみましょう。ASP.NET Core 2.0のアプリケーションをDocker上で動作させたい場合、Microsoftが公開しているASP.NET Core用のDockerイメージを利用することができます。
ASP.NET Core 2.0のDockerイメージを使ったアプリケーションのビルドと実行
Microsoftから公開されているASP.NET Core用のDockerイメージには、ビルド用とアプリケーション実行用の2種類が存在します。まずはビルド用のイメージを使ってアプリケーションをコンパイル(dotnet publish)し、生成されたデプロイ用モジュールをアプリケーション実行用のコンテナにコピーしてアプリケーションを起動するという手順になります。
ビルド用イメージにはアプリケーションをビルドするためのツールが含まれていますが、アプリケーション実行用のイメージにはそれが含まれていません。イメージを用途別に分け、実行用のコンテナを軽量に保つことで素早くアプリケーションが開始できるようなっています。
Dockerfileの作成
前述の手順は、Dockerがどのようなコンテナを作成するのかを記述したスクリプトファイル「Dockerfile」に記載していきます。先ほど作成した「pub-sample」プロジェクトのルートディレクトリ配下に以下の内容のDockerfileを作成します。
# ビルド用イメージからコンテナを作成 FROM microsoft/aspnetcore-build:2.0 AS build-env WORKDIR /app # ファイルをローカル上からコピーし、デプロイ用モジュールを作成する COPY . ./ RUN dotnet publish -c release -o out # アプリ実行用イメージからコンテナを作成 FROM microsoft/aspnetcore:2.0 WORKDIR /app # デプロイ用モジュールをビルド用コンテナからコピーし、アプリケーションを実行する COPY --from=build-env /app/out . ENTRYPOINT ["dotnet", "pub-sample.dll"]
Dockerfileには「FROM」の行が2行あります。それぞれ「microsoft/aspnetcore-build:2.0」がビルド用のイメージ、「microsoft/aspnetcore:2.0」がアプリケーション実行用のイメージをDockerのリポジトリからダウンロードしています。ビルド用イメージ上では「dotnet publish」コマンドを実行してデプロイ用のモジュールを作成しています。そのモジュールを「COPY」コマンドでアプリケーション実行用のイメージにコピーしています。
「ENTRYPOINT」は、このDockerfileを基に作成したイメージからコンテナを起動する際に実行されるコマンドで、ここでは「dotnet pub-sample.dll」がコンテナ起動時に実行されるように指定しています。
それでは実際にDockerfileからイメージの作成、コンテナの実行まで行ってみましょう。
# Dockerfileを基にイメージを作成 $ docker build -t aspnetcore_image . ・・・中略 # コンテナを起動 $ docker run -it --rm -p 5000:80 --name aspnetcore_container aspnetcore_image
「docker build」コマンドでDockerfileを基にイメージを作成します。「-t」オプションで指定した「aspnetcore_image」がイメージ名となります。イメージ作成後、「docker run」コマンドを実行するとすぐにコンテナが起動します。「-p」オプションでPCとDockerコンテナのポートバインディングを行っており、「http://loclahost:5000」でコンテナ上で起動しているアプリケーションにアクセスすることができます。
ここで作成したDockerイメージをDockerHubなどのDockerイメージのレジストリサービスに登録しておくことで、Dockerに対応した環境でイメージのダウンロード・コンテナ起動によってアプリケーションを実行することができるようになります。
