- One-line setup and bootup:
docker-compose up. It creates the database, does the Dialyzer pre-work (if the project has Dialyxer installed), etc.
- A true development-oriented config: Source code is mounted so that changes in the container appear on the host, and vice-versa.
- Fast re-builds because the
DOCKERFILEis written to help Docker cache the images.
- Syncing with the Postgres startup delay.
- All the crappy little dependencies installed.
- No weird hacks.
Now the three files, followed by instructions and my comments (or jump straight to the GitHub Repo):
How to Dockerize a Phoenix app
- Copy the three config files to the root folder of an existing Phoenix project. Make
chmod +x run.sh.
- Edit your development database settings to connect to Postgres at host
postgres, password is an empty string.
- Spin it up with
The Phoenix app should be up and running at
http://localhost:4000. Something like this:
Now a little about this configuration
It’s the result of several hours spent fine-tuning it and going through the Docker file references. I wanted a “online-liner” container-based dev environment. To get this, I started with a Rails Docker config and got a boost from this excellent post by Alex Kleissner. He had the nice idea of a run.sh script to do some things like synchronize Phoenix and Postgres.