Compose: Dockerfile์ด ๋ณ€๊ฒฝ๋˜์—ˆ์ง€๋งŒ docker-compose up์€ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2015๋…„ 05์›” 30์ผ  ยท  11์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: docker/compose

์ข…์ข… docker-compose up์€ Docker-compose.yml์—์„œ "build :"๋กœ ์ง€์ •๋œ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜์ง€ ์•Š์ง€๋งŒ ํ•ด๋‹น Dockerfile์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  docker build -t servicename_foldername์„ ์‹คํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์˜ํ–ฅ์„๋ฐ›๋Š” ์„œ๋น„์Šค์— ๋Œ€ํ•ด ์ˆ˜๋™์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์˜๋„ ๋œ ๊ฒƒ์ž…๋‹ˆ๊นŒ? ๋‹ค์†Œ ์„ฑ๊ฐ€์‹œ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ์ง€๊ฐ€ ์‹ค์ œ๋กœ ์ตœ์‹  ์ƒํƒœ์ธ์ง€ ํ™•์‹  ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ docker-compose up์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์ˆ˜๋™์œผ๋กœ docker ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

kinquestion

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์‚ฌ์‹ค, docker-compose up ๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ "์˜๋„ ๋œ"๊ฒƒ์ด์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ๋ฐ”๊ฟ”์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. # 693

docker-compose build ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# 614์™€ ์ค‘๋ณต

๋ชจ๋“  11 ๋Œ“๊ธ€

์‚ฌ์‹ค, docker-compose up ๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ "์˜๋„ ๋œ"๊ฒƒ์ด์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ๋ฐ”๊ฟ”์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. # 693

docker-compose build ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# 614์™€ ์ค‘๋ณต

์•ˆ๋…•ํ•˜์„ธ์š” @dnephin ,์ด ์–ผ๋งˆ๋‚˜ ์ž‘์€ ์„ธ์ƒ!

docker-compose build ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ๋Œ€๋กœ ์žฌ ๊ตฌ์ถ•ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ž˜๋œ ์ž ๊ธˆ ํŒŒ์ผ๋กœ ์ธํ•ด Varnish ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š๋„๋กํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ฝ์€ ๋‚ด์šฉ (์˜ˆ : # 1195)์— ๋”ฐ๋ฅด๋ฉด docker-compose build ๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์ด๋ฉฐ ์ด์™€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

โ•ญโ”€wting<strong i="11">@nuc</strong> ~/code/reddit-mobile โ€นpython-2.7.12โ€บ โ€นwting_chan-159_add_varnish_to_2Xร—ad20b6dโ€บ
โ•ฐโ”€โžค  docker ps                                                                                                              2016.09.15 12:20:46 PDT 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
โ•ญโ”€wting<strong i="12">@nuc</strong> ~/code/reddit-mobile โ€นpython-2.7.12โ€บ โ€นwting_chan-159_add_varnish_to_2Xร—ad20b6dโ€บ
โ•ฐโ”€โžค  docker-compose --version                                                                                               2016.09.15 12:20:48 PDT 
docker-compose version 1.8.0, build f3628c7
โ•ญโ”€wting<strong i="13">@nuc</strong> ~/code/reddit-mobile โ€นpython-2.7.12โ€บ โ€นwting_chan-159_add_varnish_to_2Xร—ad20b6dโ€บ
โ•ฐโ”€โžค  docker --version                                                                                                       2016.09.15 12:20:51 PDT 
Docker version 1.12.1, build 23cf638
โ•ญโ”€wting<strong i="14">@nuc</strong> ~/code/reddit-mobile โ€นpython-2.7.12โ€บ โ€นwting_chan-159_add_varnish_to_2Xร—ad20b6dโ€บ
โ•ฐโ”€โžค  docker-compose build && docker-compose up                                                                          2 โ†ต 2016.09.15 12:23:35 PDT 
Building web
Step 1 : FROM reddit/reddit-nodejs:latest
 ---> ee57c186eb35
Step 2 : VOLUME /src
 ---> Using cache
 ---> 3720601d98c8
Step 3 : WORKDIR /src
 ---> Using cache
 ---> d4b9b360ef4e
Step 4 : EXPOSE 4444
 ---> Using cache
 ---> 5e232be73781
Step 5 : ENTRYPOINT npm start
 ---> Using cache
 ---> 1094fc9857bb
Successfully built 1094fc9857bb
Building varnish
Step 1 : FROM quay.io/reddit/varnish-fastly
# Executing 1 build trigger...
Step 1 : COPY default.vcl /etc/varnish/default.vcl
 ---> Using cache
 ---> ac9dadb35674
Step 2 : ENV VARNISH_PORTS 8080
 ---> Using cache
 ---> 3c43e0226f5f
Step 3 : EXPOSE 8080
 ---> Using cache
 ---> c88093c2ff32
Successfully built c88093c2ff32
Starting redditmobile_web_1
Starting redditmobile_varnish_1
Attaching to redditmobile_web_1, redditmobile_varnish_1
varnish_1  | storage_malloc: max size 100 MB.
varnish_1  | SHMFILE owned by running varnishd master (pid=1)  # STALE LOCK FILE
varnish_1  | (Use unique -n arguments if you want multiple instances.)
web_1      | 
web_1      | > [email protected] start /src
web_1      | > NODE_ENV=production npm run server
web_1      | 
redditmobile_varnish_1 exited with code 2
web_1      | 
web_1      | > [email protected] server /src
web_1      | > NODE_ENV=production node ./bin/ProductionServer.js
web_1      | 
web_1      | Started cluster with 4 processes.
web_1      | Started server at PID 31
web_1      | Started server at PID 46
[..]

์•ˆ๋…• @wting

๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋Š”์ง€๋Š” ์ž ๊ธˆ ํŒŒ์ผ์ด ๋ณผ๋ฅจ์— ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (https://docs.docker.com/compose/overview/#/preserve-volume-data-when-containers-are-created).

docker-compose down ์„ (๋ฅผ) ์‹œ๋„ํ•˜์—ฌ ์ด์ „ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ๋ณผ๋ฅจ ์ฐธ์กฐ๊ฐ€ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ up ์€ ์ƒˆ ๋ณผ๋ฅจ์œผ๋กœ ์‹œ์ž‘ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋ณผ๋ฅจ์— ์—†์œผ๋ฉด ์ž ๊ธˆ ์žฅ์น˜๊ฐ€ ์ œ๊ฑฐ๋˜์ง€ ์•Š์•˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Compose๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ๊ณ  ๊ตฌ์„ฑ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋ฏ€๋กœ down ํ•˜๋ฉด ๋ฌธ์ œ๋„ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌ! docker-compose down ๋ฐ docker-compose up --force-recreate ( docker-compose --build ์ œ์™ธ). ์›น ์ปจํ…Œ์ด๋„ˆ ์šฉ์œผ๋กœ ๋งˆ์šดํŠธ ๋œ ๋ณผ๋ฅจ์ด ์žˆ์ง€๋งŒ Varnish ์ปจํ…Œ์ด๋„ˆ์—๋Š” ๋งˆ์šดํŠธ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ง๊ด€์ ์ด์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ˆ์Šค ํŒŒ์ผ์€ ์ฃผ๋ณ€์— ๋ถ™์–ด ์žˆ์Šต๋‹ˆ๋‹ค. docker-compose.yml ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

version: '2'
services:
  web:
    build:
      context: .
      dockerfile: Dockerfile.dev
    ports:
     - "4444:4444"
    volumes:
     - .:/src
  varnish:
    build:
      context: .
      dockerfile: Dockerfile.varnish
    ports:
    - "4301:80"
    depends_on:
    - web

์ปจํ…์ŠคํŠธ :

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๊ธ€์„ ์“ด ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์€ ๊ท€ํ•˜์˜ ์˜๊ฒฌ => "docker-compose up --force-recreate (๊ทธ๋Ÿฌ๋‚˜ docker-compose --build๋Š” ์•„๋‹˜)"์— ์˜ํ•ด "์ €์žฅ"๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

docker-compose up --build

์‚ฌ์‹ค, docker-compose up ๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ "์˜๋„ ๋œ"๊ฒƒ์ด์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ๋ฐ”๊ฟ”์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. # 693

docker-compose build ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# 614์™€ ์ค‘๋ณต

์ƒˆ๋กœ์šด Dockerfile์„ ํ• ๋‹นํ•˜๊ณ  ์ตœ์‹  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ์ •๋ง ๋„์›€์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ-๋…ผ์˜ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ์™€ ์ˆ˜์ • ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ธํ„ฐ ์›น์ด ๋‚˜๋ฅผ ์—ฌ๊ธฐ๋กœ ์ด๋Œ์—ˆ์Šต๋‹ˆ๋‹ค. ์ข‹์€ ํ† ๋ก ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

docker-compose up --build -V

-V ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ช…ํ™•ํžˆํ•˜๋ ค๋ฉด :
-V, --renew-anon-volumes Recreate anonymous volumes instead of retrieving data from the previous containers.

docker-compose ์•ˆ์— ๋‹จ์ผ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค.

docker-compose up -d --force-recreate --no-deps --build $service

์˜ˆ :

docker-compose up -d --force-recreate --no-deps --build varnish

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
5 / 5 - 1 ๋“ฑ๊ธ‰