Windows コンテナーへの ASP.NET MVC アプリケーションの移行Migrating ASP.NET MVC Applications to Windows Containers

Windows コンテナーで既存の .NET Framework ベース アプリケーションを実行するとき、アプリに変更を加える必要はありません。Running an existing .NET Framework-based application in a Windows container doesn't require any changes to your app. Windows コンテナーでアプリを実行するには、アプリを含む Docker イメージを作成し、コンテナーを起動します。To run your app in a Windows container you create a Docker image containing your app and start the container. このトピックでは、既存の ASP.NET MVC アプリケーションを取得し、Windows コンテナーに展開する方法について説明します。This topic explains how to take an existing ASP.NET MVC application and deploy it in a Windows container.

既存の ASP.NET MVC アプリから開始し、Visual Studio を使用して発行した資産をビルドします。You start with an existing ASP.NET MVC app, then build the published assets using Visual Studio. Docker を使用し、アプリを含み、これを実行するイメージを作成します。You use Docker to create the image that contains and runs your app. Windows コンテナーで実行されているサイトに移動し、アプリが動作していることを確認します。You'll browse to the site running in a Windows container and verify the app is working.

この記事を読むには、Docker の基本的な知識があることが前提となります。This article assumes a basic understanding of Docker. Docker の詳細については、「Docker Overview」 (Docker の概要) を参照してください。You can learn about Docker by reading the Docker Overview.

コンテナーで実行するアプリは、質問にランダムに回答する単純な Web サイトです。The app you'll run in a container is a simple website that answers questions randomly. このアプリは基本的な MVC アプリケーションであり、認証やデータベース ストレージはないため Web 層をコンテナーに移動することに集中できます。This app is a basic MVC application with no authentication or database storage; it lets you focus on moving the web tier to a container. 今後のトピックで、コンテナー化されたアプリケーションに永続的な記憶域を移動して管理する方法を説明します。Future topics will show how to move and manage persistent storage in containerized applications.

アプリケーションを移行する手順は次のとおりです。Moving your application involves these steps:

  1. イメージの資産をビルドする発行タスクを作成します。Creating a publish task to build the assets for an image.
  2. アプリケーションを実行する Docker イメージをビルドします。Building a Docker image that will run your application.
  3. イメージを実行する Docker コンテナーを開始します。Starting a Docker container that runs your image.
  4. ブラウザーを使用してアプリケーションを検証します。Verifying the application using your browser.

完成したアプリケーションが GitHub にあります。The finished application is on GitHub.


開発用コンピューターでは、次のソフトウェアが必要です。The development machine must have the following software:


Windows Server 2016 を使用している場合は、「コンテナー ホストの展開 - Windows Server」の指示に従ってください。If you are using Windows Server 2016, follow the instructions for Container Host Deployment - Windows Server.

トレイ アイコンを選択します右クリックしてインストールし、Docker などの起動後Windows コンテナーに切り替えるします。After installing and starting Docker, right-click on the tray icon and select Switch to Windows containers. これは Windows をベースに Docker イメージを実行するために必要です。This is required to run Docker images based on Windows. このコマンドの実行には数秒かかります。This command takes a few seconds to execute:

Windows コンテナーWindows Container

発行スクリプトPublish script

Docker イメージに読み込む必要があるすべての資産を 1 か所に集めます。Collect all the assets that you need to load into a Docker image in one place. Visual Studio の [発行] コマンドを使用してアプリの発行プロファイルを作成できます。You can use the Visual Studio Publish command to create a publish profile for your app. このプロファイルですべての資産を 1 つのディレクトリ ツリーに集めます。このチュートリアルの後半で、そのディレクトリ ツリーをターゲット イメージにコピーします。This profile will put all the assets in one directory tree that you copy to your target image later in this tutorial.

発行の手順Publish Steps

  1. Visual Studio で Web プロジェクトを右クリックし、[発行] を選択します。Right click on the web project in Visual Studio, and select Publish.
  2. [カスタム プロファイル] ボタンをクリックし、方法として [ファイル システム] を選択します。Click the Custom profile button, and then select File System as the method.
  3. ディレクトリを選択します。Choose the directory. 規則により、ダウンロードしたサンプルには bin\Release\PublishOutput が使用されます。By convention, the downloaded sample uses bin\Release\PublishOutput.

接続の発行Publish Connection

[設定] タブの [ファイル発行オプション] のセクションを開きます。[発行中にプリコンパイルする] を選択します。Open the File Publish Options section of the Settings tab. Select Precompile during publishing. この最適化は、Docker コンテナー内のビューをコンパイルすることを意味し、プリコンパイル済みのビューをコピーすることになります。This optimization means that you'll be compiling views in the Docker container, you are copying the precompiled views.

発行の設定Publish Settings

[発行] をクリックすると、Visual Studio で必要なすべての資産がコピー先フォルダーにコピーされます。Click Publish, and Visual Studio will copy all the needed assets to the destination folder.

イメージのビルドBuild the image

という名前の新しいファイルを作成するDockerfile Docker イメージを定義します。Create a new file named Dockerfile to define your Docker image. Dockerfile最終的なイメージを作成する手順について説明し、任意の基本イメージ名、必要なコンポーネントを実行するアプリおよびその他の構成イメージが含まれています。Dockerfile contains instructions to build the final image and includes any base image names, required components, the app you want to run, and other configuration images. Dockerfileへの入力には、docker buildイメージを作成するコマンド。Dockerfile is the input to the docker build command that creates the image.

この練習に基づくイメージを作成、microsoft/aspnet上にあるイメージDocker Hubします。For this exercise, you will build an image based on the microsoft/aspnet image located on Docker Hub. 基本イメージである microsoft/aspnet は、Windows Server イメージです。The base image, microsoft/aspnet, is a Windows Server image. Windows Server Core、IIS、および 4.7.2 の ASP.NET が含まれています。It contains Windows Server Core, IIS, and ASP.NET 4.7.2. このイメージをコンテナー内で実行すると、IIS とインストールされている Web サイトが自動的に起動します。When you run this image in your container, it will automatically start IIS and installed websites.

イメージを作成する Dockerfile は、次のようになります。The Dockerfile that creates your image looks like this:

# The `FROM` instruction specifies the base image. You are
# extending the `microsoft/aspnet` image.

FROM microsoft/aspnet

# The final instruction copies the site you published earlier into the container.
COPY ./bin/Release/PublishOutput/ /inetpub/wwwroot

この Dockfile に ENTRYPOINT コマンドは使用されていません。There is no ENTRYPOINT command in this Dockerfile. 使用する必要はありません。You don't need one. IIS と Windows Server を実行するときに、IIS プロセスは、aspnet の基本イメージで起動するように構成がエントリ ポイントになります。When running Windows Server with IIS, the IIS process is the entrypoint, which is configured to start in the aspnet base image.

Docker ビルド コマンドを実行し、ASP.NET アプリを実行するイメージを作成します。Run the Docker build command to create the image that runs your ASP.NET app. これを行うには、プロジェクトのディレクトリで PowerShell ウィンドウを開くし、ソリューション ディレクトリで次のコマンドを入力します。To do this, open a PowerShell window in the directory of your project and type the following command in the solution directory:

docker build -t mvcrandomanswers .

このコマンドは、Dockerfile の手順に従って、新しいイメージをビルドの名前付け (-t がタグ付け) mvcrandomanswers としてイメージ。This command will build the new image using the instructions in your Dockerfile, naming (-t tagging) the image as mvcrandomanswers. その手順には、Docker Hub から基本イメージをプルし、それからそのイメージにアプリを追加する作業が含まれることがあります。This may include pulling the base image from Docker Hub, and then adding your app to that image.

そのコマンドの完了後、docker images コマンドを実行して新しいイメージの情報を参照できます。Once that command completes, you can run the docker images command to see information on the new image:

REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
mvcrandomanswers              latest              86838648aab6        2 minutes ago       10.1 GB

IMAGE ID はコンピューターによって異なります。The IMAGE ID will be different on your machine. では、アプリを実行しましょう。Now, let's run the app.

コンテナーの開始Start a container

コンテナーを開始するには、次の docker run コマンドを実行します。Start a container by executing the following docker run command:

docker run -d --name randomanswers mvcrandomanswers

-d 引数は、デタッチ モードでイメージを開始するよう Docker に指示します。The -d argument tells Docker to start the image in detached mode. つまり、Docker イメージは現在のシェルから切断された状態で実行されます。That means the Docker image runs disconnected from the current shell.

多くの docker の例では、コンテナーとホストのポートにマップする-p を参照してください可能性があります。In many docker examples, you may see -p to map the container and host ports. 既定の aspnet イメージでは、ポート 80 でリッスンし、それを公開するコンテナーが既に構成します。The default aspnet image has already configured the container to listen on port 80 and expose it.

--name randomanswers は、実行するコンテナーに名前を付けます。The --name randomanswers gives a name to the running container. この名前は、ほとんどのコマンドでコンテナー ID の代わりに使用できます。You can use this name instead of the container ID in most commands.

mvcrandomanswers は、開始するイメージの名前です。The mvcrandomanswers is the name of the image to start.

ブラウザーでの確認Verify in the browser

コンテナーが起動、実行中のコンテナーを使用する接続http://localhostに示す例です。Once the container starts, connect to the running container using http://localhost in the example shown. その URL をブラウザーに入力すると、実行中のサイトが表示されます。Type that URL into your browser, and you should see the running site.


一部の VPN またはプロキシ ソフトウェアが原因でサイトに移動できない場合があります。Some VPN or proxy software may prevent you from navigating to your site. コンテナーが動作していることを確認するために、それらを一時的に無効にできます。You can temporarily disable it to make sure your container is working.

GitHub のサンプル ディレクトリに含まれる PowerShell スクリプトは、これらのコマンドを実行します。The sample directory on GitHub contains a PowerShell script that executes these commands for you. PowerShell ウィンドウを開き、ソリューション ディレクトリに移動して、次のように入力します。Open a PowerShell window, change directory to your solution directory, and type:


上記のコマンドは、イメージをビルド、コンピューターにイメージの一覧を表示し、コンテナーを開始します。The command above builds the image, displays the list of images on your machine, and starts a container.

コンテナーを停止するには、docker stop コマンドを実行します。To stop your container, issue a docker stop command:

docker stop randomanswers

コンテナーを削除するには、docker rm コマンドを実行します。To remove the container, issue a docker rm command:

docker rm randomanswers