New Relic has Open Sourced their tool for managing Docker deployments across multiple environments.
Centurion is a DSL for defining environment variables, Docker hosts to deploy to, volumes, and ports. Centurion can be used to define these on a per environment basis, ensuring the same image is shipped with the correct configuration for the environment it is being deployed to.
Centurion can even handle rolling deploys by deploying to a host and checking a specific URL to become available before moving to the next host.
Here's an example of Centurion in action:
namespace :environment do task :common do set :image, 'example.com/newrelic/radio-radio' host 'docker-server-1.example.com' host 'docker-server-2.example.com' end desc 'Staging environment' task :staging => :common do set_current_environment(:staging) env_vars YOUR_ENV: 'staging' env_vars MY_DB: 'radio-db.example.com' host_port 10234, container_port: 9292 host_port 10235, container_port: 9293 host_volume '/mnt/volume1', container_volume: '/mnt/volume2' end desc 'Production environment' task :production => :common do set_current_environment(:production) env_vars YOUR_ENV: 'production' env_vars MY_DB: 'radio-db-prod.example.com' host_port 22234, container_port: 9292 host_port 23235, container_port: 9293 command ['/bin/bash', '-c', '/path/to/server -e production'] end end
Docker was unveiled at DockerCon 2014 in the talk Docker Deployments: Powerful for Developers, Painless for Ops by Karl Matthais and Paul Showalter
Centurion is available as a Ruby gem and source is on Github.