Encab: A Simple Process Manager

Encab is a process manager that simplifies running multiple services in a container or from the command line.
It's essentially a replacement for complex, hand-written Docker Container Entrypoint scripts,
especially when dockerizing complex legacy applications.
...
ADD encab.yml .
ENTRYPOINT ["encab"]
- Define what you want to run in your container in
encab.yml
,
programs:
cron:
command: cron -f
main:
command: httpd-foreground
and encab cares for the rest.
Run it and you'll always know who's logging what...
INFO encab: encab 1.0.2
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 Jan 18 09:47:12.417275 2023] [mpm_event:notice] [pid 12:tid 140142563044672] AH00489: Apache/2.4.54 (Unix) configured -- resuming normal operations
ERROR main: [Wed Jan 18 09:47:12.417830 2023] [core:notice] [pid 12:tid 140142563044672] AH00094: Command line: 'httpd -D FOREGROUND'
INFO cron: Hello Wed Jan 18 09:48:01 UTC 2023
It shares some similarities with supervisord which I've used before I wrote encab but
supervisord is a process control system not designed to run in a Container environment.
Features
- run multiple programs in a container at a time with transparent logging
- run programs as different users
- handle environment variables in a flexible way
- simplify container debugging
- load, build, validate environment variables
Documentation
Encab Documentation
Installation
Install locally
Prerequisites
pip install -U encab
Run locally
- Create sample encab file
encab.yml
encab:
dry_run: false
programs:
main:
sh:
- echo "Hello Encab!"
encab
The result will be something like this:
INFO encab: encab 1.0.2
INFO encab: Using configuration file ./encab.yml, source: Default location.
INFO main: Hello Encab!
INFO main: Exited with rc: 0
Install in Container
Prerequisites
- Docker from your Linux distribution or Docker Desktop.
Run in Container
- Create sample encab file
encab.yml
encab:
dry_run: false
programs:
main:
sh:
- echo "Hello Encab!"
-
Add Encab to your Docker file.
FROM python:3.10.8-slim-bullseye
# --------------------------------------------
# Install Venv
#
ENV VIRTUAL_ENV=/opt/encabenv
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
RUN python3 -m venv $VIRTUAL_ENV && \
pip install --upgrade pip
# --------------------------------------------
# Install Encab
#
RUN pip install encab
# -------------------------------------------
# add configuration file
#
ADD encab.yml .
# -------------------------------------------
# set encab as entrypoint
ENTRYPOINT ["encab"]
-
Build container
docker build -t encab_minimum .
-
Run container
docker run encab_minimum
Result:
INFO encab: encab 1.0.2
INFO encab: Using configuration file ./encab.yml, source: Default location.
INFO main: Hello world!
INFO main: Exited with rc: 0
Similar Projects