Netskin Logo

Mini-Tip: Refactor Docker Compose configs

#docker
#yaml
by Tom Rothe on 13.07.2023

Docker Compose is a great tool to deploy a development environment. By defining a docker-compose.yml, we can specify which services are needed and how they need to interact. A new developer can just check out the project, run docker compose up and it will orchestrate all required containers automatically.

Sometimes it is necessary that services share certain configurations. For example, it might be useful if two services share the same environment variables or volumes. This might lead to duplication, and we all know how it is: when we need to make a super-quick change, we might forget to change the other occurrence, and 5 minutes wasted on debugging…

In order to DRY up the docker-compose.yml, we can use two concepts:

Here is an example of a config file which has been DRY’ed up using this technique:

version: '3.4'

x-env: &devenv
  - EMAIL_HOST=smtp
  - API_ENDPOINT='https://api.example.com'
  - OTHER_SETTING=jajaja

services:
  web:
    command: bash -c 'sleep 100d'
    environment:
      *devenv
    ports:
      - 4000:3000

  worker:
    image: superworker:15
    environment:
      *devenv

Now there is no duplication. 🍾

Happy coding!

❮ File Uploads in Rails with the Shrine Gem
Auto-generate Plain-Text Emails ❯
Netskin Logo