# docker-compose.yml
version: '3.3'
service: # Typo here
app:
image: nginx/alpine
$ docker-compose config
ERROR: The Compose file is invalid because:
Invalid top-level property "service".
Valid top-level sections for this Compose file are:
version, services, networks, volumes, secrets, configs,
and extensions starting with "x-".
# docker-compose.yml
version: '3.3'
services:
app:
image: nginx/alpine
$ docker-compose config
services:
app:
image: nginx/alpine
version: '3.3'
Side note: changed order of yml sections
# docker-compose.yml
version: '3.3'
services:
app:
image: my-registry/my-docker-image:${TAG}
$ export TAG=v3.1.0
$ docker-compose config
services:
app:
image: my-registry/my-docker-image:v3.1.0
version: '3.3'
Defaults could be provided with the syntax:
# .env
TAG=v3.2.0
# docker-compose.yml
version: '3.3'
services:
app:
image: my-registry/my-docker-image:${TAG}
$ docker-compose config
services:
app:
image: my-registry/my-docker-image:v3.2.0
version: '3.3'
If a .env file exists, it'll be used as source for env vars.
# docker-compose.yml
version: "3.3"
services:
app:
image: nginx/alpine
# docker-compose.prod.yml
version: "3.3"
services:
app:
volumes:
- "./config/:/app/config/"
$ docker-compose -f docker-compose.yml -f docker-compose.prod.yml config
services:
app:
image: nginx/alpine
volumes:
- /absolute/path/calculated/config:/app/config:rw
version: '3.3'
# docker-compose.yml
version: "3.3"
services:
app:
image: nginx/alpine
ports:
- "8080:8080"
# docker-compose.prod.yml
version: "3.3"
services:
app:
ports:
- "8181:8080"
$ docker-compose -f docker-compose.yml -f docker-compose.prod.yml config
services:
app:
image: nginx/alpine
ports:
- "8080:8080"
- "8181:8080"
version: '3.3'
# docker-compose.local.yml
version: "3.3"
services:
app:
ports:
- "8080:8080"
# docker-compose.prod.yml
version: "3.3"
services:
app:
ports:
- "8181:8080"
# docker-compose.yml
version: "3.3"
services:
app:
image: my-registry/my-image:$TAG
$ TAG=v6.6.6 docker-compose -f docker-compose.yml -f docker-compose.prod.yml config
services:
app:
image: my-registry/my-image:v6.6.6
ports:
- "8181:8080"
version: '3.3'
# .env
COMPOSE_FILE=docker-compose.yml:docker-compose.local.yml
# ":" separated string
TAG=latest
$ docker-compose config
services:
app:
image: my-registry/my-image:latest
ports:
- "8080:8080"
version: '3.3'
# docker-compose.serviceB.yml
version: '3.7'
services:
serviceB:
build: { "context": "." }
networks:
otherComposeNetwork:
aliases:
- ${NETWORK_SERVICE_ALIAS:-serviceB}
networks:
otherComposeNetwork:
external:
name: ${NETWORK_NAME:-crystal_framework}
$ docker network list
NETWORK ID NAME DRIVER SCOPE
b753eefc8242 somecompose_network bridge local
$ docker-compose -f other-compose.yml stop serviceName
$ export NETWORK_SERVICE_ALIAS=serviceName
$ export NETWORK_NAME=somecompose_network
$ docker-compose up
Et voila'!
$ docker-compose exec serviceName npm integration
version: '3.4'
x-logging:
&default-logging
options:
max-size: '12m'
max-file: '5'
driver: json-file
services:
web:
image: myapp/web:latest
logging: *default-logging
db:
image: mysql:latest
logging: *default-logging
$ docker-compose config
services:
db:
image: mysql:latest
logging:
driver: json-file
options:
max-file: '5'
max-size: 12m
web:
image: myapp/web:latest
logging:
driver: json-file
options:
max-file: '5'
max-size: 12m
version: '3.4'