A base image for running just about anything within a container, based on Ubuntu 14.04.
Aren't you only supposed to run one process per container? Well yes and no... the following are good examples of when multiple processes within one container might be necessary:
- automatically updating nginx proxy settings when a down-stream application server (nodejs, php, etc) restarts (and the IP changes)
- automatically updating HAProxy configuration to load balance to a group of down-stream application servers
- running a logging daemon to centralize log management (i.e. logentries, loggly, logstash)
- when you need to run a script on application server crash (to tidy something up), as the standard Docker container restart policies won't provide this
To use this image include
FROM smebberson/ubuntu-base at the top of your
Dockerfile. Inheriting from
smebberson/ubuntu-base provides you with the ability to easily start any service using s6. s6 will also keep it running for you, restarting it when it crashes.
To start your service using s6:
- create a folder at
- create a file in your new folder called
runand give it execute permissions
- inside that file start your service, for example:
#!/usr/bin/env bash # start nginx exec nginx;
If you want to run a script when your application stops, simply:
- create a file in your
finishand give it execute permissions
In this file, do whatever you need to, but keep it quick and simple (anything over 3 seconds and s6 will force quit it). Once this script has run, s6 will call
/etc/s6/service_name/run again to restart your service.
Crashes, logs, no-restarts?
s6 has a number of other options that you can use to gain more information about your process and what's happening to them.