This repository contains:
- A Dockerfile that builds a Windows Server Core Container with Nim, MinGit, and Mingw-w64 dependencies as a starting point for building Nim applications in Windows Containers.
- A GitHub Actions workflow for deploying the Windows Container to the GitHub Container Registry.
Nim is a compiled, garbage-collected systems programming language with a design that focuses on efficiency, expressiveness, and elegance.
- Nim - Nim GitHub repo
- Learn Nim - Nim Tutorial
- Documentation - Nim Documentation
- Nim in Action - Book from Manning Publications
- What Is Nim? A brief introduction to the Nim programming language - YouTube video
The sample Dockerfile defaults to:
- Windows Server 2022 LTSC.
- Nim 1.6.12, the current stable release of Nim. It is very likely by the time you are reading this that Nim has since been updated. Check nim-lang releases for the latest release. See the GitHub Actions below for how the latest version is automatically pulled in to the Windows Container published here.
The sample GitHub Actions workflow:
- Builds the Windows Container for and Windows Server 2022 LTSC.
- Detects and downloads the latest version of Nim by communicating with the GitHub REST API:
$nim_version = ((Invoke-RestMethod -Uri https://api.github.com/repos/nim-lang/Nim/tags).Name | Select-Object -first 1).Trim("v")
and passing the most recent version into the Dockerfile as a build argument:--build-arg nim_version=$nim_version
, overriding the default of 1.6.12. - Pushes the resulting container to the GitHub Container Registry.
It is not currently possible to run Windows Containers on GitHub Actions at this time, the runner only supports Linux containers. :(
To use the Windows Container, you'll need:
- Windows 10/11 Pro or Enterprise editions or Windows Server 2022
- To enable Windows Containers:
As Administator, open PowerShell, and enable Windows Containers:
Enable-WindowsOptionalFeature -Online -FeatureName containers –All
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V –All
-
A container runtime that supports Windows Containers:
- Docker Desktop: Install Docker Desktop and specify use of Windows Containers
- Docker CE: Install the Docker freely distributed binaries using this guide
To get the Windows Container:
docker pull ghcr.io/sirredbeard/nim-windows-container/nimstable-ltsc2022:latest
To start the Windows Container on pause, so you can exec in:
docker run ghcr.io/sirredbeard/nim-windows-container/nimstable-ltsc2022:latest pause.exe
Also see the GitHub Container Registry page.
To build and use the Windows Container yourself, you can use the Dockerfile and build locally, or:
- Fork this repo
- Let GitHub build your own Windows Container
- Grab your GitHub Personal Access Token from here
- Give your PAT access to read packages:
- Run:
Set-Variable -Name "CR_PAT" -Value "<PAT>"
echo $CR_PAT | docker login ghcr.io -u USERNAME --password-stdin
docker pull ghcr.io/<USERNAME>/nim-windows-container/nimstable-ltsc2019:latest``