Merge
Combinação de múltiplos arquivos
Edição do arquivo compose.yaml para retornar para ele todas as configurações extendidas no arquivo kubenews.compose.yaml:
services:
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
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
volumes:
postgre-docker-vol:
networks:
kubenews-net:
driver: bridge
Renomear o arquivo kubenews.compose.yaml para compose.override.yaml:
~/devops-kube-news$ mv kubenews.compose.yaml compose.override.yaml
Por padrão, o Docker Compose entende que o arquivo compose.override.yaml sobrescreverá o arquivo compose.yaml
Ao invés de utilizar a tag v1 definida no arquivo .env fosse desejado utilizar a tag v2:
POSTGRES_TAG=13.16
POSTGRES_PASSWORD=kubenews
POSTGRES_USER=kubenews
POSTGRES_DB=kubenews
KUBENEWS_TAG=v1
~/devops-kube-news$ vim compose.override.yaml
~/devops-kube-news$ cat compose.override.yaml
services:
kubenews:
image: marcelodpbarbieri/kube-news:v2
Verificar a configuração do Docker Compose:
~/devops-kube-news$ docker compose config
name: devops-kube-news
services:
kubenews:
build:
context: /home/marcelo/devops-kube-news/src
dockerfile: Dockerfile
depends_on:
postgre:
condition: service_started
required: true
environment:
DB_DATABASE: kubenews
DB_HOST: postgre
DB_PASSWORD: kubenews
DB_USERNAME: kubenews
image: marcelodpbarbieri/kube-news:v2
networks:
kubenews-net: null
ports:
- mode: ingress
target: 8080
published: "8080"
protocol: tcp
postgre:
environment:
POSTGRES_DB: kubenews
POSTGRES_PASSWORD: kubenews
POSTGRES_USER: kubenews
image: postgres:13.16
networks:
kubenews-net: null
ports:
- mode: ingress
target: 5432
published: "5432"
protocol: tcp
volumes:
- type: volume
source: postgre-docker-vol
target: /var/lib/postgresql/data
volume: {}
networks:
kubenews-net:
name: devops-kube-news_kubenews-net
driver: bridge
volumes:
postgre-docker-vol:
name: devops-kube-news_postgre-docker-vol
Destaque para:
image: marcelodpbarbieri/kube-news:v2
O Merge não é simplemente a sobrescrita de uma informação, mas pode ser o complemento. Por exemplo, adicionar portas extras:
~/devops-kube-news$ vim compose.override.yaml
~/devops-kube-news$ cat compose.override.yaml
services:
kubenews:
image: marcelodpbarbieri/kube-news:v2
ports:
- 8181:8080
Verificar a configuração do Docker Compose:
name: devops-kube-news
services:
kubenews:
build:
context: /home/marcelo/devops-kube-news/src
dockerfile: Dockerfile
depends_on:
postgre:
condition: service_started
required: true
environment:
DB_DATABASE: kubenews
DB_HOST: postgre
DB_PASSWORD: kubenews
DB_USERNAME: kubenews
image: marcelodpbarbieri/kube-news:v2
networks:
kubenews-net: null
ports:
- mode: ingress
target: 8080
published: "8080"
protocol: tcp
- mode: ingress
target: 8080
published: "8181"
protocol: tcp
postgre:
environment:
POSTGRES_DB: kubenews
POSTGRES_PASSWORD: kubenews
POSTGRES_USER: kubenews
image: postgres:13.16
networks:
kubenews-net: null
ports:
- mode: ingress
target: 5432
published: "5432"
protocol: tcp
volumes:
- type: volume
source: postgre-docker-vol
target: /var/lib/postgresql/data
volume: {}
networks:
kubenews-net:
name: devops-kube-news_kubenews-net
driver: bridge
volumes:
postgre-docker-vol:
name: devops-kube-news_postgre-docker-vol
Destaque para:
ports:
- mode: ingress
target: 8080
published: "8080"
protocol: tcp
- mode: ingress
target: 8080
published: "8181"
protocol: tcp
Pode ser utilizado uma nomenclatura que não seja padrão. Por exemplo compose.dev.yaml, compose.hml.yaml etc..
Renomear o arquivo compose.override.yaml para compose.dev.yaml:
~/devops-kube-news$ mv compose.override.yaml compose.dev.yaml
Faz-se necessário inserir a instrução -f com os arquivos que sobrescreverão as informações na ordem:
~/devops-kube-news$ docker compose -f compose.yaml -f compose.dev.yaml config
name: devops-kube-news
services:
kubenews:
build:
context: /home/marcelo/devops-kube-news/src
dockerfile: Dockerfile
depends_on:
postgre:
condition: service_started
required: true
environment:
DB_DATABASE: kubenews
DB_HOST: postgre
DB_PASSWORD: kubenews
DB_USERNAME: kubenews
image: marcelodpbarbieri/kube-news:v2
networks:
kubenews-net: null
ports:
- mode: ingress
target: 8080
published: "8080"
protocol: tcp
- mode: ingress
target: 8080
published: "8181"
protocol: tcp
postgre:
environment:
POSTGRES_DB: kubenews
POSTGRES_PASSWORD: kubenews
POSTGRES_USER: kubenews
image: postgres:13.16
networks:
kubenews-net: null
ports:
- mode: ingress
target: 5432
published: "5432"
protocol: tcp
volumes:
- type: volume
source: postgre-docker-vol
target: /var/lib/postgresql/data
volume: {}
networks:
kubenews-net:
name: devops-kube-news_kubenews-net
driver: bridge
volumes:
postgre-docker-vol:
name: devops-kube-news_postgre-docker-vol
Subida do Docker Compose:
~/devops-kube-news$ docker compose \
-f compose.yaml \
-f compose.dev.yaml up -d \
--remove-orphans
[+] Running 3/3
✔ Container devops-kube-news-web-1 Removed 0.0s
✔ Container devops-kube-news-postgre-1 Running 0.0s
✔ Container devops-kube-news-kubenews-1 Started 0.3s
Containers em execução:
~/devops-kube-news$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
90c4e36f0e0c marcelodpbarbieri/kube-news:v2 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:8181->8080/tcp, :::8181->8080/tcp devops-kube-news-kubenews-1
714ad5cda5a6 postgres:13.16 "docker-entrypoint.s…" 44 minutes ago Up 44 minutes 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp devops-kube-news-postgre-1
Last updated