Skip to content

Commit

Permalink
Merge pull request #1027 from praekelt/feature/issue-1027-docker-entr…
Browse files Browse the repository at this point in the history
…ypoint

Add a Docker entrypoint script for easier process starting
  • Loading branch information
JayH5 committed Mar 7, 2016
2 parents aaa44a1 + ef8134b commit 0cc3836
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 4 deletions.
4 changes: 0 additions & 4 deletions Dockerfile

This file was deleted.

11 changes: 11 additions & 0 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
FROM praekeltfoundation/python-base
MAINTAINER Praekelt Foundation <dev@praekeltfoundation.org>

ENV VUMI_VERSION "0.6.2"
RUN pip install vumi==$VUMI_VERSION

COPY ./vumi-entrypoint.sh /app/vumi-entrypoint.sh
WORKDIR /app

ENTRYPOINT ["eval-args.sh", "dinit", "/app/vumi-entrypoint.sh"]
CMD []
60 changes: 60 additions & 0 deletions docker/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# Vumi Docker image
Documentation for Vumi is available online at http://vumi.readthedocs.org/ and in the `docs` directory of the repository.

## Usage
The Docker image provides an entrypoint for Vumi that allows the configuration of Vumi workers via environment variables.

### Environment variables
#### Basic options:
* `TWISTD_COMMAND`: the command to pass to `twistd` (default: `vumi_worker`)
* `WORKER_CLASS`: the Vumi worker class to use
* `CONFIG_FILE`: the path to the YAML configuration file to use
* `SENTRY_DSN`: the Sentry DSN to use for reporting errors

#### AMQP options:
AMQP/RabbitMQ options can be set via environment variables. At a minimum, the `AMQP_HOST` variable must be set or else none of the other AMQP variables will take effect.
* `AMQP_HOST`: the address for the RabbitMQ server
* `AMQP_PORT`: the port for the RabbitMQ server (default: `5672`)
* `AMQP_VHOST`: the name of the RabbitMQ vhost to use (default: `/`)
* `AMQP_USERNAME`: the username to authenticate with RabbitMQ (default: `guest`)
* `AMQP_PASSWORD`: the password to authenticate with RabbitMQ (default: `guest`)

#### `VUMI_OPT_` options
Additional options can be passed to Vumi via variables that start with `VUMI_OPT_`. These variables will be converted to `--set-option` CLI options. For example, the environment variable `VUMI_OPT_BUCKET=1` will result in the CLI option `--set-option=bucket:1`.

### `/app` directory
The `/app` directory is created and set as the current working directory. This is the directory where the files (e.g. YAML config) for your application should be put.

### Examples
Running a built-in worker class without a config file:
```shell
docker run --rm -it \
-e WORKER_CLASS=vumi.blinkenlights.MetricTimeBucket \
-e AMQP_HOST=rabbitmq.service.consul \
-e VUMI_OPT_BUCKETS=3 \
-e VUMI_OPT_BUCKET_SIZE=10 \
praekeltfoundation/vumi
```

Dockerfile for an image with an external worker class and a config file:
```dockerfile
FROM praekeltfoundation/vumi
RUN pip install vumi-http-api
COPY ./my-config.yaml /app/my-config.yaml
ENV WORKER_CLASS="vumi_http_api.VumiApiWorker" \
CONFIG_FILE="my-config.yaml" \
AMQP_HOST="rabbitmq.service.consul"
EXPOSE 8000
```

Dockerfile for an image with custom arguments:
```dockerfile
FROM praekeltfoundation/vumi
RUN pip install go-metrics-api
COPY ./my-config.yaml /app/my-config.yaml
ENV TWISTD_COMMAND="cyclone"
EXPOSE 8000
CMD ["--app", "go_metrics.server.MetricsApi", \
"--port", "8000", \
"--app-opts", "my-config.yaml"]
```
38 changes: 38 additions & 0 deletions docker/vumi-entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/bin/bash -e

TWISTD_COMMAND="${TWISTD_COMMAND:-vumi_worker}"

WORKER_CLASS_OPT=""
if [ -n "$WORKER_CLASS" ]; then
WORKER_CLASS_OPT="--worker-class $WORKER_CLASS"
fi

CONFIG_OPT=""
if [ -n "$CONFIG_FILE" ]; then
CONFIG_OPT="--config $CONFIG_FILE"
fi

AMQP_OPTS=""
if [ -n "$AMQP_HOST" ]; then
AMQP_OPTS="--hostname $AMQP_HOST \
--port ${AMQP_PORT:-5672} \
--vhost ${AMQP_VHOST:-/} \
--username ${AMQP_USERNAME:-guest} \
--password ${AMQP_PASSWORD:-guest}"
fi

SENTRY_OPT=""
if [ -n "$SENTRY_DSN" ]; then
SENTRY_OPT="--sentry $SENTRY_DSN"
fi

SET_OPTS=$(env | grep ^VUMI_OPT_ | sed -e 's/^VUMI_OPT_//' -e 's/=/ /' | awk '{printf("%s=%s:%s ", "--set-option", tolower($1), $2);}')

exec twistd --nodaemon \
$TWISTD_COMMAND \
$WORKER_CLASS_OPT \
$CONFIG_OPT \
$AMQP_OPTS \
$SENTRY_OPT \
$SET_OPTS \
"$@"

0 comments on commit 0cc3836

Please sign in to comment.