The docker decorator¶
If the “docker” decorator is used, then all command lines will be prefixed with /usr/bin/docker run and related docker arguments found in $(/DOCKER_OPTIONS/<pattern>. Here, <pattern> matches the name of the current dodo command. For example, consider this configuration:
DOCKER_OPTIONS:
# * will match any name
'*':
image: foobar:base
volume_map:
${/ROOT/src_dir}: /srv/foobar/src
# docker options when running the 'django-manage' command
'django-manage':
extra_options:
- '--publish=127.0.0.1:27017:27017'
Running the django-manage command will produce something like this:
# note that docker options for django-manage are looked up in ${/DOCKER_OPTIONS}
# where it will match with '*' and 'django-manage'
dodo django-manage --echo
# outputs:
docker run
--rm --interactive --tty
--name=django-manage
--volume=/home/maarten/projects/foobar/src:/srv/foobar/src
--publish=127.0.0.1:80:80
foobar:base
python manage.py
$(/DOCKER_OPTIONS/<pattern>/image}¶
Identifies the docker image.
$(/DOCKER_OPTIONS/<pattern>/name}¶
Used to name the docker docker container (defaults to the name of the dodo command).
$(/DOCKER_OPTIONS/<pattern>/volume_map}¶
Each key-value pair will be added as a docker volume (where ‘key’ in the host maps to ‘value’ in the docker container)
$(/DOCKER_OPTIONS/<pattern>/volume_map_strict}¶
Each key-value pair is added as a docker volume. If the key does not exist as a local path, an error is raised.
$(/DOCKER_OPTIONS/<pattern>/volume_list}¶
Each item will be added as a docker volume (where ‘item’ in the host maps to ‘item’ in the docker container)
$(/DOCKER_OPTIONS/<pattern>/publish_map}¶
Each key-value pair will be added as a docker published port
$(/DOCKER_OPTIONS/<pattern>/publish_list}¶
Each item will be added as a docker published port
$(/DOCKER_OPTIONS/<pattern>/volumes_from_list}¶
Each item will be added as a docker “volumes_from” argument
$(/DOCKER_OPTIONS/<pattern>/link_list}¶
Each item will be added as a docker “link” argument
$(/DOCKER_OPTIONS/<pattern>/variable_list}¶
Each environment variable will be added as an environment variable in the docker container. Variables in variable_list have the same name in the host and in the container.
$(/DOCKER_OPTIONS/<pattern>/variable_map}¶
Each key-value pair will be added as an environment variable in the docker container.
${/DOCKER_OPTIONS/<pattern>/extra_options}¶
Key-value pairs are passed as extra options to the docker command line call.
$(/ENVIRONMENT/variable_map}¶
Each key-value pair will be added as an environment variable in the docker container.
$(/DOCKER_OPTIONS/<pattern>/rm}¶
Decides if the docker container is automatically removed (defaults to True).
$(/DOCKER_OPTIONS/<pattern>/is_interactive}¶
Decides if the -i and -t flags are added.
Matching multiple names¶
It’s possible to match multiple names using a list:
DOCKER_OPTIONS:
['django-manage', 'django-runserver']:
extra_options:
- '--publish=127.0.0.1:27017:27017'
Patterns starting with ‘!’ indicate names that should be excluded:
DOCKER_OPTIONS:
# match django-manage but not django-runserver
['django-*', '!django-runserver']:
extra_options:
- '--publish=127.0.0.1:27017:27017'