CodeGym /Cursos /Docker SELF /Variáveis de ambiente no Docker Compose

Variáveis de ambiente no Docker Compose

Docker SELF
Nível 16 , Lição 0
Disponível

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.

Yaml

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:

.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.

Yaml

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:

Terminal

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.

Terminal

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:

Yaml

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:

.env

NGINX_VERSION=1.19.3
HOST_PORT=8080
DB_USER=myuser
DB_PASSWORD=mypassword

Crie um arquivo compose.yaml, que usa essas variáveis:

Yaml

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:

Terminal

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:

.env

NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=devuser
DB_PASSWORD=devpassword

Arquivo .env.prod:

.env

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:

Yaml

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:

Terminal

docker compose --env-file .env.dev up

Inicie o Docker Compose para produção:

Terminal

docker compose --env-file .env.prod up
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION