๐Ÿ”ฅ TIL#14 Docker ์‹œ์ž‘

๋ฐฑ์Šน์ง„ยท2020๋…„ 12์›” 10์ผ
0

Docker

๋ชฉ๋ก ๋ณด๊ธฐ
1/2

What I learnd

  1. Docker ๋ž€?
  2. Docker์˜ ๊ตฌ์กฐ(image, deamon, container)
  3. Docker๋ฅผ ์ด์šฉํ•ด django project ๋ฅผ CI/CD ํ•˜๋Š” ๊ทธ๋ฆผ

1. Docker ๋ž€?

Docker๋Š” container ๊ฐ€์ƒํ™” ๊ธฐ์ˆ  ์ด์ž ํšŒ์‚ฌ๋ช…์ด๋‹ค.
Docker๋Š” container ๊ฐ€์ƒํ™” ์‹คํ–‰ ํ™˜๊ฒฝ์œ„์— application ๋ฐฐํฌ ์—”์ง„์„ ๋”ํ•ด ๊ฐœ๋ฐœ์ž์˜ code๋ฅผ ์–ธ์ œ ์–ด๋””์„œ๋“  ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๊ฒŒ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ ์„ ์ œ๊ณตํ•œ๋‹ค.

๊ฐ€์ƒํ™” ๊ธฐ์ˆ ์ด๋ž€?
์šฐ๋ฆฌ๊ฐ€ ์šด์˜ํ•ด์•ผ ํ•˜๋Š” Service๊ฐ€ ๋‹ค์–‘ํ•œ๋ฐ ์ด๋ฅผ ํ•˜๋‚˜์˜ ๊ณ ์„ฑ๋Šฅ Device์—์„œ ๋ชจ๋‘ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋น„์šฉ์ ˆ์•ฝ์˜ ํšจ๊ณผ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ๊ฐ Service๊ฐ€ ์„œ๋กœ ์ถฉ๋Œ์—†์ด ์šด์˜๋  ์ˆ˜ ์žˆ๋„๋ก ๊ณต๊ฐ„์„ ํ• ๋‹น ํ•ด์ฃผ์–ด์•ผ ํ•˜๋ฉฐ ์—ฌ๊ธฐ์— ์šด์˜์— ํ•„์š”ํ•œ ํ™˜๊ฒฝ์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ๊ฐ€์ƒํ™” ๊ธฐ์ˆ ์€ Hypervisor, Docker ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.
Hypervisor ๊ฐ€์ƒํ™” ๊ธฐ์ˆ ์€ ๊ฐ€์ƒ OSํ™˜๊ฒฝ์„ ์ƒ์„ฑ, ๊ฐ Service๊ฐ€ ๋…์ž์ ์ธ OS ํ™˜๊ฒฝ์„ ํ• ๋‹น๋ฐ›๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
Docker ๊ฐ€์ƒํ™” ๊ธฐ์ˆ ์€ OS keneral ์ƒ์˜ User space๋ฅผ ํ• ๋‹น๋ฐ›๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๋‘ ๋ฐฉ์‹์„ ๋น„๊ตํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค

  1. Hypervisor
    • (์žฅ์ ) ํ•˜๋‚˜์˜ Device์—์„œ ๋‹ค์–‘ํ•œ OS platform ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • (์žฅ์ ) ๊ฐ€์ƒ์ ์œผ๋กœ ์™„๋ฒฝํžˆ ๋ถ„๋ฆฌ๋œ OS์—์„œ ์šด์˜๋˜๋ฏ€๋กœ ๋ฌผ๋ฆฌ์  ์„œ๋ฒ„์˜ resource ๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅ.
    • (๋‹จ์ ) ๊ธฐ์ˆ ์ ์œผ๋กœ ๋ฌด๊ฒ๋‹ค. booting ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๋ฉฐ resource๋ฅผ ๋งŽ์ด ์ฐจ์ง€ํ•œ๋‹ค.
  2. Docker
    • (์žฅ์ ) Hypervisor ๊ฐ€์ƒํ™”์™€๋Š” ๋‹ฌ๋ฆฌ OS ์ปค๋„ ์œ„์˜ ์œ ์ €๊ณต๊ฐ„์—์„œ ์‹คํ–‰๋˜์–ด ๋ณด๋‹ค ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๋ฉฐ ์‰ฝ๊ฒŒ ๋…๋ฆฝ์ ์ธ ๊ฐ€์ƒํ™˜๊ฒฝ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • (๋‹จ์ ) ํ•˜๋‚˜์˜ OS์—์„œ ์œ ์ €๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹์ด๋ฏ€๋กœ ์šด์˜์ฒด์ œ๊ฐ€ ์ „ํ˜€ ํ‹€๋ฆฌ๋‹ˆ host์—์„œ๋Š” ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์—†๋‹ค.
    • (๋‹จ์ ) ๋ถ„๋ฆฌ๋œ OS๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋ณด์•ˆ์— ์ทจ์•ฝํ•˜๋‹ค.

2. Docker์˜ ๊ตฌ์กฐ

Docker client : Server๋กœ ๋ช…๋ น์„ ์ „๋‹ฌํ•˜๋Š” ์ฃผ์ฒด
Docker image : ์‹คํ–‰๋  Service์˜ code์™€ ํ™˜๊ฒฝ์ด ๋“ค์–ด์žˆ๋Š” ํ˜•์ƒ
Docker deamon : Docker image ์‹คํ–‰๊ธฐ(Docker engine ๋˜๋Š” Server)
Docker container : deamon์— ์˜ํ•ด ์‹คํ–‰๋œ image์˜ ๊ฒฐ๊ณผ๋ฌผ(process)

์นด์„ธํŠธ์™€ ๋น„๊ตํ•˜์ž๋ฉด Docker image๋Š” ์นด์„ธํŠธ Tape, Docker deamon์€ ์นด์„ธํŠธ Player, Docker container๋Š” ์นด์„ธํŠธ๊ฐ€ ์‹คํ–‰๋˜์–ด ๋‚˜์˜ค๋Š” ์Œ์•…์ด๋‹ค.
Docker client๋Š” ์นด์„ธํŠธ ํ…Œ์ดํ”„ ์ค€๋น„ ๋ฐ Play๋ฅผ ๋ช…๋ นํ•˜๋Š” ์‚ฌ์šฉ์ž์ด๋‹ค.
Docker container๋Š” ํ•˜๋‚˜์˜ process๋กœ process๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด container๋„ ์ค‘์ง€๋œ๋‹ค.

3. Docker๋ฅผ ์ด์šฉํ•ด django project ๋ฅผ CI/CD ํ•˜๋Š” ๊ทธ๋ฆผ

AWS์— Service ๋ฐฐํฌ ๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  Service๋ฅผ AWS ์—์„œ ์ƒ์‹œ ์šด์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ๋‹ค.
์ด ๊ณผ์ •์˜ ์ ˆ์ฐจ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. EC2์— ๊ฐ€์ƒํ™˜๊ฒฝ ์šด์˜์„ ์œ„ํ•ด miniconda ์„ค์น˜
  2. ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ
  3. git clone ์œผ๋กœ Service source ๋ฐ›๊ธฐ
  4. requirements.txt ์ด์šฉํ•˜์—ฌ pip package ์„ค์น˜
  5. runserver ๋ช…๋ น์œผ๋กœ Service ๊ธฐ๋™

์œ„ ๋ฐฉ์‹์œผ๋กœ ์šด์˜์— ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„  EC2์—์„œ Service ์šด์˜์— ํ•„์š”ํ•œ ์‚ฌ์ „์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ณผ์ •์ด ๋ถˆํŽธํ•˜๋‹ค. ์ข€ ๋” ์ž๋™ํ™” ํ•  ์ˆ˜ ์—†์„๊นŒ?

Docker๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋‹ค์Œ ์ ˆ์ฐจ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. Docker๋ฅผ ์„ค์น˜ํ•œ๋‹ค.
  2. Docker image๋ฅผ DockerHub์—์„œ ๋‹ค์šด๋ฐ›๋Š”๋‹ค.
  3. Docker image๋ฅผ run ํ•œ๋‹ค.

Docker ์ž์ฒด๊ฐ€ ๊ฐ€์ƒํ™” ๊ธฐ์ˆ ์ด๋ฏ€๋กœ ์šฐ๋ฆฌ๋Š” miniconda ๊ฐ™์€ ๊ฐ€์ƒํ™˜๊ฒฝ ์„ค์น˜ ์ ˆ์ฐจ๊ฐ€ ํ•„์š” ์—†๋‹ค. ๊ทธ๋ฆฌ๊ณ  image๋ฅผ ๋ฐ›์•„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ source code๋ฅผ AWS ์ƒ์— ๊ฐ€์ ธ๋‹ค ๋†“์„ ํ•„์š”๊ฐ€ ์—†๋‹ค.
(์šด์˜์ค‘์ธ Service์˜ ์ง์ ‘์ ์ธ ์ˆ˜์ • ๋ฐ git ์ ์šฉ ๋ถˆ๊ฐ€)
๋˜ํ•œ runserver๋ฅผ ํ†ตํ•œ ์‹คํ–‰์ด ํ•„์š”์—†๋‹ค.
(runserver๋Š” Service test๋ฅผ ์œ„ํ•ด ํ•„์š”ํ•  ๋ฟ ์ •์‹ ๋ฐฐํฌ์‹œ์—๋Š” gunicorn ์„ ์ด์šฉํ•œ Service ์‹คํ–‰์„ ํ•ด์•ผ ํ•œ๋‹ค)

์ด๋Ÿฌํ•œ ์ ˆ์ฐจ๋ฅผ ํ†ตํ•ด feature ์ถ”๊ฐ€ ๋˜๋Š” Hotfix๋“ฑ์˜ ๋ฌธ์ œ๋Š” local์—์„œ ์ผ๊ด„์ฒ˜๋ฆฌ(์ ์šฉ, test)ํ•˜๊ณ  ์™„๋ฃŒ๋œ ์ตœ์ข…๋ณธ์„ Docker image๋กœ ์ƒ์„ฑํ•˜์—ฌ Version์„ tagging ํ•˜์—ฌ ๋ฐฐํฌํ•˜๋ฉด ๋‚˜๋จธ์ง€๋Š” host server์—์„œ ์ตœ์‹ ๋ณธ์„ ๋ฐ›์•„ ์‹คํ–‰๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

๋‹ค์Œ Post์—์„œ๋Š” Docker๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•œ๋‹ค.

profile
12๋…„ .NET ๊ฐœ๋ฐœ ๊ฒฝ๋ ฅ์„ ๊ฐ€์ง„ ์›น ์ดˆ์งœ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค :)

0๊ฐœ์˜ ๋Œ“๊ธ€