Azure Kubernetes Service

Building and containerizing sample application

Building the sample ASP

Prerequisites

RequirementPurposeLink
Docker DesktopContainer runtime and local Kubernetes clusterhttps://www.docker.com
.NET 6 SDKBuild and run ASP.NET Core 6 applicationshttps://dotnet.microsoft.com/download/dotnet/6.0
JetBrains Rider (or other IDE)Project creation and code editinghttps://www.jetbrains.com/rider/

Note

These steps work on Windows, macOS, or Linux. Adjust commands for your OS and editor of choice.

1. Enable Kubernetes in Docker Desktop

Open Docker Desktop, go to Settings > Kubernetes, then:

  1. Check Enable Kubernetes.
  2. Click Apply & Restart to bootstrap a single-node cluster.

The image shows a computer desktop with Docker Desktop settings open, specifically the Kubernetes configuration section. The left side of the screen displays desktop icons for Recycle Bin, Docker Desktop, and JetBrains Rider.

2. Verify Your .NET 6 Installation

Run:

dotnet --list-sdks

Warning

Make sure .NET 6.x appears in the list. Earlier versions will not compile this sample.

3. Create the ASP.NET Core Web App

  1. Launch JetBrains Rider and click New Solution.
  2. Select ASP.NET Core Web Application. Name the project KodeKloudApp and set the solution folder.
  3. Choose the Web App template.
  4. Enable Docker support and select Linux containers.

The image shows a computer screen with JetBrains Rider open, displaying the "New Solution" window for creating an ASP.NET Core Web Application. The desktop background features a blue abstract design.

4. Modify the Page Model

Open Pages/Index.cshtml.cs and inject IConfiguration to read a custom message:

using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;

namespace KodeKloudApp.Pages
{
    public class IndexModel : PageModel
    {
        private readonly ILogger<IndexModel> _logger;
        private readonly IConfiguration _configuration;

        public string Message { get; set; }

        public IndexModel(ILogger<IndexModel> logger, IConfiguration configuration)
        {
            _logger = logger;
            _configuration = configuration;
        }

        public void OnGet()
        {
            Message = _configuration["Message"] ?? "Hello World";
        }
    }
}

5. Configure appsettings.json

Add the "Message" key to the JSON file:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Message": ""
}

6. Update the Razor Page

In Pages/Index.cshtml, render the message:

@page
@model KodeKloudApp.Pages.IndexModel
@{
    ViewData["Title"] = "Home page";
}

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>@Model.Message</p>
    <p>
      Learn about 
      <a href="https://docs.microsoft.com/aspnet/core">
        building Web apps with ASP.NET Core
      </a>.
    </p>
</div>

7. Run and Validate

Start the application:

dotnet run

Open your browser to the displayed URL (e.g., https://localhost:5001). You should see Hello World.
Stop the app, update "Message" in appsettings.json to "Hello World changed", save, then restart and refresh:

{
  // ...
  "Message": "Hello World changed"
}

The image shows a web page titled "KodeKloudApp" with a welcome message and a highlighted text saying "Message: Hello World changed!!!" It includes links to "Home" and "Privacy" at the top.

8. Multi-Stage Dockerfile

Use this Dockerfile to build and run with a minimal runtime image:

StageImagePurpose
basemcr.microsoft.com/dotnet/aspnet:6.0Runtime
buildmcr.microsoft.com/dotnet/sdk:6.0Restore, build, publish
finalmcr.microsoft.com/dotnet/aspnet:6.0Copy published output and run
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["KodeKloudApp.csproj", "./"]
RUN dotnet restore "KodeKloudApp.csproj"
COPY . .
RUN dotnet build "KodeKloudApp.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "KodeKloudApp.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "KodeKloudApp.dll"]

9. Build and Push the Docker Image

From your project root:

cd RiderProjects/KodeKloudApp
docker build . -t kodekloudapp:1
docker image ls

Optionally, pull the sample image:

docker pull hpranav/kodekloudapp

Watch Video

Watch video content

Previous
Session Introduction