In my previous post I showed you how to debug asp.net core apps running in Docker containers using VS 2017. In this post, let’s see how simple it is to debug asp.net core apps without Visual Studio 2017. One of the interesting and inviting aspects of Asp.Net core development is its Cross Platform goodness. That means, technically you don’t need a windows machine to develop applications targeting asp.net core. You could very well use a Mac/Linux machine to perform end-to-end development. For non-windows users, where Visual Studio 2017 is not available, VS Code comes for the rescue and that’s exactly what I will be using for docker debugging and development as well.
- Visual Studio Code
- Dotnet core
- Node js – to install other npm packages
- Yeoman – scaffolding tool
- Yeoman Docker Generator – to scaffold required dockerfile & docker-compose files
Step 1 : Create a new asp.net core mvc application
Creating a new dotnet core project on a non-windows machine can be done by using
dotnet new -t web Created new C# project in /Users/swami/Projects/DotnetCore/docker-debug-demo.
To verify everything is fine, run the below two commands to
restore the packages and
build the application
dotnet restore Restoring packages for /Users/swami/Projects/DotnetCore/docker-debug-demo/project.json... Restoring packages for tool 'Microsoft.AspNetCore.Razor.Tools' in /Users/swami/Projects/DotnetCore/docker-debug-demo/project.json... Restoring packages for tool 'Microsoft.AspNetCore.Server.IISIntegration.Tools' in /Users/swami/Projects/DotnetCore/docker-debug-demo/project.json... Restoring packages for tool 'Microsoft.EntityFrameworkCore.Tools' in /Users/swami/Projects/DotnetCore/docker-debug-demo/project.json... Restoring packages for tool 'Microsoft.Extensions.SecretManager.Tools' in /Users/swami/Projects/DotnetCore/docker-debug-demo/project.json... Restoring packages for tool 'Microsoft.VisualStudio.Web.CodeGeneration.Tools' in /Users/swami/Projects/DotnetCore/docker-debug-demo/project.json... Writing lock file to disk. Path: /Users/swami/Projects/DotnetCore/docker-debug-demo/project.lock.json /Users/swami/Projects/DotnetCore/docker-debug-demo/project.json Restore completed in 14297ms. dotnet build Project docker-debug-demo (.NETCoreApp,Version=v1.0) will be compiled because expected outputs are missing Compiling docker-debug-demo for .NETCoreApp,Version=v1.0 Compilation succeeded. 0 Warning(s) 0 Error(s) Time elapsed 00:00:02.4744234
Step 2 : Add Docker support
The easiest way to add docker support is by using yeoman docker generator. Simply by running the command
yo docker and answering the subsequent questions, you can add docker support for your project.
? What language is your project using? .NET Core ? Which version of .NET Core is your project using? rtm ? Does your project use a web server? Yes ? Which port is your app listening to? 8000 ? What do you want to name your image? docker-debug-demo ? What do you want to name your service? docker-debug-demo ? What do you want to name your compose project? dockerdebugdemo create .vscode/launch.json create Dockerfile.debug create Dockerfile create docker-compose.debug.yml create docker-compose.yml create dockerTask.ps1 create dockerTask.sh create .vscode/tasks.json We noticed your project.json file didn't use portable .pdb files. We've fixed that for you. Your project is now ready to run in a Docker container! Run dockerTask.sh to build a Docker image and run your app in a container.
Open the folder in VS Code by typing
code . from the terminal and take a look at the folder structure.
Yo docker command would have added the below docker related files:
- Dockerfile – contains instructions to build docker image
- Dockerfile.debug – contains instructions to build & debug docker images
- docker-compose.yml – contains instructions to orchestrate the service
- docker-compose.debug.yml – contains instructions to orchestrate & debug
- dockerTask.ps1 – Powershell scripts to be used in Windows environment for triggering debugging tasks
- dockerTask.sh – Bash script to be used in non-windows environment for triggering debugging tasks
You should also see the below files under
.vscode folder under your root directory of the project.
- launch.json – used by VSCode to launch the debugging activities
- task.json – used by VSCode to identify the tasks available for execution
Step 3 : Deploy & Debug the app running in container
To run the application in VS Code, navigate to the
Debug View by pressing (
shift + command + D on Mac) / (
shift + control + D) and click on the play button. This should start building the docker image by using
Dockerfile.debug and then run the application by triggering
Apply breakpoints in any of the controller methods and when you navigate to the same, you should see the application stops at the breakpoint within VS Code.
That’s it! Its that simple to debug dockerized apps using VS Code. I personally found this feature very useful for dockerized developments.