Docker profiles: Scenario based services

2021-07-29 2 min read

Sometimes you need some services only in certain scenarios. Docker Compose has a handy feature to achieve this; profiles.

How it works

  • Assign each service to zero or more profiles
  • If unassigned, the service is always started
  • If assigned, it's only started if the profile is actived

How to use

Here's a sample docker-compose.yaml file below for the examples in the following sections.

docker-compose.yaml
version: '3.9'
services:
  frontend:
    image: frontend
    profiles: ['frontend'] # <--- attention here

  backend:
    image: backend

  debugger:
    image: my-debugger
    depends_on:
      - db
    profiles: # <--- attention here
      - debug

  db:
    image: postgresql

There are profiles assigned to two of the services in the above example. The frontend service is assigned to the frontend profile, while the debugger service is assigned to the profile debug.

Unlike other services, backend and db services do not have profiles. So they always start. But the frontend and debugger services will only be started when you activate their profiles.

Examples:

The below command would start the backend and db services by default.

$ docker-compose up

The following command would also start the debugger service along with the backend and db services. That's because we enabled the debug profile:

$ docker-compose --profile debug up

The below command would enable multiple profiles, frontend and debug, at once and start the frontend and debugger services besides the backend and db services.

$ docker-compose --profile frontend --profile debug up

You can also use the COMPOSE_PROFILES environment variable to specify which profiles to enable:

$ COMPOSE_PROFILES=frontend,debug docker-compose up
Date: 2021-07-29
Categories: development
Tags: docker