Compose
Exemplo genérico
---
services:
app_service:
container_name: app_name
image: bolha/app:v0.0.1
restart: always
environment:
TZ: "America/Sao_Paulo"
depends_on:
- app_database
volumes:
- /opt/bolha/config:/config
ports:
- 8080:8080"
networks:
- app_network
deploy:
resources:
limits:
cpus: '4'
memory: 1024M
reservations:
cpus: '2'
memory: 256M
app_database:
container_name: app_database
image: bolha/database:v0.0.1
restart: always
environment:
TZ: "America/Sao_Paulo"
volumes:
- /opt/bolha/database:/var/lib/database
networks:
- app_network
deploy:
resources:
limits:
cpus: '4'
memory: 1024M
reservations:
cpus: '2'
memory: 256M
networks:
app_network:
Definindo um host e servidores de DNS para o container
extra_hosts:
- "web.bolha.local=192.168.200.200"
dns:
- 192.168.222.12
- 192.168.222.13
- 192.168.222.14
Definindo limites para recursos
Configurando driver JSON para logs
Configurando log syslog
Healthcheck em serviços usando wget
healthcheck:
test: wget --no-verbose --tries=1 --spider http://localhost || exit 1
interval: 60s
retries: 5
start_period: 20s
timeout: 10s
Healthcheck em serviços usando curl
healthcheck:
test: curl --fail http://localhost || exit 1
interval: 60s
retries: 5
start_period: 20s
timeout: 10s
Reutilizando bloco YAML em serviços
x-minio-common: &minio-common
image: quay.io/minio/minio:RELEASE.2024-05-28T17-19-04Z-cpuv1
restart: always
expose:
- "9000"
- "9001"
environment:
TZ: "America/Sao_Paulo"
healthcheck:
test: ["CMD", "mc", "ready", "local"]
interval: 5s
timeout: 5s
retries: 5
services:
minio1:
<<: *minio-common
hostname: minio1
volumes:
- /opt/minio/storage/data1-1:/data1
- /opt/minio/storage/data1-2:/data2
minio2:
<<: *minio-common
hostname: minio2
volumes:
- /opt/minio/storage/data2-1:/data1
- /opt/minio/storage/data2-2:/data2
minio3:
<<: *minio-common
hostname: minio3
volumes:
- /opt/minio/storage/data3-1:/data1
- /opt/minio/storage/data3-2:/data2
minio4:
<<: *minio-common
hostname: minio4
volumes:
- /opt/minio/storage/data4-1:/data1
- /opt/minio/storage/data4-2:/data2
Definindo IP dentro do service
services:
frontend:
image: example/webapp
networks:
front-tier:
ipv4_address: 172.16.238.10
ipv6_address: 2001:3984:3989::10
networks:
front-tier:
ipam:
driver: default
config:
- subnet: "172.16.238.0/24"
- subnet: "2001:3984:3989::/64"
Configurando rede com detalhes usando IPAM
networks:
mynet1:
ipam:
driver: default
config:
- subnet: 172.28.0.0/16
ip_range: 172.28.5.0/24
gateway: 172.28.5.254
aux_addresses:
host1: 172.28.1.5
host2: 172.28.1.6
host3: 172.28.1.7
options:
foo: bar
baz: "0"
Configurando volume tipo NFS
volumes:
example:
driver_opts:
type: "nfs"
o: "addr=10.40.0.199,nolock,soft,rw"
device: ":/docker/example"
Configurando volume tipo BIND
services:
postgresql:
container_name: postgresql
image: "postgres:${POSTGRESQL_VERSION}"
env_file:
- database.env
- versions.env
restart: always
shm_size: 256mb
healthcheck:
test: ['CMD', 'pg_isready', '-U', 'mastodon']
volumes:
- postgresql:/var/lib/postgresql/data
networks:
- internal_network
deploy:
resources:
limits:
cpus: '4'
memory: 6144M
reservations:
cpus: '2'
memory: 2048M
volumes:
postgresql:
driver_opts:
type: none
device: /opt/mastodon/data/database/postgresql
o: bind
Reutilizando environments
services:
first:
image: my-image:latest
environment: &env
- CONFIG_KEY
- EXAMPLE_KEY
- DEMO_VAR
second:
image: another-image:latest
environment: *env
Fazendo include de outros arquivos YAML