cheatsheets/docker-compose.md

217 lines
2.7 KiB
Markdown

---
title: docker-compose
category: Devops
layout: 2017/sheet
prism_languages: [yaml]
weight: -1
updated: 2018-06-26
---
### Basic example
```yaml
# docker-compose.yml
version: '2'
services:
web:
build: .
# build from Dockerfile
context: ./Path
dockerfile: Dockerfile
ports:
- "5000:5000"
volumes:
- .:/code
redis:
image: redis
```
### Commands
```sh
docker-compose start
docker-compose stop
```
```sh
docker-compose pause
docker-compose unpause
```
```sh
docker-compose ps
docker-compose up
docker-compose down
```
## Reference
{: .-three-column}
### Building
```yaml
web:
# build from Dockerfile
build: .
```
```yaml
# build from custom Dockerfile
build:
context: ./dir
dockerfile: Dockerfile.dev
```
```yaml
# build from image
image: ubuntu
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry:4000/postgresql
image: a4bc65fd
```
### Ports
```yaml
ports:
- "3000"
- "8000:80" # guest:host
```
```yaml
# expose ports to linked services (not to host)
expose: ["3000"]
```
### Commands
```yaml
# command to execute
command: bundle exec thin -p 3000
command: [bundle, exec, thin, -p, 3000]
```
```yaml
# override the entrypoint
entrypoint: /app/start.sh
entrypoint: [php, -d, vendor/bin/phpunit]
```
### Environment variables
```yaml
# environment vars
environment:
RACK_ENV: development
environment:
- RACK_ENV=development
```
```yaml
# environment vars from file
env_file: .env
env_file: [.env, .development.env]
```
### Dependencies
```yaml
# makes the `db` service available as the hostname `database`
# (implies depends_on)
links:
- db:database
- redis
```
```yaml
# make sure `db` is alive before starting
depends_on:
- db
```
### Other options
```yaml
# make this service extend another
extends:
file: common.yml # optional
service: webapp
```
```yaml
volumes:
- /var/lib/mysql
- ./_data:/var/lib/mysql
```
## Advanced features
{: .-three-column}
### Labels
```yaml
services:
web:
labels:
com.example.description: "Accounting web app"
```
### DNS servers
```yaml
services:
web:
dns: 8.8.8.8
dns:
- 8.8.8.8
- 8.8.4.4
```
### Devices
```yaml
services:
web:
devices:
- "/dev/ttyUSB0:/dev/ttyUSB0"
```
### External links
```yaml
services:
web:
external_links:
- redis_1
- project_db_1:mysql
```
### Hosts
```yaml
services:
web:
extra_hosts:
- "somehost:192.168.1.100"
```
### Network
```yaml
# creates a custom network called `frontend`
networks:
frontend:
```
### External network
```yaml
# join a pre-existing network
networks:
default:
external:
name: frontend
```