konet is an easy to use and fast container image builder for .NET applications.
It creates binaries for different platforms and architectures by running dotnet build and pushes only those binaries as new layers to a container image registry with a reference to a .NET base image.
konet is fast as it builds binaries locally and doesn't require docker to be installed or base images to be pulled. It's easy to use, doesn't require writing a Dockerfile and produces minimal images.
konet is heavily inspired by ko.
konet is distributed as a .NET tool. With .NET set up you can easily install and update it:
dotnet tool install --global konet
dotnet tool update --global konet
konet can use existing authentication data, e.g. from ~/.docker/config.json. As konet doesn't require docker, you can also login to a container image registry via konet login.
konet build automatically compiles the current .NET project for all available architectures and pushes images including the binaries - all without downloading any base image and without a container runtime.
Example:
dotnet new console -n myconsoleapp
cd myconsoleapp/
konet build -t lippertmarkus/test-console:1.0
# ...
# Successfully pushed to lippertmarkus/test-console:1.0The result is a manifest list at the tag specified in -t, referencing images for different architectures with the compiled binary as the entrypoint.
Per default konet creates images for all platforms .NET supports and for which there is an official base image available. Those include linux/amd64,linux/arm/v7,linux/arm64/v8,windows/amd64:1809,windows/amd64:1903,windows/amd64:1909,windows/amd64:2004,windows/amd64:20H2,windows/amd64:ltsc2022.
You can limit the platforms by adding -p windows/amd64:ltsc2022,linux/amd64 to konet build.
This work is heavily inspired by ko and uses crane under the hood.