Examples
Minimum Example
Dockerfile:
FROM python:3.10.8-slim-bullseye
# --------------------------------------------
# Install Encab
#
ENV PATH=$PATH:/root/.local/bin
RUN pip install encab --user
# -------------------------------------------
# add configuration file
#
ADD encab.yml .
# -------------------------------------------
# set encab as entrypoint
ENTRYPOINT ["encab"]
config.yml:
programs:
main:
command: echo "Hello world!"
Pipx Example
pipx is a great tool to install Python tools in a non Python container.
Dockerfile:
FROM debian:bookworm
# --------------------------------------------
# Install pipx
#
apt-get -q update && apt-get -y -q install pipx
# --------------------------------------------
# Install Encab
#
ENV PATH=$PATH:/root/.local/bin
RUN pipx install encab
# --------------------------------------------
# Add app user
#
RUN adduser runner --gecos "" --disabled-login
# --------------------------------------------
# Add encab config and entrypoint
#
ADD encab.yml .
ENTRYPOINT ["encab"]
As a general rule, applications inside a container should not run as root, especially if they communicate with the outside world.
In this example, the script is run under a different user…
config.yml:
programs:
main:
user: runner
command: echo "Hello world!"
Uv Example
uv is a fast, lightweight pip and pipx replacement written in rust.
Dockerfile:
FROM debian:bookworm
# --------------------------------------------
# Install uv
#
# The installer requires curl (and certificates) to download the release archive
RUN apt-get -q update && apt-get install -y -q --no-install-recommends curl ca-certificates
# Download the latest installer
ADD https://astral.sh/uv/install.sh /uv-installer.sh
# Run the installer then remove it
RUN sh /uv-installer.sh && rm /uv-installer.sh
# Ensure the installed binary is on the `PATH`
ENV PATH="/root/.local/bin/:$PATH"
# --------------------------------------------
# Install Encab
#
RUN uv tool install encab
# --------------------------------------------
# Add app user
#
RUN adduser runner --gecos "" --disabled-login
# --------------------------------------------
# Add encab config and entrypoint
#
ADD encab.yml .
ENTRYPOINT ["encab"]
Apache + Cron Job Example
This example uses a Debian based Apache image and installs cron and tempreaper. tempreaper is a tool that removes temporary files on a regular basis. The tempreaper process itself is run by cron.
In addition to tempreaper, we want add the following entry to crontab…
hello-cron:
* * * * * echo "Hello $(date)" > /proc/$(cat /var/run/crond.pid)/fd/1 2>&1
Dockerfile:
# see: https://hub.docker.com/_/httpd
FROM httpd:2.4
# --------------------------------------------
# Install cron
RUN apt-get -q update && apt-get -y -q install cron tmpreaper pipx
# --------------------------------------------
# Install Encab
RUN pipx install encab
# --------------------------------------------
# Set up cron job
COPY hello-cron /etc/cron.d/hello-cron
RUN crontab /etc/cron.d/hello-cron
# --------------------------------------------
# Run encab
ADD encab.yml .
ENTRYPOINT ["encab"]
config.yml:
encab:
halt_on_exit: False
debug: False
programs:
cron:
command: cron -f
restart_delay: 1 # restart cron after one second should it stop
main:
command: httpd-foreground
Output…
INFO encab: encab 1.0.5
INFO encab: Using configuration file ./encab.yml, source: Default location.
ERROR main: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
ERROR main: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
ERROR main: [Wed May 24 12:39:55.123607 2023] [mpm_event:notice] [pid 12:tid 140407144078656] AH00489: Apache/2.4.54 (Unix) configured -- resuming normal operations
ERROR main: [Wed May 24 12:39:55.124088 2023] [core:notice] [pid 12:tid 140407144078656] AH00094: Command line: 'httpd -D FOREGROUND'
INFO cron: Hello Wed May 24 12:40:01 UTC 2023
INFO cron: Hello Wed May 24 12:41:01 UTC 2023