[TIL] ๐Ÿณ Docker, ๋ช…๋ น์–ด ์ •๋ฆฌ

sooyoung choiยท2024๋…„ 1์›” 20์ผ
0

CS

๋ชฉ๋ก ๋ณด๊ธฐ
10/21
post-thumbnail

HLS protocol ์‚ฌ์šฉํ•ด์„œ ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„์ค‘์ธ๋ฐ ๋‹จ์ˆœํžˆ nest.js์—์„œ ์„œ๋ฒ„ ๋Œ๋ฆฐ๋‹ค๊ณ  ํ•ด์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ŠคํŠธ๋ฆฌ๋ฐ ๋˜๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ RTMP Server๋ฅผ ์„ค์ •ํ•ด์•ผํ•˜๋Š”๋ฐ, ์ด๋•Œ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๋Š” RTMP๋กœ ๋ฐ›๊ฒŒ ๋œ๋‹ค.
HLS๋กœ ๋ณ€ํ™˜ํ•ด์„œ ํด๋ผ์ด์–ธํŠธ์ธก์—์„œ ์จ์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— Nginx๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”๋ฐ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ Docker๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ปจํ…Œ์ด๋„ˆํ™” ์‹œ์ผœ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค.


๐Ÿณ Docker?

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํŒจํ‚ค์ง• ํ•ด์ค€๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ๋™์— ํ•„์š”ํ•œ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์˜ ๋ชจ๋“  ๊ฒƒ๋“ค์„ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์— ๋‹ด์•„์„œ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

๐Ÿ—ƒ Container?

  • ๊ฐ๊ฐ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ณ ๋ฆฝ๋œ ํ™˜๊ฒฝ์—์„œ ๊ตฌ๋™๋  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

VM์˜ ์—ญํ• ๊ณผ ๋น„์Šทํ•œ๊ฑฐ ๊ฐ™์€๋ฐ?


VM vs Container

  • ํ•˜๋‚˜์˜ ์šด์˜์ฒด์ œ ์œ„์—์„œ ๋™์ผํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐ๊ฐ์˜ ๊ณ ๋ฆฝ๋œ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ ๊ตฌ๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” VM์„ ์‚ฌ์šฉํ•ด์„œ ๊ตฌ๋™ํ•ด์•ผ๋งŒ ํ–ˆ์—ˆ๋‹ค.
  • ๊ทธ์น˜๋งŒ VM์€ ๊ต‰์žฅํžˆ ๋ฌด๊ฒ๋‹ค โ†’ ์šด์˜์ฒด์ œ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋งˆ๋‹ค ํฌํ•จํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • Container์˜ ์—ญํ• ๋„ ๋™์ผํ•˜์ง€๋งŒ, ํ•˜๋“œ์›จ์–ด์— ์„ค์น˜๋œ ์šด์˜์ฒด์ œ(Host OS)์—์„œ ์ปจํ…Œ์ด๋„ˆ ์—”์ง€๋‹ˆ์–ด๋ผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค์น˜ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๊ฐœ๋ณ„์ ์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ฐ๊ฐ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ณ ๋ฆฝ๋œ ํ™˜๊ฒฝ์—์„œ ๊ตฌ๋™๋  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. โ†’ ์†Œํ”„ํŠธ์›จ์–ด = ๐Ÿณ DOCKER
  • ์šด์˜์ฒด์ œ๊ฐ€ ๋ฏธํฌํ•จ๋œ๋‹ค.(๊ฐ€๋ณ๋‹ค!)
  • ์ฆ‰, VM๋ณด๋‹ค ์กฐ๊ธˆ ๊ฒฝ๋Ÿ‰ํ™”๋œ ์ปจ์…‰์ด ๋ฐ”๋กœ Container์ด๋‹ค.

๋”ฐ๋ผ์„œ Docker์˜ ์—ญํ• ์€?

  • ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๊ณ  ๋ฐฐํฌํ•˜๊ณ  ๊ตฌ๋™ํ•˜๋Š” ์—ญํ• ์ด๋‹ค.

๐Ÿ—ƒ Container ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์•Œ์•„์•ผ ํ•  ์šฉ์–ด๋“ค


๐Ÿ“ Dockerfile

  • ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์ง€์— ๋Œ€ํ•œ ์„ค๋ช…์„œ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ๋™์„ ์œ„ํ•œ ํŒŒ์ผ์€ ์–ด๋–ค๊ฒŒ ์žˆ๋Š”์ง€, ์–ด๋–ค ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š”์ง€, ์™ธ๋ถ€ dependencies์— ๋Œ€ํ•ด ๋ช…์‹œํ•œ๋‹ค๋˜์ง€, ํ•„์š”ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •, ์–ด๋–ป๊ฒŒ ๊ตฌ๋™ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์Šคํฌ๋ฆฝํŠธ๋„ ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค.

์ด Dockerfile ์‚ฌ์šฉํ•ด์„œ docker์˜ image๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“ธ image

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ํ•˜๋Š” ๋ฐ์— ํ•„์š”ํ•œ ์ฝ”๋“œ, ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ, ์‹œ์Šคํ…œ ํˆด, ์‹œ์Šคํ…œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ ๋ชจ๋“  ์„ธํŒ…์„ ํฌํ•จํ•œ๋‹ค.
  • ํ˜„์žฌ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๋ฅผ ์บก์ณํ•ด์„œ ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“ค์–ด ๋‘”๋‹ค.
  • ๋ถˆ๋ณ€์˜ ์ƒํƒœ

๐Ÿ—ƒ Container

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ด๋ฏธ์ง€๋ฅผ ๊ฐœ๋ณ„์ ์ธ ํŒŒ์ผ ์‹œ์Šคํ…œ ์•ˆ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

๐Ÿ—ƒ Container ์ƒ์„ฑ

  • ๋งŒ๋“ค์–ด์ง„ ์ด๋ฏธ์ง€๋ฅผ ๋ฐฐํฌํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ๋˜๋Š”๋ฐ ๋กœ์ปฌ์— ์žˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ Container registry์— pushํ•˜๊ฒŒ ๋˜๋ฉด ์„œ๋ฒ„๋Š” pull ๋ฐ›์•„ ์‚ฌ์šฉ, ์‹คํ–‰ํ•œ๋‹ค. โ†’ ๐Ÿณ DOCKER ์˜ ์—ญํ• 

1) ๋„์ปค ์ด๋ฏธ์ง€ ์ƒ์„ฑ

docker build -f Dockerfile -t ์ƒ์„ฑ๋  ์ด๋ฏธ์ง€์˜ ์ด๋ฆ„ .

docker build ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ช…๋ น์–ด

-t ์ด๋ฏธ์ง€์˜ ํƒœ๊ทธ๋ฅผ ๋‹ฌ์•„์ค€๋‹ค(๊ธฐ๋ณธ๊ฐ’์€ latest) ex)docker-prac:ver1



2) ๋กœ์ปฌ์— ๋งŒ๋“ค์–ด์ง„ ๋„์ปค ์ด๋ฏธ์ง€ ํ™•์ธ

docker images



3) ๋„์ปค ์‹คํ–‰ํ•˜๊ธฐ

docker run -d -p ๋กœ์ปฌ์—์„œ ์“ฐ๋Š” port๋ฒˆํ˜ธ:๋„์ปค ์ปจํ…Œ์ด๋„ˆ์—์„œ ์“ฐ๋Š” port๋ฒˆํ˜ธ ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€ ์ด๋ฆ„
docker run -d -p 8080:8080 docker-prac

-d ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์‹คํ–‰์‹œ์ผœ์ค€๋‹ค.
-p ํ˜ธ์ŠคํŠธ์˜ 8080๋ฒˆ ํฌํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ์˜ 8080๋ฒˆ ํฌํŠธ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ์™ธ๋ถ€์— ๋…ธ์ถœ์‹œ์ผœ์ค€๋‹ค.
โ†’ http://ํ˜ธ์ŠคํŠธ IP:8080 ์ ‘์†

  • ์‹คํ–‰ํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ์˜ ์•„์ด๋””๊ฐ’ ์ „์ฒด๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.



4) ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฆฌ์ŠคํŠธ ํ™•์ธํ•˜๊ธฐ

docker ps



5) ์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์˜ log ํ™•์ธ

docker logs ID๊ฐ’
  • ์ด๋•Œ ID๊ฐ’์€ docker ps ๋ช…๋ น์–ด์— ๋‚˜์˜จ ID ๊ฐ’์„ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

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