Como Parametrizar o Compose com Variáveis de Ambiente
~/devops-kube-news$ vim compose.yaml
As variáveis são definidas com ${}
:
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}
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
Maneiras de Passar os Valores
Existem duas formas de passar os valores para as variáveis:
Comando de subida do Docker Compose
~/devops-kube-news$ POSTGRES_TAG=12.17 \
POSTGRES_PASSWORD=kubenews \
POSTGRES_USER=kubenews \
POSTGRES_DB=kubenews \
KUBENEWS_TAG=v2 \
docker compose up -d
[+] Running 15/15
✔ postgre Pulled 16.7s
✔ c57ee5000d61 Pull complete 6.5s
✔ 488633c8ea56 Pull complete 6.5s
✔ b225155ec9af Pull complete 6.7s
✔ 3ac67b1cae65 Pull complete 6.7s
✔ d61f871f8508 Pull complete 7.0s
✔ 54b907a1ec71 Pull complete 7.1s
✔ a237b518eb0c Pull complete 7.1s
✔ 84e65f02e2ea Pull complete 7.2s
✔ 719de8b4249b Pull complete 12.7s
✔ a92b8318c401 Pull complete 12.7s
✔ a919920e6eed Pull complete 12.7s
✔ 2ab6f140e216 Pull complete 12.8s
✔ f8632183bfbd Pull complete 12.8s
✔ 4c25b193a2b6 Pull complete 12.8s
[+] Running 2/2
✔ Container devops-kube-news-postgre-1 Started 0.5s
✔ Container devops-kube-news-kubenews-1 Started 1.2s
Para verificar as configurações aplicadas pode-se utilizar o docker compose config
:
~/devops-kube-news$ POSTGRES_TAG=12.17 \
POSTGRES_PASSWORD=kubenews \
POSTGRES_USER=kubenews \
POSTGRES_DB=kubenews \
KUBENEWS_TAG=v2 \
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:12.17
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
Arquivo de Ambiente
Utilizar um arquivo .env
:
~/devops-kube-news$ touch .env
~/devops-kube-news$ vim .env
~/devops-kube-news$ cat .env
POSTGRES_TAG=12.17
POSTGRES_PASSWORD=kubenews
POSTGRES_USER=kubenews
POSTGRES_DB=kubenews
KUBENEWS_TAG=v2
~/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:12.17
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
~/devops-kube-news$ docker compose up -d
[+] Running 2/2
✔ Container devops-kube-news-postgre-1 Started 0.3s
✔ Container devops-kube-news-kubenews-1 Started 0.8s
Por padrão o arquivo .env é considerado, porém também pode ser especificado caso queira utilizar arquivos de ambiente diferentes (i.e., dev.env, hom.env, prd.env etc.)
~/devops-kube-news$ docker compose --env-file .env up -d
[+] Running 2/2
✔ Container devops-kube-news-postgre-1 Started 0.3s
✔ Container devops-kube-news-kubenews-1 Started 0.8s
Valores Padrão
Caso não sejam definidos valores para as variáveis de ambiente podem ser considerados valores padrão utilizando :-
ficando ${KUBENEW_TAG:-latest}.
Retirar a declaração da variável de ambiente do arquivo .env
:
~/devops-kube-news$ cat .env
POSTGRES_TAG=12.17
POSTGRES_PASSWORD=kubenews
POSTGRES_USER=kubenews
POSTGRES_DB=kubenews
Editar o arquivo compose.yaml:
~/devops-kube-news$ vim 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
Destaque para:
kubenews:
image: marcelodpbarbieri/kube-news:${KUBENEWS_TAG:-latest}
Verificação da configuração:
~/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:latest
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:12.17
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:latest
Construção de Imagem
Se a tag v6 não existir ele cria a imagem:
~/devops-kube-news$ KUBENEWS_TAG=v6 docker compose --env-file .env build
[+] Building 1.1s (11/11) FINISHED docker:default
=> [kubenews internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 163B 0.0s
=> [kubenews internal] load metadata for docker.io/library/node:20.10.0-al 1.0s
=> [kubenews internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [kubenews 1/5] FROM docker.io/library/node:20.10.0-alpine3.18@sha256:32 0.0s
=> [kubenews internal] load build context 0.0s
=> => transferring context: 830B 0.0s
=> CACHED [kubenews 2/5] WORKDIR /app 0.0s
=> CACHED [kubenews 3/5] COPY package*.json . 0.0s
=> CACHED [kubenews 4/5] RUN npm install 0.0s
=> CACHED [kubenews 5/5] COPY . . 0.0s
=> [kubenews] exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:157ac0c3edb100e995c900a98bd8dd4021b907964ec992d 0.0s
=> => naming to docker.io/marcelodpbarbieri/kube-news:v6 0.0s
=> [kubenews] resolving provenance for metadata file 0.0s
marcelo@Latitude5440:~/devops-kube-news$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
marcelodpbarbieri/kube-news v6 157ac0c3edb1 25 hours ago 169MB
...
Last updated