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.
Pattern to create application with docker with .NET
Docker push GitHub
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'
Create a console app
I have created a new .NET 5 console app.
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> <Nullable>enable</Nullable> </PropertyGroup> </Project>
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.
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.
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.
- Create a .NET 5 console app.
- Publish it in a folder.
- Create a Dockerfile.
- Create Docker image and push to Docker Hub.
- Create a Azure container instance based on Docker Hub image.