The official AppKu worker docker image. This image contains scripts and tooling that can be used by automated processes
to perform common CI/CD operations, such as tools/CLIs for git, ssh, docker, and cloud environments. The images also
acts as a basic web application placeholder, spinning up to render a simple "Hello World" web app on port :8080
.
The appku/waka
is based on the rockylinux/rockylinux:9-minimal
docker images, except for docker-*
tags which, at
this time, use the docker:24.0.2-dind-alpine3.18
as a base. The default working directory in appku/waka
images is
always: /waka/
This repository is officially supported by appku and welcomes contributions from outside sources to improve the project.
Tags are used to indicate the variant of the default appku/waka
image. Each is tailored to a typical CI/CD use-case.
All tags have a versioned variant (<tag>-version
).
The default tag is :latest
(and :version
).
This tag is designated to act as both a placeholder, and for general scripted (bash/sh) automation, testing and
development and includes the basics and scripts for those purposes.
Example
#this command will output a hello message to STDOUT then exit.
docker run -it appku/waka hello print
#this runs a placeholder website served on port http://localhost:8080
#using `-it` arguments will let you cleanly exit the container with CTRL+C.
docker run -it -p 8080:8080 appku/waka
#start an interactive bash shell.
docker run -it appku/waka bash
#run an exectable in the container
docker run -it appku/waka /some/path/and/command
#run a string command through bash.
docker run -it appku/waka bash -ce "echo 'test'"
By default the :latest
tag will execute the hello
script which...
hello
: Starts and runs a web server on port 8080 with a simple hello message.hello print
: Outputs a simple hello message to stdout.
This image provides addtiontal tooling and the official Google Cloud CLI on
top of the existing appku/waka
image.
This image builds and pushes a Dockerfile
and provides access to Docker-in-Docker (DIND) using the base
docker:24.0.2-dind-alpine3.18
image. It will automatically tag the image as :latest
and with a semver (version)
detected from an optional package.json
in the same location as the Dockerfile
. You can optionally override the
tags with an IMAGE_TAG
ENV variable.
IMAGE
The name of the image to build (without the tag). Example::appku/waka
.
DOCKER_REGISTRY
Specifies a docker registry to login to. By default this will be dockerhub. Example:registry-1.docker.io
DOCKER_REGISTRY_CA_PEM
The certificate authority (CA) certificate in PEM format.DOCKER_REGISTRY_PASSWORD
If your docker registry requires basic authentication, you'll need to specify the password. This should be provided in tandem withDOCKER_REGISTRY_USER
to perform adocker login
to the remote host registry (DOCKER_REGISTRY
).DOCKER_REGISTRY_USER
The docker registry username used to login.IMAGE_TAG
Specifies the built docker image's tag. Overriding the default of:latest
and a detected semver tag (from apackage.json
file).
Example:my-tag
This image deploys a docker compose service using Docker-in-Docker (DIND) with the base docker:24.0.2-dind-alpine3.18
image. It provides a default command deploy
to connect to a remote docker host and deploy a docker compose file.
The deploy
command expects the following environmental variables in order to remotely deploy the docker-compose
service. It is good practice to set your docker-compose service
name to avoid collisions with other services on the
remote docker host. You can find an example docker-compose file in the docker-compose/
directory in this repo.
REMOTE_DOCKER_HOST
The remote host SSH fully-qualified domain name (FQDN).
Example:host.some.domain
REMOTE_DOCKER_HOST_SSH_KEY
The private SSH key used to connect and authenticate with the remote host.REMOTE_DOCKER_HOST_SSH_USER
The username of the SSH user on the remote host.
DOCKER_REGISTRY
Specifies a docker registry to login to. By default this will be theREMOTE_DOCKER
value.
Example:registry-1.docker.io
DOCKER_REGISTRY_CA_PEM
The certificate authority (CA) certificate in PEM format.DOCKER_REGISTRY_PASSWORD
If your docker compose pulls images from a registry that requires basic authentication, you'll need to specify the password. This should be provided in tandem withDOCKER_REGISTRY_USER
to perform adocker login
to the remote host registry (DOCKER_REGISTRY
).DOCKER_REGISTRY_USER
The docker registry username (if needed). If you are pulling images in your docker compose service from public repositories you do not need to specify a username or password.REMOTE_DOCKER_HOST_SSH_PORT
An optional override of the SSH port for the remote host. Defaults to22
.
Example:2211
This image provides Microsoft's .Net Core and the
dotnet-script
command.
It builds on top of the existing appku/waka
image but overrides the default command to instead run dotnet build
.
The default command assumes there is a dotnet project located in the default working directory (/waka/
).
This image also provides a script to compare and deploy a dotnet core SQL Server database project using a SQL Compare
file ()*.scmp
). To use it directly, change the entrypoint to scmp-deploy
and provide the following variables:
SCMP_COMPARE_FILE_PATH
The path to the SQL Compare file to run.
Example:database/compare.scmp
-
SCMP_AD_REALM
When specifying a keytab, you'll need to set your realm for kerberos authentication.
Example:MY.OFFICE.DOMAIN
-
SCMP_AD_DOMAIN_CONTROLLER
Set the domain controller FQDN for kerberos authentication (keytab).
Example:acme-dc.my.office.domain
-
SCMP_APPLY
Apply any changes detected after comparison to the database. Expects a truthy value, such as "true", "yes", "1", etc. Changes will not be applied unless this variable is set to a truthy value.
Example:true
-
SCMP_BUILD_PATH
Directory path to the location of a SQL Project file (*.sqlproj
). -
SCMP_CA_PEM
The certificate authority (CA) certificate in PEM format. -
SCMP_CONNECTION_STRING
Override the connection string in the SQL Compare file. -
SCMP_KEYTAB_BASE64
The base64'd value of the keytab file.
You can create a keytab in a variety of methods, with varying settings (see examples of a common approach) that will conform to your domain setup.Once you have the binary keytab, you can convert it to it's base64 value by running:
base64 <keytab file> > output.kt64
It's recommended (but not required) that you convert newlines to newline-literals in your
SCMP_KEYTAB_BASE64
value, so you end up with\n
literals and a base64'd keytab in one single line (value).
ExampleSCMP_KEYTAB_BASE64=...AA3+I26A\n3HC9Ew...
ktpass /princ <username>@<domain realm> /mapuser <username> /pass <password> /ptyp KRB5_NT_PRINCIPAL /crypto ALL /Target <domain realm> /out <username>.keytab
ktutil > add_entry -password -p <username>@<my domain> -k 1 -e aes128-cts-hmac-sha1-96 > add_entry -password -p <username>@<my domain> -k 1 -e aes256-cts-hmac-sha1-96 > add_entry -password -p <username>@<my domain> -k 1 -e camellia256-cts-cmac > add_entry -password -p <username>@<my domain> -k 1 -e rc4-hmac > add_entry -password -p <username>@<my domain> -k 1 -e aes256-sha1 > wkt <username>.keytab > exit
This image provides NodeJS. It builds on top of the existing appku/waka
image
but overrides the default command to instead run node install
.
The default command assumes there is a node project located in the default working directory (/waka/
).