Just enough to get process supervision and startup mechanisms
100K+
https://hub.docker.com/r/behance/docker-base/tags/
Provides base OS, security patches, and tools for quick and easy spinup.
-VERSION#-ubuntu-18.04-VERSION#-ubuntu-20.04-alpine-centos-7-centos-8only for zombie reaping (as PID 1), boot coordination, and termination signal translationTo add a service to be monitored, simply create a service run script
For programmatic switches, create the service in /etc/services-available, and symlink to /etc/services.d to enable
A convenience script is provided for security-only package updates.
On Ubuntu and CentOS-based variants, run:
/bin/bash -e /security_updates.sh
This file is actually a symlink to the variant-specific script contained in the /scripts folder
NOTE: for Alpine variant, which is security-conscious, but does not have a mechanism to isolate security-specific updates, use apk update && apk upgrade as a generic alternative.
A convenience script is provided for post-package installation cleanup
On all variants, run:
/bin/bash -e /clean.sh
This file, like security_updates (above) is actually a symlink to the variant-specific script contained in the /scripts folder
| Variable | Example | Description |
|---|---|---|
| S6_KILL_FINISH_MAXTIME | S6_KILL_FINISH_MAXTIME=55000 | The maximum time (in ms) a script in /etc/cont-finish.d could take before sending a KILL signal to it. Take into account that this parameter will be used per each script execution, it's not a max time for the whole set of scripts. This value has a max of 65535 on Alpine variants. |
| S6_KILL_GRACETIME | S6_KILL_GRACETIME=500 | Wait time (in ms) for S6 finish scripts before sending kill signal. This value has a max of 65535 on Alpine variants. |
with-contenv tool, which is used to expose environment variables across scripts, has a limitation that it cannot read beyond 4k characters for environment variable values. To work around this issue, use the script /scripts/with-bigcontenv instead of with-contenv. You'll need to remove the with-contenv from the shebang line, and add source /scripts/with-bigcontenv in the next line after the shebang line.To inject changes just before runtime, shell scripts may be placed into the
/etc/cont-init.d folder.
As part of the process manager, these scripts are run in advance of the supervised processes. @see https://github.com/just-containers/s6-overlay#executing-initialization-andor-finalization-tasks
All variants are tested on x64 and arm64.
The convenience script archstring is provided to switch between strings based on the current machine.
Usage:
archstring --x64 intel --arm64 arm
Which will return "intel" when on x64 and arm when on arm64. This is handy when package names or download paths need to be modified per architecture.
./container/root/goss.base.yaml file.test.sh. It uses dgoss validator. To add additional run-time tests, extend ./test.sh and ./goss.yaml file.More advanced changes can take effect using the run.d system. Similar to the /etc/cont-init.d/ script system, any shell scripts (ending in .sh) in the /run.d/ folder will be executed ahead of the S6 initialization.
run.d script terminates with a non-zero exit code, container will stop, terminating with the script's exit code, unless...${1}).finish script is specified, service gets restarted, with no further actionfinish script specifies to bring the container down, admin-initiated container termination behavior applies (below).docker stop or admin-initiated container termination:S6_KILL_GRACETIME corresponds with how long to wait for a SIGTERM to complete and return. This first signal can be trapped/intercepted to convert into a graceful stop (see below). Failure for the supervised service to respond to the signal within S6_KILL_GRACETIME will result in an untrappable SIGKILL./etc/cont-finish.d are executed, each with S6_KILL_FINISH_MAXTIME.${1}).S6_KILL_FINISH_MAXTIME long-enough to shutdown/drain service properly. See table above for upper limits.run script. Take no action directly at this time./etc/cont-finish.d directory. Supervised service must terminate itself as a result, within S6_KILL_FINISH_MAXTIME time. Some examples include: sending alternate shutdown control signals (like SIGWINCH or SIGQUIT),This container image can be used with multiple entrypoints (not to be confused with Docker entrypoints).
For example, a codebase that runs a web service, but also requires crons and background workers. These processes should not run inside the same container (like a VM would), but can be executed separately from the same image artifact by adding arguments to the run command.
docker run {image_id} /worker.sh 3 /bin/binary -parameters -that -binary -receives
Runs 3 copies of /bin/binary that receives the parameters -parameters -that -binary -receives
Besides the instructions contained in the Dockerfile, the majority of this
container's use is in configuration and process. The ./container/root repo directory is overlayed into a container during build. Adding additional files to the folders in there will be present in the final image. All paths from the following explanation are assumed from the repo's ./root/ base:
| Directory | Use |
|---|---|
/etc/cont-init.d/ | startup scripts that run ahead of services booting: https://github.com/just-containers/s6-overlay#executing-initialization-andor-finalization-tasks |
/etc/fix-attrs.d/ | scripts that may fix permissions at runtime: https://github.com/just-containers/s6-overlay#fixing-ownership--permissions |
/etc/services.d/ | services that will be supervised by S6: https://github.com/just-containers/s6-overlay#writing-a-service-script |
/etc/services-available/ | same as above, but must be symlinked into /etc/services.d/ to take effect |
/run.d/ | shell scripts (ending in .sh) that make runtime modifications ahead of S6 initialization |
/scripts | convenience scripts that can be leveraged in derived images |
Content type
Image
Digest
sha256:e07bb3e7a…
Size
36.5 MB
Last updated
over 3 years ago
docker pull behance/docker-base