2021-03-09(Tue)

ํ•ญ๋ชฉ

๋‚ด์šฉ

ํ•™์Šต ๋‚ ์งœ

2021-03-09(ํ™”)

ํ•™์Šต ์‹œ๊ฐ„

11:00~24:00

ํ•™์Šต ๋ฒ”์œ„ ๋ฐ ์ฃผ์ œ

docker-compose

ํ•™์Šต ๋ชฉํ‘œ

ํด๋Ÿฌ์Šคํ„ฐ์—์„œ๋„ docker-compose up์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋™์ž‘์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์…‹ํŒ…

๋™๋ฃŒ ํ•™์Šต ๋ฐฉ๋ฒ•

์Šคํฌ๋Ÿผ ํ›„ ๊ฐ์ž ์ฝ”๋”ฉ

์ƒ์„ธ ํ•™์Šต ๋‚ด์šฉ

ํด๋Ÿฌ์Šคํ„ฐ์—์„œ docker-compose up ํ‚ค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ฐ”๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘๋™์ด ๊ฐ€๋Šฅํ•ด์•ผํ•œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ผ์ „์— ํด๋Ÿฌ์Šคํ„ฐ์—์„œ docker-compose up ์„ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ์ •์ƒ์ž‘๋™ํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ๋‚ด์šฉ์„ ๊ณต์œ  ๋ฐ›๊ณ , ๊ณผ์ œ ์ œ์ถœ ์ „์— ํ•ด๊ฒฐํ•ด์•ผํ•œ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.

์ €๋… 18์‹œ๊ฐ€ ๋„˜์—ˆ๊ณ  ํด๋Ÿฌ์Šคํ„ฐ๊นŒ์ง€ 1์‹œ๊ฐ„ ๊ฐ€๋Ÿ‰ ๊ฑธ๋ฆฌ์ง€๋งŒ, ํŒ€์„ ์œ„ํ•ด ์ง์ ‘ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๊ฐ€์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค!

๋ฌธ์ œ) ํด๋Ÿฌ์Šคํ„ฐ goinfre ๋””๋ ‰ํ† ๋ฆฌ์—์„œ git clone ๋ฐ›์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Mounts denied ๋ฌธ์ œ๋กœ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค.

ํ•ด๊ฒฐ) Resources>File sharing์— ์ •์˜๋œ ๊ฒฝ๋กœ์—์„œ git clone ๋ฐ›๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘๋™์‹œํ‚จ๋‹ค.

ํ˜„์žฌ ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ๋Š” git clone ์„ ๋ฐ›์€ ๋’ค clone ๋ฐ›์€ ๋””๋ ‰ํ† ๋ฆฌ์— ์œ„์น˜ํ•œ tmp/db ๋ฅผ postsqlDB์— mount ์‹œํ‚จ๋‹ค. ์ด ๋•Œ File sharing์— ๋“ฑ๋ก๋œ ๊ฒฝ๋กœ์˜ ํ•˜์œ„ ๊ฒฝ๋กœ์— ์œ„์น˜ํ•œ docker contianer ๋งŒ์ด bind mounted ๋  ์ˆ˜ ์žˆ๋‹ค.

๋ฌธ์ œ๋Š” goinfre ๋””๋ ‰ํ† ๋ฆฌ ์ž์ฒด๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ ๋งˆ์Šคํ„ฐ ๊ณ„์ •์ด ์•„๋‹ˆ๋ฉด ๊ถŒํ•œ์„ ๋งˆ์Œ๋Œ€๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋Š” ๋””๋ ‰ํ† ๋ฆฌ์ด๊ณ , File sharing์— ๋“ฑ๋กํ•ด๋„ ์ ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค.

goinfre ์™ธ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ๋Š” ์šฉ๋Ÿ‰์ด ๊ทธ๋ฆฌ ๋งŽ์ง„ ์•Š์ง€๋งŒ, ๊ทธ๋ƒฅ /User ๊ฒฝ๋กœ์—์„œ git cloneํ•˜์ž!

๋ฌธ์ œ) ์ตœ์ดˆ ๊ตฌ๋™์‹œ์—๋Š” DB ์กด์žฌ ์œ ๋ฌด์— ๋”ฐ๋ผ rake db:seed๋ฅผ ์‹คํ–‰์‹œ์ผœ์•ผํ•œ๋‹ค.

ํ•ด๊ฒฐ) custom rake command๋ฅผ ์ž‘์„ฑํ•˜์—ฌ DB์™€์˜ connection์„ ๊ฒ€์‚ฌํ•˜๊ณ  rake db:seed๋ฅผ ์‹คํ–‰์‹œํ‚ค๋„๋ก ์ˆ˜์ •ํ•˜์˜€๋‹ค.

์•„๋ž˜๋Š” ๊ด€๋ จ PR ๋‚ด์šฉ

entrypoint.sh์— custom rake๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • rake db:connection_exists : web container๊ฐ€ DB์™€ connection์ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • rake db:is_first_time: web_container์— rake db:seed๊ฐ€ ์‹คํ–‰๋œ ์  ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. rake db:seed๊ฐ€ ์‹คํ–‰๋˜์—ˆ๋‹ค๋ฉด ์ ์–ด๋„ web_owner ์œ ์ €๊ฐ€ 1๋ช…์€ ์žˆ์–ด์•ผํ•˜๋ฏ€๋กœ User.find(1)๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์œ„ custom rake ๋“ค๋กœ ํŒ๋‹จ๋˜๋Š” ์ƒํƒœ์— ๋”ฐ๋ผ rake db:migrate๋‚˜ rake db:seed๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ํ•œํŽธ ๊ธฐ์กด์—๋Š” ์šฐ๋ฆฌ .gitignore์— DB์˜ ๋ณผ๋ฅจ์œผ๋กœ ์“ฐ์ด๋Š” /tmp/db ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ์–ด์„œ, ๋‹จ์ˆœํžˆ github์„ clone ๋ฐ›์œผ๋ฉด /tmp/db ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ์ด ์ƒํƒœ์—์„œ docker-compose up์„ ์ž…๋ ฅํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. --> entrypoint์—์„œ /tmp/db ๋””๋ ‰ํ† ๋ฆฌ ์กด์žฌ์—ฌ๋ถ€์— ๋”ฐ๋ผ /tmp/db ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑ๋„๋ก ์ˆ˜์ •ํ•˜์—ฌ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ) tournament schedular๊ฐ€ rake ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋˜๋ฉฐ, job queue์— ์ถ”๊ฐ€๋œ๋‹ค.

ํ•ด๊ฒฐ) ์•„๋ž˜์ฒ˜๋Ÿผ ๋ช…๋ น์–ด๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ rake ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์‹คํ–‰๋˜์ง€ ์•Š๋„๋ก ์ฒ˜๋ฆฌํ•œ๋‹ค.

์›์ธ์€ initializer ๋””๋ ‰ํ† ๋ฆฌ์— tournament reschedule ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ํŒŒ์ผ์ด ํฌํ•จ๋˜์–ด์žˆ๊ณ , rake ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•  ๋•Œ๋„ ์ด ํŒŒ์ผ๋“ค์ด ๋ชจ๋‘ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด ์›์ธ์ด์—ˆ๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ ๋ช…๋ น์–ด๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ์กฐ๊ฑด์„ ์‚ฝ์ž…ํ•˜์—ฌ rails s ๋กœ ์„œ๋ฒ„๋ฅผ ์ž‘๋™์‹œํ‚ฌ ๋•Œ๋งŒ ๋ฉ”์„œ๋“œ๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ์ˆ˜์ •ํ•˜์˜€๋‹ค.

if defined?(Rails::Server)
  Tournament.retry_set_schedule
  War.retry_set_schedule
end

์•„๋ž˜๋Š” docker-compose ๊ฐœ๋…์„ ํ™•์ธํ•˜๋ฉฐ ๊ฐ€๋ณ๊ฒŒ ๋ฉ”๋ชจํ•œ ๋‚ด์šฉ.

Docker-Compose

Compose is a tool for defining and running multi-container Docker applications.

๊ณผ์ •์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. Dockerfile์— ์•ฑ ํ™˜๊ฒฝ์„ ์ •์˜ํ•œ๋‹ค.

  2. docker-compose.yml์— ์•ฑ ๋นŒ๋“œํ•˜๋Š” ๋™์ž‘์„ ์ •์˜ํ•œ๋‹ค.

  3. docker-compose up ์ปค๋งจ๋“œ๋กœ ์•ฑ์„ ๋นŒ๋“œํ•œ๋‹ค.

docker-compose.yml

buildํ• ์ง€, ์•„๋‹ˆ๋ฉด ๋„์ปคํ—ˆ๋ธŒ์— ์žˆ๋Š” image๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ networks ์˜ต์…˜์„ ์ฃผ์ง€ ์•Š์œผ๋ฉด ํ•˜๋‚˜์˜ ๋‚ด๋ถ€ compose ๋‚ด์—์„œ ๋„คํŠธ์›Œํฌ๋กœ ๊ตฌ์„ฑ์ด ๋˜์–ด์žˆ์–ด์„œ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ compose๋กœ ๋‹ค๋ฅธ compose์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ DB๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, network ๋ฅผ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค.

์—ฌ๊ธฐ ์“ฐ์ด๋Š” ๊ฒฝ๋กœ๋Š” docker-compose.yml ํŒŒ์ผ์ด ์œ„์น˜ํ•˜๋Š” ๊ณณ ๊ธฐ์ค€์ด๋‹ค.

Dockerfile์—์„œ ์ ‘๊ทผ์€ ์ƒ์œ„ ๊ฒฝ๋กœ์—๋Š” ์ ‘๊ทผ์ด ์•ˆ๋œ๋‹ค. ํ•˜์œ„ ๊ฒฝ๋กœ์—๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

production.yml

docker-compose down --volumes ์ปค๋งจ๋“œ๋กœ ๋ณผ๋ฅจ์„ ํฌํ•จํ•ด์„œ ๋ฐ์ดํ„ฐ ๋ณผ๋ฅจ์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ธฐ๋Šฅ

์ปดํฌ์ฆˆ์˜ ๊ธฐ๋Šฅ์€ ์•„๋ž˜ ์ƒํ™ฉ์—์„œ ํšจ๊ณผ์ ์ด๋‹ค.

  • ์‹ฑ๊ธ€ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ์„ ์—ฌ๋Ÿฌ๊ฐœ ๊ตฌ์„ฑํ•  ๋•Œ

  • ์ปจํ…Œ์ด๋„ˆ ๋งŒ๋“ค ๋•Œ ๋ณผ๋ฅจ๋ฐ์ดํ„ฐ๋ฅผ ์ค€๋น„ํ•˜๋Š” ๊ฒฝ์šฐ

    • old container์— ๋ณผ๋ฅจ์„ ๊ฐ์ง€ํ•˜๋ฉด, new container์— ๋ณผ๋ฅจ์„ ๋ณต์‚ฌํ•œ๋‹ค.

  • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ๋งŒ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์žฌ๊ตฌ์„ฑํ•  ๊ฒฝ์šฐ

  • ํ™˜๊ฒฝ๊ฐ„ ๋ณ€๊ฒฝ

Docker-compose getting start

Docker-compose use case

https://docs.docker.com/storage/bind-mounts/

Custom task with rake

rake๋Š” ๊ทธ๋ƒฅ ruby scripts๋ฅผ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ํˆด์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

ํ•™์Šต ๋‚ด์šฉ์— ๋Œ€ํ•œ ๊ฐœ์ธ์ ์ธ ์ดํ‰

๋Šฆ์€ ์‹œ๊ฐ„์— ํด๋Ÿฌ์Šคํ„ฐ์— ๊ฐ€๊ธฐ ๋งŽ์ด ๊ท€์ฐฎ์•˜์ง€๋งŒ, ์•ž์œผ๋กœ๋ฅผ ์œ„ํ•ด ๋นจ๋ฆฌ ์ฒ˜๋ฆฌํ•ด๋‘˜ ํ•„์š”๊ฐ€ ์žˆ๋Š” task์˜€๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ท€์ฐฎ์Œ์„ ๋ฌด๋ฆ…์“ด ๋•๋ถ„์— ๋ฐ˜๋‚˜์ ˆ๋งŒ์— ํ•ด๊ฒฐํ•˜์—ฌ ํŒ€์— ๊ธฐ์—ฌํ•˜์˜€์œผ๋‹ˆ ๋ฟŒ๋“ฏํ–ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  docker ์— ๋Œ€ํ•ด ์ข€ ๋” ํ•™์Šตํ•  ์ˆ˜ ์žˆ์–ด์„œ ์—ญ์‹œ ๋ฟŒ๋“ฏํ–ˆ๋‹ค.

๋‹ค์Œ ํ•™์Šต ๊ณ„ํš

  • War-operation ๊ตฌํ˜„

Last updated