Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Elixir on Docker

Quickly get started developing clustered Elixir applications for cloud environments.

See a walkthrough of developing a chat application from this template

This project template provides a set of sensible defaults for a new application designed to be cloud native. It includes:

  • A main service www, this serves the main content offered by your application.
  • Secure HTTP/2 content delivery with Ace web server.
  • Code reloading in development environment using ExSync.
  • Automatic clustering. Setup for docker-cloud other environments coming soon.
  • Web based metrics, monitoring and observing with Wobserver.
  • Documentation driven development with Raxx.ApiBlueprint.
  • Integration test suit running from the integration service.

Get Started

To use this template docker and docker-compose need to be installed on your machine.

Clone this repository

Change project-name to your projects name.

git clone <url> <project-name>
cd <project-name>

Delete git history.

rm -r .git

Fetch dependencies

docker-compose run --rm www mix deps.get

All mix tasks for a service can be run this way, such as tests for a single service.

Run all services

docker-compose up

Use -d to run in the background. Use --build to ensure images are rebuilt. Use docker-compose down to stop all services.

Run integration tests

docker-compose \
-f docker-compose.yml \
-f docker-compose-test.yml \
run integration /bin/bash -c "mix deps.get; mix test"

The -f flag specifies a compose file to use when starting services.

Attach iex session

docker ps
# Find container-id to attach to.

docker exec -it <container-id> sh bin/debug

# in iex shell
iex(debug@<hostname>)1> Node.connect(:"app@<hostname>")