# [Deploy .NET applications to Arm virtual machines and Azure Container Registry](https://learn.arm.com/learning-paths/servers-and-cloud-computing/from-iot-to-the-cloud-part1/)

## In this learning path

- [Introduction](https://learn.arm.com/learning-paths/servers-and-cloud-computing/from-iot-to-the-cloud-part1/)
- [Motivation](https://learn.arm.com/learning-paths/servers-and-cloud-computing/from-iot-to-the-cloud-part1/how-to-1/)
- [Creating the Virtual Machine](https://learn.arm.com/learning-paths/servers-and-cloud-computing/from-iot-to-the-cloud-part1/how-to-2/)
- [Connecting to the Virtual Machine](https://learn.arm.com/learning-paths/servers-and-cloud-computing/from-iot-to-the-cloud-part1/how-to-3/)
- [Installing application dependencies and running the application](https://learn.arm.com/learning-paths/servers-and-cloud-computing/from-iot-to-the-cloud-part1/how-to-4/)
- [Create a Dockerfile using Visual Studio Code](https://learn.arm.com/learning-paths/servers-and-cloud-computing/from-iot-to-the-cloud-part1/how-to-5/)
- [Building a Docker image](https://learn.arm.com/learning-paths/servers-and-cloud-computing/from-iot-to-the-cloud-part1/how-to-6/)
- [Azure Container Registry](https://learn.arm.com/learning-paths/servers-and-cloud-computing/from-iot-to-the-cloud-part1/how-to-7/)
- [Pushing the local image to Azure Container Registry](https://learn.arm.com/learning-paths/servers-and-cloud-computing/from-iot-to-the-cloud-part1/how-to-8/)
- [Next Steps](https://learn.arm.com/learning-paths/servers-and-cloud-computing/from-iot-to-the-cloud-part1/_next-steps/)

## About this Learning Path

| Skill level:   | Introductory        |
|----------------|---------------------|
| Reading time:  | 30 min              |
| Last updated:  | 11 Sep 2026         |

| Author:         | Dawid Borycki [GitHub](https://github.com/dawidborycki) |
|-----------------|---------------------------------------------------------|
| Arm IP:         | [Neoverse](https://support.arm.com/?tab=compute-ip&Product%20Type=Infrastructure%20Processors) |
| Tags:           | Containers and Virtualization, Microsoft Azure Cobalt, Linux, dotnet, csharp |

### Who is this for?

This Learning Path is for software developers interested in learning how to deploy .NET applications to Microsoft Azure using Arm64-powered virtual machines (VMs). You'll also learn how to containerize .NET applications, and push Docker images to the Azure Container Registry.

### What will you learn?

Upon completion of this Learning Path, you will be able to:

- Create a VM in Microsoft Azure.
- Connect to the VM to install app dependencies, including SDK.
- Create and run the .NET application.
- Configure the network security group of the VM to expose the application over the Internet.
- Provision of an Azure Container Registry.
- Push a local Docker image to Azure Container Registry.

### Prerequisites

Before starting, you will need the following:

- A subscription to [Azure](https://azure.microsoft.com/en-us/free/).
- The [Visual Studio Code](https://code.visualstudio.com/download) code editor.
- The Docker extension for [Visual Studio Code](https://code.visualstudio.com/docs/containers/overview).
- The C# extension for [Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp).
- An Arm64 installation of [Docker](https://learn.arm.com/install-guides/docker/docker-desktop/).

### Summary

You’ll deploy a .NET application on an Arm64-based Azure VM and publish its container image to Azure Container Registry. First, you’ll create the VM, connect through Azure Cloud Shell, install the SDK, and run the sample application. Then, you’ll containerize the application with Docker and provision a registry so that you can push the image for later deployment.

### Frequently asked questions

<details>
<summary>How do I connect to the VM without installing an SSH client?</summary>
Use Azure Cloud Shell from the Azure Portal. SSH to the VM using its public IP address.
</details>

<details>
<summary>After running the .NET SDK install script, where is the SDK installed?</summary>
The script installs .NET SDK 7 under the `.dotnet` folder in your home directory on the VM.
</details>

<details>
<summary>Which repository should I clone for the sample application?</summary>
Clone the People.WebApp repository from [GitHub](https://github.com/dawidborycki/People.WebApp.git) using `git`.
</details>

<details>
<summary>How do I build the Docker image for the sample application?</summary>
From the `People.WebApp` folder, run `sudo docker build -t people.webapp:v1 .`. The `-t` flag assigns the image name and tag, while `.` sets the current folder as the build context.
</details>

<details>
<summary>What should I check if the app isn't reachable from the Internet?</summary>
Verify the VM’s network security group is configured to expose the application. After updating the rule, test access using the VM’s public IP address.
</details>
