Docker Compose
2019. 08. 24
Jaewoo KIM

๐Contents
1. ๋์ปค ์ปดํฌ์ฆ๋
2. YAML ํ์ผ ๊ตฌ์ฑ์์
3. ๋์ปค ์ปดํฌ์ฆ CLI
4. ์ค์ต
๋์ปค ์ปดํฌ์ฆ๋
๋์ปค ์ปดํฌ์ฆ๋
๋์ปค ์ปดํฌ์ฆ๋ฅผ ์ฌ์ฉํ๋ ์ด์
์ฌ๋ฌ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ๊ด๋ฆฌํ๊ธฐ์๋ ๋๋ฌด ๋ฒ๊ฑฐ๋กญ๋ค.


๋์ปค ์ปดํฌ์ฆ๋
๋์ปค ์ปดํฌ์ฆ๋ฅผ ์ฌ์ฉํ๋ ์ด์
์ฌ๋ฌ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ๊ด๋ฆฌํ๊ธฐ์ ๋๋ฌด ๋ฒ๊ฑฐ๋กญ๋ค

๋์ปค ์ปดํฌ์ฆ๋
๋์ปค ์ปดํฌ์ฆ๋ฅผ ์ฌ์ฉํ๋ ์ด์
์ฌ๋ฌ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ํ๋์ ํ๋ก์ ํธ๋ก์ ๋ค๋ฃฐ ์ ์๋ ์์ ํ๊ฒฝ์ ์ ๊ณตํ๋ค.

๋์ปค ์ปดํฌ์ฆ๋
์ฌ๋ฌ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ํ๋์ ํ๋ก์ ํธ๋ก์ ๋ค๋ฃฐ ์ ์๋ ์์ ํ๊ฒฝ์ ์ ๊ณตํ๋ค.
๋์ปค ์ปดํฌ์ฆ๋ฅผ ์ฌ์ฉํ๋ ์ด์
docker-compose.yml
ํ๋ก์ ํธ
์๋น์ค
์ปจํ ์ด๋
ubuntu
mysql
web




YAML ํ์ผ ๊ตฌ์ฑ์์
YAML ํ์ผ ๊ตฌ์ฑ์์
YAML ํ์ผ ๊ตฌ์ฑ์์
YAML ํ์ผ์ ํฌ๊ฒ 4๊ฐ์ง ํญ๋ชฉ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
- ๋ฒ์ ์ ์
- ์๋น์ค ์ ์
- ๋ณผ๋ฅจ ์ ์
- ๋คํธ์ํฌ ์ ์
version: '2'
services:
...
volumes:
...
network:
...
YAML ํ์ผ - ๋ฒ์ ์ ์
ํ์ผ ํฌ๋ฉง์ ๋ช ์ํ ์ ์๋ค.ย
YAML ํ์ผ ๊ตฌ์ฑ์์
YAML ํ์ผ - ์๋น์ค ์ ์
์๋น์ค์ ์ด๋ฆ์ service์ ํ์ ํญ๋ชฉ์ผ๋ก ์ ์ํ๋ค
services:
my_container_1:
image: ...
my_container_2:
image: ...
YAML ํ์ผ ๊ตฌ์ฑ์์
YAML ํ์ผ - ์๋น์ค ์ ์
์๋น์ค ์ปจํ ์ด๋๋ฅผ ์์ฑํ ๋ ์ฐ์ผ ์ด๋ฏธ์ง์ ์ด๋ฆ์ ์ค์ ํ๋ค.
services:
my_container_1:
image: wooddy/composetest:mysql
YAML ํ์ผ ๊ตฌ์ฑ์์
YAML ํ์ผ - ์๋น์ค ์ ์
์๋น์ค ์ปจํ ์ด๋ ๋ด๋ถ์์ ์ฌ์ฉํ ํ๊ฒฝ๋ณ์๋ฅผ ์ง์ ํ๋ค.
services:
web:
enviroment:
- MYSQL_PORT_PASSWORD=mypassword
- MYSQL_DATABASE_NAME=mydb
enviroment:
MYSQL_ROOT_PASSWORD: mypassword
MYSQL_DATABASE_NAME: mydb
YAML ํ์ผ ๊ตฌ์ฑ์์
YAML ํ์ผ - ์๋น์ค ์ ์
๋ค๋ฅธ ์๋น์ค์ ์๋น์ค๋ช ๋ง์ผ๋ก ์ ๊ทผํ ์ ์๋๋ก ์ค์ ํ๋ค
services:
web:
links:
- db
- db:database
- redis
YAML ํ์ผ ๊ตฌ์ฑ์์
YAML ํ์ผ - ์๋น์ค ์ ์
์๋น์ค ์ปจํ ์ด๋ ๋ด๋ถ์์ ์ฌ์ฉํ ํ๊ฒฝ๋ณ์๋ฅผ ์ง์ ํ๋ค.
services:
web:
image: wooddy/composetest:web
command: apachectl -DFOREGROUND
web:
image: wooddy/composetest:web
command: [apchectl, -DFOREGROUND]
YAML ํ์ผ ๊ตฌ์ฑ์์
YAML ํ์ผ - ์๋น์ค ์ ์
ํน์ ์ปจํ ์ด๋์ ๋ํ ์์กด ๊ด๊ณ๋ฅผ ๋ํ๋ธ๋ค.
services:
web:
image: wooddy/composetest:web
depends_on
- mysql
mysql:
image: wooddy/composetest:mysql
YAML ํ์ผ ๊ตฌ์ฑ์์
YAML ํ์ผ - ์๋น์ค ์ ์
์๋น์ค์ ์ปจํ ์ด๋๋ฅผ ๊ฐ๋ฐฉํ ํฌํธ๋ฅผ ์ค์ ํ๋ค.
services:
web:
image: wooddy/composetest:web
ports:
- "8000"
- "8081-8005"
- "80:80"
YAML ํ์ผ ๊ตฌ์ฑ์์
YAML ํ์ผ - ์๋น์ค ์ ์
๋์ปคํ์ผ์์ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํด ์๋น์ค์ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋๋ก ํ๋ค.
services:
web:
bulid: ./composetest
image: wooddy/composetest:web
YAML ํ์ผ ๊ตฌ์ฑ์์
YAML ํ์ผ - ์๋น์ค ์ ์
๋ค๋ฅธ YAMLํ์ผ์ด๋ ํ์ฌ YAML ํ์ผ์์ ์๋น์ค ์์ฑ์ ์์๋ฐ๊ฒ ์ค์ ํ๋ค.
YAML ํ์ผ ๊ตฌ์ฑ์์
-- docker-compose.yml
version: '3.0'
service:
web:
extends:
file: extend_compose.yml
service: extend_web
-- extend_compose.yml
version: '3.0'
service:
extend_web:
image: ubuntu:14.04
ports:
- "80:80"
YAML ํ์ผ - ์๋น์ค ์ ์
๋ค๋ฅธ YAMLํ์ผ์ด๋ ํ์ฌ YAML ํ์ผ์์ ์๋น์ค ์์ฑ์ ์์๋ฐ๊ฒ ์ค์ ํ๋ค.
YAML ํ์ผ ๊ตฌ์ฑ์์
version: '3.0'
service:
web:
extends:
file: extend_compose.yml
service: extend_web
extend_web:
image: ubuntu:14.04
ports:
- "80:80"
YAML ํ์ผ - ๋คํธ์ํฌ ์ ์
YAML ํ์ผ ๊ตฌ์ฑ์์
YAML ํ์ผ - ๋ณผ๋ฅจ ์ ์
๋ณผ๋ฅจ์ ์์ฑํ ๋ ์ฌ์ฉ๋ ๋๋ผ์ด๋ฒ๋ฅผ ์ค์ ํ๋ค
YAML ํ์ผ ๊ตฌ์ฑ์์
version: '3.0'
services:
...
volumes:
driver: overlay2
driver_opts:
opt: "1"
opt2: 2

YAML ํ์ผ - ์๋น์ค ์ ์
์๋น์ค ์ปจํ ์ด๋ ๋ด๋ถ์์ ์ฌ์ฉํ ํ๊ฒฝ๋ณ์๋ฅผ ์ง์ ํ๋ค.
YAML ํ์ผ ๊ตฌ์ฑ์์
version: '3.0'
services:
image: wooddy/composetest:web
volume:
- myvolume:/var/www/html
volumes:
myvolume:
external: true
YAML ํ์ผ - ๊ฒ์ฆํ๊ธฐ
YAML ํ์ผ์ ์์ฑํ ๋ ์คํ ๊ฒ์ฌ๋ ํ์ผ ํฌ๋งท์ด ์ ์ ํ์ง ๊ฒ์ฌํ ์ ์๋ค.
YAML ํ์ผ ๊ตฌ์ฑ์์
โ docker-compose config
services:
db:
container_name: mysql-5.7
environment:
...
image: mysql:5.7
ports:
- published: 3306
target: 3306
restart: always
volumes:
- db-data:/var/lib/mysql:rw
- /Users/jwoos/projects/springboot-bbs/init:/docker-entrypoint-initdb.d:rw
version: '3.3'
volumes:
db-data: {}
YAML ํ์ผ - ๋ณต์ตํ๊ธฐ
YAML ํ์ผ ๊ตฌ์ฑ์์
version: '3'
services:
db:
image: mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD="secret"
web:
image: apache
build: ./webapp
depends_on:
- db
restart: always
ports:
- "8080:80"
๋์ปค ์ปดํฌ์ฆ CLI
๋์ปค ์ปดํฌ์ฆ CLI
์ ๋ถ๋ฅผ ์ค๋ช ํ๊ธฐ์ ๋๋ฌด ๋ง๋ค..
๋์ปค ์ปดํฌ์ฆ CLI
- restart
- top
- ...
- up
- stop
- down
๋์ปค ์ปดํฌ์ฆ CLI - up
YAML ํ์ผ์ ๋ด์ฉ์ ๋ฐ๋ผ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ณ ์๋น์ค๋ฅผ ์คํํ๋ค.
๋์ปค ์ปดํฌ์ฆ CLI
- ์๋น์ค๋ฅผ ๋์ธ ๋คํธ์ํฌ ์ค์
- ํ์ํ ๋ณผ๋ฅจ ์์ฑ (ํน์ ์กด์ฌํ๋ ๋ณผ๋ฅจ๊ณผ ์ฐ๊ฒฐ)
- ํ์ํ ์ด๋ฏธ์ง pull
- ํ์ํ ์ด๋ฏธ์ง bulid
- ์๋น์ค ์์กด์ฑ์ ๋ฐ๋ผ ์๋น์ค ์คํ
๋์ปค ์ปดํฌ์ฆ CLI - up
YAML ํ์ผ์ ์คํํ ๋ ์ฌ์ฉํ๋ค.
๋์ปค ์ปดํฌ์ฆ CLI
Usage: up [options] [--scale SERVICE=NUM...] [SERVICE...]
Options:
-d, --detach ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ปจํ
์ด๋๊ฐ ์์๋๊ณ ์คํ ์ํ๊ฐ ๋๋ค.
--no-deps ์ฐ๊ฒฐ๋ ์๋น์ค๋ฅผ ์์ํ์ง ์๋๋ค.
--force-recreate ์ปจํ
์ด๋๊ฐ ์กด์ฌํด๋ ๋ค์ ์์ฑํ๋๋ก ํ๋ค.
--always-recreate-deps ์ข
์์ ์ธ ์ปจํ
์ด๋๋ค์ ํญ์ ๋ค์ ์์ฑํ๋ค
--no-start ์๋น์ค๋ฅผ ์๋์ผ๋ก ์์ํ์ง ์์
--build ์ปจํ
์ด๋๋ฅผ ์คํํ๊ธฐ ์ ์ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ค
--scale SERVICE=NUM ์๋น์ค๋ฅผ NUM ๊ฐ์ ์ธ์คํด์ค๋ก ์ค์ ํ๋ค. (scale ์ต์
์ด ์๋ ๊ฒฝ์ฐ)
๋์ปค ์ปดํฌ์ฆ CLI - down
์ปจํ ์ด๋๋ฅผ ์ค์งํ๊ณ ์ปจํ ์ด๋, ๋คํธ์ํฌ, ๋ณผ๋ฅจ ๋ฐ ์ด๋ฏธ์ง๋ฅผ ์ ๊ฑฐํ๋ค
๋์ปค ์ปดํฌ์ฆ CLI
Usage: down [options]
Options:
--rmi type Remove images. Type must be one of:
'all': ์๋น์ค์์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ์ ๊ฑฐํ๋ค
'local': ์ปค์คํ
ํ๊ทธ๊ฐ ์กด์ฌํ์ง ์๋ ์ด๋ฏธ์ง ์ ๊ฑฐ
๋์ปค ์ปดํฌ์ฆ ํ์ฉ
docker run --name mysql \
-e MYSQL_DATABASE=test \
-e MYSQL_USER=test \
-e MYSQL_PASSWORD=test \
-e MYSQL_ROOT_PASSWORD=test \
-p 3306:3306 \
-v /home/data/mysql:/var/lib/mysql
mysql:5.7
MYSQL ์ปดํฌ์ฆ ์์ฑ
๋
Docker Compose
By Jaewoo KIM
Docker Compose
- 479