Tag Archives: Docker

PowerShell in a container

Recently I found that we can execute a PowerShell script in a docker container. There is a base image for PowerShell in docker hub and you can use that to create your own image with your PowerShell script. Now when you create docker image and container from that, your PowerShell script can execute inside that container.

Example: https://github.com/Arnab-Developer/PowerShellInContainer

Docker with Azure DevOps

Sample YAML file to build and push Docker image with Azure Pipelines.

trigger:
- main

pool:
  vmImage: ubuntu-latest

variables:
  buildConfiguration: 'Release'

steps:
- script: dotnet restore
  displayName: 'Restore'

- script: dotnet build -c $(buildConfiguration) --no-restore
  displayName: 'Build'

- script: dotnet test -c $(buildConfiguration) --no-build
  displayName: 'Test'

- script: dotnet publish '[csproj location]' -c $(buildConfiguration) -o '[publish folder]'
  displayName: 'Publish'

- script: docker build -f '[Dockerfile location]' -t [server/image-name:tag] .
  displayName: 'Create docker image'

- script: |
    docker login [server] -u [user name] -p $(ACR-PWD) # This is from pipeline variable
    docker push [server/image-name:tag]
    docker logout [server]
  displayName: 'Push docker image'

Containerized .NET app

Create a console app

I have created a new .NET 5 console app.

ConsoleApp1.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>

Program.cs

using System;

Console.WriteLine("Hello World!");

I have published the app in a folder.

In the publish folder I found the below files.

To test the published app, I have opened a terminal and navigate to the published folder and execute below command.

dotnet .\ConsoleApp1.dll

This should print ‘Hello World!’ in the terminal.

Create container image with Docker

I have WSL 2 installed in my Windows 10 machine and I have Ubuntu installed. I have installed Docker desktop for WSL. I have created a new folder ‘ConsoleApp1’ in the Ubuntu home folder and put the published artefacts inside that.

I have opened Widows Terminal and connect Ubuntu Bash with it. Navigate to the ‘ConsoleApp1’ folder. Type code . to open VS Code.

Add a new file with name ‘Dockerfile’ in the folder.

In VS Code write the below code in the Dockerfile.

FROM mcr.microsoft.com/dotnet/runtime:5.0
COPY . ./app
WORKDIR /app
ENTRYPOINT ["dotnet", "ConsoleApp1.dll"]

In the terminal run below command to create a Docker image.

docker build -t 45862391/consoleapp1:v1 .

Check the image successfully created or not.

docker images

To push the image to Docker Hub, run the below command in terminal.

docker push 45862391/consoleapp1:v1

Create a container with Azure Container Instances

Open Azure Portal and create a new Container Instance resource.

After the successful creation of the resource I can check the logs for the output of my console app.

Now my .NET 5 console app is deployed to Azure Container Instance from Docker Hub image.

Summary

  1. Create a .NET 5 console app.
  2. Publish it in a folder.
  3. Create a Dockerfile.
  4. Create Docker image and push to Docker Hub.
  5. Create a Azure container instance based on Docker Hub image.