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๊ฐ€์ง€ ํ•ญ๋ชฉ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

  1. ๋ฒ„์ „ ์ •์˜
  2. ์„œ๋น„์Šค ์ •์˜
  3. ๋ณผ๋ฅจ ์ •์˜
  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

  1. ์„œ๋น„์Šค๋ฅผ ๋„์šธ ๋„คํŠธ์›Œํฌ ์„ค์ •
  2. ํ•„์š”ํ•œ ๋ณผ๋ฅจ ์ƒ์„ฑ (ํ˜น์€ ์กด์žฌํ•˜๋Š” ๋ณผ๋ฅจ๊ณผ ์—ฐ๊ฒฐ)
  3. ํ•„์š”ํ•œ ์ด๋ฏธ์ง€ pull
  4. ํ•„์š”ํ•œ ์ด๋ฏธ์ง€ bulid
  5. ์„œ๋น„์Šค ์˜์กด์„ฑ์— ๋”ฐ๋ผ ์„œ๋น„์Šค ์‹คํ–‰

๋„์ปค ์ปดํฌ์ฆˆ 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 ์ปดํฌ์ฆˆ ์ž‘์„ฑ

๋—

Made with Slides.com