Container Reference#
Quick reference for container standards, base images, and specifications.
SKAO base images#
Select images from artefact.skao.int as your starting point:
Image |
Description |
|---|---|
|
CIS hardened Ubuntu 22.04 base image |
|
Ubuntu 22.04 build image for Python applications with Python 3.10 |
|
Ubuntu 22.04 runtime image for Python applications with Python 3.10 |
|
Ubuntu 22.04 build/test image for JavaScript with Node 22 and Cypress 14.2.0 |
|
Ubuntu 22.04 runtime image for JavaScript with Node 22 |
|
Ubuntu 22.04 with Nginx 1.27.3 and Python 3.10 for static sites and API proxying |
|
NVIDIA Ubuntu 22.04 runtime for CUDA applications with CUDA 12.14.x and Python 3.10.x |
|
NVIDIA Ubuntu 22.04 build image for CUDA applications with CUDA 12.14.x and Python 3.10.x |
Note
ska-build is deprecated. Use ska-build-python.
Image metadata labels#
All SKAO images include these labels (also in /etc/skao.metadata):
Label |
Description |
|---|---|
|
ISO 8601 creation date |
|
Image version |
|
Associated tags |
|
Responsible SKAO team |
|
Documentation URL |
|
Source code URL |
|
Parent base image |
Recommended image labels#
Add these labels to your images for traceability:
LABEL \
author="Your Name <your.name@skao.int>" \
description="Short description of this image" \
license="Apache2.0" \
int.skao.team="Your Team" \
int.skao.application="widget" \
int.skao.version="1.0.0" \
int.skao.repository="https://gitlab.com/ska-telescope/ska-project"
Dockerfile directive quick reference#
Directive |
Usage |
|---|---|
|
Base image — use stable tags with major.minor version ( |
|
Build-time variables — set defaults, override with |
|
Runtime environment variables — only for values needed in final image |
|
Execute commands — combine related commands to minimise layers |
|
Copy files — preferred over |
|
Copy files — auto-extracts archives (use sparingly) |
|
Set working directory — always use for clarity |
|
Switch user — run as non-root when possible |
|
Document ports — informational, does not publish |
|
Document mount points — informational, provides annotation |
|
Main executable — use exec format |
|
Default arguments — use exec format |
|
Metadata — add provenance and traceability info |
|
Trigger for child images — use sparingly, can cause confusion |
Container standards checklist#
Structuring applications:
☐ One discrete application per container
☐ Single executable entry point
☐ No multi-process init (supervisord)
☐ Proper signal handling from PID 1
☐ One Git repository per container image
Building images:
☐ Containers are immutable — no internal state
☐ Minimal image size and layers
☐ Layers ordered from static to volatile
☐ Package cache cleaned after installs
☐ No unnecessary packages (debuggers, editors)
☐ Multi-stage builds for compiled dependencies
☐ No secrets embedded in images
Naming and tagging:
☐ Image name matches application name
☐ Commit hash tag for development builds
☐ Semantic version tags for releases
☐
-devsuffix for debug images☐ Never use
:latestin production
Running containers:
☐ Memory and CPU limits set
☐ Read-only mounts where possible
☐ Non-root user when possible
☐ No privileged mode unless essential
☐ No
--net=hostunless essential☐ Configuration via environment variables or files
☐ Logging to stdout/stderr
Kubernetes storage classes#
Available in SKAO-managed clusters:
Class |
Backend |
Usage |
|---|---|---|
|
CephFS |
Shared network filesystem (ReadWriteMany) |
|
RBD |
Single concurrent use ext4 (ReadWriteOnce) |
Naming convention: <type><class><version>[-location]
bd= block device,nfs= network filesystems= standard,i= IOPS optimised,t= throughput optimised
Helm chart structure#
charts/myapp/
Chart.yaml # Metadata and dependencies
LICENSE # Optional: chart license
README.md # Optional: human-readable docs
values.yaml # Default configuration
charts/ # Dependent charts
templates/ # Kubernetes manifests
templates/NOTES.txt # Optional: post-install notes
templates/tests/ # Test pods for 'helm test'
Kubernetes resource labels#
Apply these labels to all resources for filtering and identification:
Label |
Purpose |
|---|---|
|
Application name (matches resource name) |
|
Release/deployment instance |
|
Application version |
|
Component type (database, api) |
|
Parent application suite |
|
Tool managing this resource ( |
|
Chart name and version |