Orquestrando serviços
Os serviços:
graph LR; A["API (FastAPI) fa:fa-globe"] B[("Banco de Dados (PG) fa:fa-cubes")] A --> B
Docker compose
Para iniciar a nossa API + o Banco de dados vamos precisar de um orquestrador de containers, em produção isso será feito com Kubernetes mas no ambiente de desenvolvimento podemos usar o docker compose.
No arquivo docker-compose.yaml
- Definimos 2 serviços
api
edb
- Informamos os parametros de build com os dockerfiles
- Na
api
abrimos a porta8000
- Na
api
passamos 2 variáveis de ambienteDUNDIE_DB__uri
eDUNDIE_DB_connect_args
para usarmos na conexão com o DB - Marcamos que a
api
depende dodb
para iniciar. - No
db
informamos o setup básico do postgres e pedimos para criar 2 bancos de dados, um para a app e um para testes.
docker-compose.yaml
version: '3.9'
services:
api:
build:
context: .
dockerfile: Dockerfile.dev
ports:
- "8000:8000"
environment:
DUNDIE_DB__uri: "postgresql://postgres:postgres@db:5432/${DUNDIE_DB:-dundie}"
DUNDIE_DB__connect_args: "{}"
SQLALCHEMY_SILENCE_UBER_WARNING: 1
volumes:
- .:/home/app/api
depends_on:
- db
stdin_open: true
tty: true
db:
build: postgres
image: dundie_postgres-13-alpine-multi-user
volumes:
- dundie_pg_data:/var/lib/postgresql/data
ports:
- "5432:5432"
environment:
- POSTGRES_DBS=dundie, dundie_test
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
volumes:
dundie_pg_data:
O próximo passo é estando na raiz do repositório executar:
docker compose up -d
Para verificar os serviços que estão rodando:
$ docker compose ps
Name Command State Ports
api_1 /bin/sh -c uvicorn dundie... Up 8000
db_1 docker-entrypoint.sh postgres Up 5432