Criação de perfis de execução.
Especificar somente um arquivo compose.yaml conforme abaixo:
Copy services:
kubenews:
image: marcelodpbarbieri/kube-news:${KUBENEWS_TAG:-latest}
build:
context: ./src
dockerfile: Dockerfile
ports:
- 8080:8080
depends_on:
- postgre
environment:
DB_DATABASE: ${POSTGRES_DB}
DB_USERNAME: ${POSTGRES_USER}
DB_PASSWORD: ${POSTGRES_PASSWORD}
DB_HOST: postgre
networks:
- kubenews-net
postgre:
image: postgres:${POSTGRES_TAG}
ports:
- 5432:5432
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- postgre-docker-vol:/var/lib/postgresql/data
networks:
- kubenews-net
include:
- ./kubenews.compose.yaml
volumes:
postgre-docker-vol:
networks:
kubenews-net:
driver: bridge
Subida do Docker Compose para garantia do funcionamento:
Copy ~/devops-kube-news$ docker compose up -d
[+] Running 2/0
✔ Container devops-kube-news-postgre-1 Running 0.0s
✔ Container devops-kube-news-kubenews-1 Running 0.0s
Por exemplo, deseja-se que o container postgre seja criado somente nos ambientes de desenvolvimento e homologação:
Copy services:
kubenews:
image: marcelodpbarbieri/kube-news:${KUBENEWS_TAG:-latest}
build:
context: ./src
dockerfile: Dockerfile
ports:
- 8080:8080
depends_on:
- postgre
environment:
DB_DATABASE: ${POSTGRES_DB}
DB_USERNAME: ${POSTGRES_USER}
DB_PASSWORD: ${POSTGRES_PASSWORD}
DB_HOST: postgre
networks:
- kubenews-net
postgre:
image: postgres:${POSTGRES_TAG}
ports:
- 5432:5432
profiles:
- dev
- hml
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- postgre-docker-vol:/var/lib/postgresql/data
networks:
- kubenews-net
volumes:
postgre-docker-vol:
networks:
kubenews-net:
driver: bridge
Destaque para:
Copy profiles:
- dev
- hml
Tentativa de subir o Docker Compose sem especificar o profile:
Copy ~/devops-kube-news$ docker compose up -d
service "kubenews" depends on undefined service "postgre": invalid compose project
Como não foi especificado o profile, o Docker Compose verifica a existência do depends_on. Faz-se necessário retirá-lo do arquivo compose.yaml porque nem sempre o container postgre será criado.
Arquivo compose.yaml:
Copy services:
kubenews:
image: marcelodpbarbieri/kube-news:${KUBENEWS_TAG:-latest}
build:
context: ./src
dockerfile: Dockerfile
ports:
- 8080:8080
environment:
DB_DATABASE: ${POSTGRES_DB}
DB_USERNAME: ${POSTGRES_USER}
DB_PASSWORD: ${POSTGRES_PASSWORD}
DB_HOST: postgre
networks:
- kubenews-net
postgre:
image: postgres:${POSTGRES_TAG}
ports:
- 5432:5432
profiles:
- dev
- hml
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- postgre-docker-vol:/var/lib/postgresql/data
networks:
- kubenews-net
volumes:
postgre-docker-vol:
networks:
kubenews-net:
driver: bridge
Destaque para o serviço kubenews sem a especificação depends_on.
Novamente subir o Docker Compose sem a instrução do profile:
Copy ~/devops-kube-news$ docker compose up -d
[+] Running 1/1
✔ Container devops-kube-news-kubenews-1 Started 10.9s
Somente o container kubenews foi criado.
Agora, subir o Docker Compose com a instrução do profile:
Copy ~/devops-kube-news$ docker compose --profile dev up -d
[+] Running 2/2
✔ Container devops-kube-news-kubenews-1 Running 0.0s
✔ Container devops-kube-news-postgre-1 Started 1.0s
O container postgre é criado!
Last updated 8 months ago