Definitions e Instances

Entenda como templates se transformam em containers rodando no servidor.

Conceitos

Definition

Uma definition é um template preenchido com parâmetros específicos. Ela representa a intenção de ter um serviço configurado de determinada forma.

Template MySQL 8.4
      +
Parâmetros (senha, nome do banco, usuário)
      =
Definition "mysql_meu_banco"

Instance

Uma instance é a materialização de uma definition. Representa um container em execução no servidor.

Definition "mysql_meu_banco"
      ↓
Docker container rodando
      =
Instance (container_id: abc123)

Ciclo de Vida

┌─────────────┐
│   Template  │
│   (Spec)    │
└──────┬──────┘
       │ deploy
       ▼
┌─────────────┐
│  Definition │←──────────────┐
│  (Pending)  │               │
└──────┬──────┘               │
       │ create               │ update
       ▼                      │
┌─────────────┐               │
│  Definition │───────────────┘
│  (Active)   │
└──────┬──────┘
       │
       ▼
┌─────────────┐
│   Instance  │
│  (Running)  │
└─────────────┘

Estados da Definition

Estado Descrição
pending Criada, aguardando deploy
active Deploy realizado, container existe
stopped Container parado intencionalmente
error Falha no deploy ou execução
deleted Marcada para remoção

Estados da Instance

Estado Descrição
running Container em execução
stopped Container parado
restarting Container reiniciando
unhealthy Health check falhando
removed Container não existe mais

Criando uma Definition

Via CLI

deployally deploy --species mysql --version 8.4

O CLI solicita os parâmetros e cria a definition automaticamente.

Parâmetros Interativos

? Nome do banco de dados: meu_banco
? Usuário do banco: meu_usuario
? Senha do banco: ********
? Profile [minimal/development/production]: development

Criando definition "mysql_meu_banco"...
Fazendo deploy...
Container criado com sucesso!

Gerenciando Definitions

Listar Definitions

deployally definitions list

Saída:

NAME              TEMPLATE    STATUS    SERVER
mysql_meu_banco   mysql:8.4   active    servidor-01
redis_cache       redis:7     active    servidor-01
wordpress_site    wp:6        pending   servidor-02

Ver Detalhes

deployally definitions show mysql_meu_banco

Atualizar Definition

deployally definitions update mysql_meu_banco --profile production

Atualizar uma definition cria uma nova revisão e pode recriar o container.

Remover Definition

deployally definitions delete mysql_meu_banco

Remove a definition e o container associado.

Revisions

Cada alteração em uma definition cria uma revisão:

mysql_meu_banco
├── revision 1: profile=development
├── revision 2: profile=production (atual)
└── revision 3: (rollback disponível)

Ver Histórico

deployally definitions history mysql_meu_banco

Rollback

deployally definitions rollback mysql_meu_banco --revision 1

Sincronização

O DeployAlly mantém definitions e instances sincronizadas:

Definition         Instance          Ação
─────────────────────────────────────────────
active             running           OK
active             stopped           Restart
active             removed           Recreate
stopped            running           Stop
deleted            running           Remove

Detectando Drift

Se alguém modificar o container manualmente, o DeployAlly detecta a diferença:

deployally sync --check

Saída:

DEFINITION          STATUS    DRIFT
mysql_meu_banco     active    none
redis_cache         active    CONFIG_CHANGED
wordpress_site      active    CONTAINER_MISSING

Corrigir Drift

deployally sync --fix

Instances

Ver Instances

deployally instances list

Saída:

CONTAINER           STATUS     HEALTH     UPTIME      DEFINITION
mysql_meu_banco     running    healthy    2d 5h       mysql_meu_banco
redis_cache         running    healthy    2d 5h       redis_cache

Logs

deployally instances logs mysql_meu_banco

Restart

deployally instances restart mysql_meu_banco

Exec

deployally instances exec mysql_meu_banco -- mysql -u root -p

Boas Práticas

  1. Sempre use definitions: Não crie containers manualmente
  2. Use profiles: development, production conforme o ambiente
  3. Monitore drift: Execute sync --check regularmente
  4. Versionamento: Acompanhe revisões para rollback
  5. Nomenclatura: Use nomes descritivos (mysql_app_principal)

Próximos Passos

By Borlot.com.br on 13/02/2026