ANÚNCIO

~/questoes/devops

Como usar variáveis de ambiente no Docker Compose?

Responda, confira o feedback e use o resultado para orientar sua revisão.
Para fixar

Variáveis de Ambiente no Docker Compose

Conceito central

Variáveis de ambiente no Docker Compose permitem que você use valores dinâmicos no arquivo docker-compose.yml, tornando-o reutilizável em diferentes contextos sem precisar modificar o arquivo a cada ambiente.

Por que essa resposta faz sentido

A sintaxe ${NOME_VARIAVEL} permite que o Docker Compose substitua valores em tempo de execução, lendo as variáveis do sistema operacional ou de um arquivo .env. Assim, o mesmo arquivo funciona em desenvolvimento, teste e produção sem alterações.

Armadilhas comuns

  • Esquecer de criar o arquivo .env com as variáveis definidas e deixar ${VARIAVEL} sem valor, causando erros em tempo de execução.
  • Confundir variáveis de ambiente do Docker Compose com variáveis de ambiente dentro do container, que são coisas diferentes e usam sintaxes distintas.
  • Tentar usar valores literais entre chaves sem o cifrão, como {NOME_VARIAVEL} em vez de ${NOME_VARIAVEL}, o que não funciona.

Entenda as alternativas

A

Usar ${NOME_VARIAVEL} é o padrão correto do Docker Compose. Você define variáveis em um arquivo .env ou no sistema operacional, e o Compose as substitui automaticamente quando você executa docker-compose up. Isso torna o arquivo reutilizável e seguro para diferentes ambientes.

B

Modificar o Dockerfile manualmente a cada alteração é ineficiente e contrário à filosofia do Docker. O Dockerfile deve ser imutável e reutilizável. As variáveis devem ser gerenciadas no docker-compose.yml ou em arquivos .env, não no Dockerfile.

C

Definir valores fixos em cada serviço é extremamente inflexível. Se você precisar usar a mesma composição em outro computador ou ambiente com configurações diferentes, terá que editar o arquivo manualmente. Variáveis de ambiente existem justamente para evitar isso.

D

Criar um novo arquivo docker-compose para cada contexto é trabalhoso e difícil de manter. Você teria múltiplos arquivos praticamente idênticos, apenas com valores diferentes. Variáveis de ambiente eliminam essa necessidade mantendo um único arquivo.

Dica prática: Crie um arquivo .env na raiz do seu projeto com conteúdo como DB_PASSWORD=senha123 e DB_USER=admin. Depois, no docker-compose.yml, use environment: PASSWORD=${DB_PASSWORD} ou simplesmente referência no serviço. O Docker Compose lê automaticamente o arquivo .env.

Revise pensando: Se você quiser que seu docker-compose.yml funcione em três máquinas diferentes com senhas de banco de dados distintas, qual abordagem você usaria?