You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

4.4 KiB

Develop ASP.NET Core Applications in a Container

You can use containers to establish a .NET Core development environment with only Docker and optionally a code editor installed on your machine. The environment can be made to match your local machine, production or both. If you support multiple operating systems, then this approach might become a key part of your development process.

A common use case of Docker is to containerize an application. You can define the environment necessary to run the application and even build the application itself within a Dockerfile. This document describes a much more iterative and dynamic use of Docker, defining the container environment primarily via the commandline. .NET Core includes a command called dotnet watch that can rerun your application or your tests on each code change. This document describes how to use the Docker CLI and dotnet watch to develop applications in a container.

See Develop .NET Core Applications in a Container for .NET Core-specific instructions.

Getting the sample

The easiest way to get the sample is by cloning the samples repository with git, using the following instructions:

git clone https://github.com/dotnet/dotnet-docker/

You can also download the repository as a zip.

Requirements

It is recommended that you add a Directory.Build.props file to your project to use different obj and bin folders for local and container use, to avoid conflicts between them. You should delete your existing obj and bin folders before making this change. You can also use dotnet clean for this purpose.

This approach relies on volume mounting (that's the -v argument in the following commands) to mount source into the container (without using a Dockerfile). You may need to Enable shared drives (Windows) or file sharing (macOS) first.

Run your application in a container while you Develop

You can re-run your application in a container with every local code change. This scenario works for both console applications and websites. The syntax differs a bit for Windows and Linux containers.

The instructions assume that you are in the root of the repository. You can use the following commands, given your environment:

Windows using Linux containers

docker run --rm -it -p 8000:80 -v c:\git\dotnet-docker\samples\aspnetapp:/app/ -w /app/aspnetapp microsoft/dotnet:2.1-sdk dotnet watch run

You can use CTRL-C to terminate dotnet watch. Navigate to the site at http://localhost:8000 in your browser.

macOS or Linux using Linux containers

docker run --rm -it -p 8000:80 -v ~/git/dotnet-docker/samples/aspnetapp:/app/ -w /app/aspnetapp microsoft/dotnet:2.1-sdk dotnet watch run

You can use CTRL-C to terminate dotnet watch. Navigate to the site at http://localhost:8000 in your browser.

Windows using Windows containers

docker run --rm -it -p 8000:80 -v c:\git\dotnet-docker\samples\aspnetapp:c:\app\ -w \app\aspnetapp --name aspnetappsample microsoft/dotnet:2.1-sdk dotnet watch run

You can use CTRL-C to terminate dotnet watch.

After the application starts, navigate to http://localhost:8000 in your web browser. On Windows, you may need to navigate to the container via IP address. See ASP.NET Core apps in Windows Containers for instructions on determining the IP address, using the value of --name that you used in docker run.

Updating the site while the container is running

You can demo a relaunch of the site by changing the About controller method in HomeController.cs, waiting a few seconds for the site to recompile and then visit http://localhost:8000/Home/About

Test your application in a container while you develop

You can retest your application in a container with every local code change. You can see this demonstrated in Develop .NET Core Applications in a Container.

More Samples