6.1 Fundamentos das variáveis de ambiente
As variáveis de ambiente têm um papel importante na configuração de aplicações, permitindo mudar dinamicamente o comportamento e parâmetros dos serviços sem alterar o código. O Docker Compose suporta o uso de variáveis de ambiente para configurar os containers, o que garante flexibilidade e facilidade no gerenciamento da configuração.
Uma das maneiras mais práticas de gerenciar variáveis de ambiente é usando arquivos .env
. Nessa aula, vamos detalhar como usar variáveis de ambiente no Docker Compose, incluindo a criação e o uso de arquivos .env
.
Fundamentos das variáveis de ambiente no Docker Compose
As variáveis de ambiente podem ser usadas no arquivo compose.yaml
para parametrizar configurações. Essas variáveis podem ser definidas no arquivo .env
, no próprio compose.yaml
, ou passadas diretamente via linha de comando.
Exemplo de uso de variáveis de ambiente no compose.yaml
:
Neste exemplo, são usadas as variáveis NGINX_VERSION
e HOST_PORT
, cujos valores podem ser definidos no arquivo .env
ou através da linha de comando.
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
6.2 Usando arquivos .env
1. Criando um arquivo .env
O arquivo .env
é colocado no mesmo diretório que o compose.yaml
e contém pares "chave-valor" que definem os valores das variáveis de ambiente. Cada variável é escrita em uma nova linha.
Exemplo de arquivo .env
:
NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=admin
DB_PASSWORD=secret
2. Integração do arquivo .env
com o Docker Compose
O Docker Compose carrega automaticamente as variáveis do arquivo .env
se ele estiver no mesmo diretório que o compose.yaml
.
Exemplo de arquivo compose.yaml
usando variáveis de ambiente:
Neste exemplo, as variáveis NGINX_VERSION
, HOST_PORT
, DB_USER
e DB_PASSWORD
são recuperadas do arquivo .env
.
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
6.3 Passando variáveis
Passando variáveis pela linha de comando
Você pode passar variáveis de ambiente diretamente pela linha de comando usando o comando export
em sistemas Unix-like ou usando o parâmetro --env-file
no Docker Compose.
Exemplo de uso do export
:
export NGINX_VERSION=latest
export HOST_PORT=8080
docker compose up
Exemplo de uso do --env-file
:
Você pode especificar um arquivo alternativo com variáveis de ambiente usando o parâmetro --env-file
.
docker compose --env-file .env.dev up
Usando variáveis de ambiente embutidas no Docker Compose
O Docker Compose suporta variáveis de ambiente embutidas, como ${PWD}
, que representam o diretório de trabalho atual.
Exemplo:
version: '3.8'
services:
app:
image: myapp:latest
volumes:
- ${PWD}/app:/app
6.4 Exemplos práticos
Exemplos práticos de uso de variáveis de ambiente:
Exemplo 1: Configuração de servidor web e banco de dados
Crie um arquivo .env
com os parâmetros para o servidor web e banco de dados:
NGINX_VERSION=1.19.3
HOST_PORT=8080
DB_USER=myuser
DB_PASSWORD=mypassword
Crie um arquivo compose.yaml
, que usa essas variáveis:
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
Inicie o Docker Compose:
docker compose up
Exemplo 2: Separação de ambientes para desenvolvimento e produção
Crie dois arquivos .env
para diferentes ambientes: .env.dev
e .env.prod
.
Arquivo .env.dev
:
NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=devuser
DB_PASSWORD=devpassword
Arquivo .env.prod
:
NGINX_VERSION=1.19.3
HOST_PORT=80
DB_USER=produser
DB_PASSWORD=prodpassword
Crie um arquivo compose.yaml
, que usa variáveis desses arquivos:
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
Inicie o Docker Compose para desenvolvimento:
docker compose --env-file .env.dev up
Inicie o Docker Compose para produção:
docker compose --env-file .env.prod up
GO TO FULL VERSION