⌘K

05 – Docker — Variáveis de Ambiente: O Guia Prático para Configurar seus Containers

Last updated

Se você desenvolve aplicações, gerencia bancos de dados ou constrói pipelines de dados, sabe que existe uma regra de ouro no DevOps: nunca coloque senhas, chaves de API ou credenciais diretamente no código-fonte.

Para manter nosso código limpo, seguro e portável entre ambientes (desenvolvimento, homologação e produção), nós usamos as Variáveis de Ambiente (as famosas Environment Variables ou ENVs).

No mundo dos containers, as variáveis de ambiente ganham um papel ainda mais vital. Como as imagens Docker são imutáveis (você não deve alterá-las depois de buildadas), as variáveis de ambiente são a ferramenta perfeita para customizar o comportamento da sua aplicação no momento exato em que o container é iniciado.

Neste post, vamos entender como elas funcionam e quais as três principais maneiras de passá-las na execução de um container.

O que são e como funcionam as Variáveis de Ambiente no Docker?

Pense nelas como caixas de texto com um par de CHAVE=VALOR que ficam guardadas dentro do sistema operacional do container.

Quando sua aplicação inicia (um script Python de ETL, uma API em Node.js ou um banco de dados), ela lê essas caixas para saber como deve se comportar. Por exemplo, a imagem oficial do PostgreSQL precisa saber qual senha você deseja definir para o usuário administrador. Em vez de você alterar arquivos internos de configuração, você simplesmente diz ao Docker: “Inicie este container com a variável POSTGRES_PASSWORD=minha_senha_secreta.

Como passar Variáveis de Ambiente na execução do container

1
Método Direto

Usando a flag -e no terminal

Ideal para testes rápidos ou quando você precisa passar apenas uma ou duas variáveis diretamente no comando docker run:

docker run -d --name meu_postgres -e POSTGRES_PASSWORD=producao123 postgres:15-alpine

Você pode repetir a flag -e quantas vezes precisar no mesmo comando.

2
Método Organizado

Usando um arquivo .env externo

Quando a aplicação exige muitas configurações, passar tudo na linha de comando fica inviável. Você pode criar um arquivo de texto simples chamado .env (ou meu-banco.env):

DB_HOST=db_dados
DB_USER=admin
DB_PASS=senha_secreta_456

E então, basta chamar esse arquivo usando a flag --env-file:

docker run -d --env-file meu-banco.env minha-api-dados
3
Método Declarativo

Declarando no Docker Compose

Se você já está orquestrando seus containers de forma profissional com o Docker Compose, pode injetar a propriedade environment direto no serviço do arquivo YAML:

services:
  web:
    image: nginx:alpine
    environment:
      - APP_ENV=production
      - DEBUG=false

Como conferir se a variável realmente entrou no container?

Ficou na dúvida se o container realmente engoliu a variável que você passou? O Docker possui um comando de inspeção muito robusto que te mostra as entranhas do container rodando no momento.

Você pode usar o comando docker inspect filtrando pelas variáveis, ou de um jeito bem mais simples e visual: “entre” no terminal do container e peça para o Linux listar as variáveis do sistema.

Inspecionando ENVs rodando no container
$ docker exec -it meu_postgres env

Esse comando vai disparar o utilitário env do Linux interno do container, listando na sua tela todas as chaves e valores injetados ativas na sessão atual.

⚠️ Dica Crítica de Segurança (.gitignore neles!): Se você optar por usar o método 2 (arquivos .env), certifique-se imediatamente de adicionar o padrão *.env no seu arquivo .gitignore do Git. Você quer essas variáveis rodando na sua máquina e no servidor de produção, mas nunca quer que esse arquivo seja empurrado para o seu repositório público do GitHub!

Aprender a isolar configurações de infraestrutura usando variáveis de ambiente é o que permite que uma mesma imagem Docker rode na máquina de um desenvolvedor júnior, passe por testes automatizados em uma esteira de CI/CD e termine escalando em produção dentro de um cluster Kubernetes sem mudar uma única linha de código.

Still stuck? How can we help? Get Help