Tutoriais

Docker Compose na prática: subindo uma aplicação completa

Docker Compose na prática: subindo uma aplicação completa

Com o Docker Compose, você descreve todos os serviços de uma aplicação em um único arquivo YAML e sobe tudo com um comando. Neste exemplo, vamos montar um WordPress com MariaDB e Redis.

Pré-requisitos

  • Docker instalado com o plugin Compose (docker compose version);
  • Um proxy reverso (Nginx, Caddy ou Traefik) para HTTPS — ou use temporariamente uma porta local para testar.

1. Estrutura do projeto

mkdir -p ~/apps/blog && cd ~/apps/blog

2. Variáveis de ambiente

Crie um arquivo .env (e nunca o envie para repositórios públicos):

MYSQL_ROOT_PASSWORD=troque_esta_senha_root
MYSQL_DATABASE=wordpress
MYSQL_USER=wp
MYSQL_PASSWORD=troque_esta_senha
chmod 600 .env

3. O arquivo compose.yaml

services:
  db:
    image: mariadb:11
    restart: unless-stopped
    environment:
      MARIADB_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MARIADB_DATABASE: ${MYSQL_DATABASE}
      MARIADB_USER: ${MYSQL_USER}
      MARIADB_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - db_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    command: ["redis-server", "--maxmemory", "128mb", "--maxmemory-policy", "allkeys-lru"]

  wordpress:
    image: wordpress:php8.3-apache
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
      WORDPRESS_DB_USER: ${MYSQL_USER}
      WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
      WORDPRESS_CONFIG_EXTRA: |
        define('WP_REDIS_HOST', 'redis');
    volumes:
      - wp_data:/var/www/html
    ports:
      - "127.0.0.1:8080:80"

volumes:
  db_data:
  wp_data:

Destaques

  • restart: unless-stopped — os serviços voltam sozinhos após reinicializações;
  • Volumes nomeados — os dados sobrevivem à recriação dos containers;
  • Rede interna automática — os serviços se encontram pelo nome (db, redis);
  • healthcheck + depends_on — o WordPress só sobe quando o banco está pronto;
  • 127.0.0.1:8080:80 — o WordPress fica acessível apenas localmente, atrás do proxy reverso.

4. Suba a aplicação

docker compose up -d
docker compose ps
docker compose logs -f wordpress

5. Configure o proxy reverso (Nginx)

server {
    server_name blog.seudominio.com.br;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Depois, emita o SSL com o Certbot. Para o WordPress reconhecer o HTTPS atrás do proxy, adicione ao WORDPRESS_CONFIG_EXTRA:

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { $_SERVER['HTTPS'] = 'on'; }

Comandos do dia a dia

docker compose pull && docker compose up -d   # atualiza as imagens
docker compose restart wordpress
docker compose down                           # para e remove containers (volumes ficam)
docker compose exec db mariadb -u root -p     # acessa o banco

Backup

docker compose exec -T db sh -c 'mariadb-dump -u root -p"$MARIADB_ROOT_PASSWORD" --all-databases' > backup.sql
docker run --rm -v blog_wp_data:/dados -v $(pwd):/backup alpine tar czf /backup/wp_data.tar.gz -C /dados .

O nome do volume é prefixado pelo nome do projeto (a pasta). Confira com docker volume ls.

Conclusão

Com Docker Compose, sua infraestrutura vira código: fácil de versionar, replicar e atualizar. Rode suas stacks em um VPS-NVME-BR da VittHost, com NVMe e servidores no Brasil.Use o cupom SP-VITT20 e ganhe 20% de desconto na primeira fatura enquanto a promoção estiver ativa.

Compartilhar:

Pronto para hospedar seu próximo projeto?

VPS com painel pré-instalado em 1 clique. Ativação imediata.

Ver planos VPS