The goal of this project is to support semantically versioned, rootless, and multiple architecture containers for various applications.
We also try to adhere to a KISS principle, logging to stdout, one process per container, no s6-overlay and all images are built on top of Alpine or Ubuntu.
Some applications do not support defining configuration via environment variables and instead only allow certain config to be set in the command line arguments for the app. To circumvent this, for applications that have an entrypoint.sh
read below.
-
First read the Kubernetes docs on defining command and arguments for a Container.
-
Look up the documentation for the application and find a argument you would like to set.
-
Set the argument in the
args
section, be sure to includeentrypoint.sh
as the first arg and any application specific arguments thereafter.args: - /entrypoint.sh - --port - "8080"
For applications that need to have persistent configuration data the config volume is hardcoded to /config
inside the container. This is not able to be changed in most cases.
Each Image will be built with a rolling
tag, along with tags specific to it's version. Available Images Below
Container | Channel | Image | Latest Tags |
---|---|---|---|
actions-runner | stable | ghcr.io/krezh/actions-runner | |
opentofu-runner | stable | ghcr.io/krezh/opentofu-runner | |
par2cmdline-turbo | stable | ghcr.io/krezh/par2cmdline-turbo | |
sabnzbd | stable | ghcr.io/krezh/sabnzbd | |
valkey | alpine | ghcr.io/krezh/valkey | |
whisparr-nightly | nightly | ghcr.io/krezh/whisparr-nightly |
Container | Channel | Image | Latest Tags |
---|---|---|---|
alpine | 3.19 | ghcr.io/krezh/alpine | |
golang | bookworm | ghcr.io/krezh/golang | |
ubuntu | jammy | ghcr.io/krezh/ubuntu |
-
Get familiar with the structure of the repositroy
-
Find a similar application in the apps directory
-
Copy & Paste an application and update the directory name
-
Update
metadata.yaml
,Dockerfile
,ci/latest.sh
,ci/goss.yaml
and make it suit the application build -
Include any additional files if required
-
Use Taskfile to build and test your image
task APP=sonarr CHANNEL=main test
Here's an example of how tags are created in the GitHub workflows, be careful with metadata.json
as it does affect the outcome of how the tags will be created when the application is built.
Application | Channel | Stable | Base | Generated Tag |
---|---|---|---|---|
ubuntu |
focal |
✅ | ✅ | ubuntu:focal-19880312 |
ubuntu |
focal |
✅ | ✅ | ubuntu:focal-rolling |
alpine |
3.16 |
✅ | ✅ | alpine:rolling |
alpine |
3.16 |
✅ | ✅ | alpine:3.16.0 |
sonarr |
main |
✅ | ❌ | sonarr:3.0.8.1507 |
sonarr |
main |
✅ | ❌ | sonarr:rolling |
sonarr |
develop |
❌ | ❌ | sonarr-develop:3.0.8.1538 |
sonarr |
develop |
❌ | ❌ | sonarr-develop:rolling |
Containers here can be deprecated at any point, this could be for any reason described below.
- The upstream application is no longer actively developed
- The upstream application has an official upstream container that follows closely to the mission statement described here
- The upstream application has been replaced with a better alternative
- The maintenance burden of keeping the container here is too bothersome
A lot of inspiration and ideas are thanks to the hard work of onedr0p, hotio.dev and linuxserver.io contributors.