O Docker Compose descreve num único arquivo uma aplicação inteira: o programa, o banco de dados, as redes entre eles e os volumes onde os dados ficam. Um comando, docker compose up -d, levanta tudo. Fica aqui um exemplo com a aplicação e o PostgreSQL, num VPS com o Docker já instalado (veja como). A mesma estrutura serve para MariaDB ou MySQL: muda a imagem e as variáveis.
Montar o projeto
| 1 |
Crie uma pasta só para o projeto e entre nela: mkdir meu-projecto && cd meu-projecto. O nome da pasta torna-se o nome do projeto no Compose.
|
|
| 2 |
Crie o arquivo .env com as senhas, e proteja-o: DB_PASSWORD=ponha-aqui-uma-palavra-passe-longa-e-aleatoriachmod 600 .env. Se usar Git, ponha o .env no .gitignore. Nunca o publique.
|
|
| 3 |
Crie o arquivo compose.yaml (o nome docker-compose.yml também funciona):services: app: build: . restart: unless-stopped env_file: .env environment: DB_HOST: db ports: - "127.0.0.1:3000:3000" depends_on: db: condition: service_healthy db: image: postgres:16 restart: unless-stopped environment: POSTGRES_USER: appuser POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_DB: appdb volumes: - db_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U appuser -d appdb"] interval: 10s timeout: 5s retries: 5 volumes: db_data:
|
|
| 4 |
Levante tudo e veja o estado: docker compose up -d docker compose ps docker compose logs -f appO Compose cria uma rede privada para o projeto.
|
|
O que cada parte faz
| Parte |
O que faz |
Por quê assim |
DB_HOST: db |
A aplicação encontra o banco de dados pelo nome do serviço. |
Dentro da rede do Compose não se usa localhost nem o IP: cada serviço é um computador à parte. |
127.0.0.1:3000:3000 |
Publica a porta da aplicação só no próprio servidor. |
Quem a mostra ao mundo é um proxy com HTTPS: veja nginx como proxy reverso. |
Nenhuma porta no db |
O banco de dados não é alcançável de fora. |
É o desejado. Os outros serviços chegam-lhe pela rede interna. |
db_data (volume) |
Onde ficam os dados do banco de dados. |
Sem volume, apagar o contêiner apaga os dados. |
healthcheck e service_healthy |
A aplicação só inicia quando o banco de dados já aceita conexões. |
depends_on sozinho só espera que o contêiner exista, não que esteja pronto. |
O endereço de conexão, dentro da aplicação, fica assim: postgres://appuser:SENHA@db:5432/appdb. Se a senha tiver caracteres especiais (@, :, /), têm de ir codificados no endereço, ou escolha uma sem eles.
|
As variáveis POSTGRES_* só valem na primeira vez. Servem para criar o banco de dados quando o volume está vazio. Se mudar a senha no arquivo depois de a base existir, o banco de dados não muda, e a aplicação deixa de entrar. Muda-se com um comando dentro do banco de dados. E o docker compose down -v apaga os volumes, ou seja, os dados: sem o -v, um down só remove os contêineres.
|
|
O VPS tem de ser seu, com root. Se ainda não tem, veja os planos: o Docker e a aplicação ficam à sua conta, e a rede e o servidor à nossa.
Ver os servidores VPS
|
PRODUTO RECOMENDADO Servidor VPS com acesso root Recursos só seus, o sistema que escolher, reinstalação quando quiser. desde R$ 46,20/mês (plano de 3 anos, com cupom) Ver planos |