Skip to content

๐ŸฌDocker, Container, k8s ์•Œ์•„๋ณด๊ธฐ

Changhyun-Hong edited this page Dec 5, 2024 · 2 revisions

Docker

๋„์ปค๋Š” "app์„ packaging ํ•  ์ˆ˜ ์žˆ๋Š” ํˆด" ์ด๋‹ค.

  • ์ด๋ฏธ์ง€: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ชจ๋“  ์˜์กด์„ฑ์„ ํฌํ•จํ•œ ์ฝ๊ธฐ ์ „์šฉ ํ…œํ”Œ๋ฆฟ์ž…๋‹ˆ๋‹ค. Dockerfile์„ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ์ •์˜ํ•˜๊ณ , ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์ปจํ…Œ์ด๋„ˆ: ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•œ ์ธ์Šคํ„ด์Šค์ž…๋‹ˆ๋‹ค. ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋…๋ฆฝ๋œ ํ™˜๊ฒฝ์—์„œ ์ž‘๋™ํ•˜๋ฉฐ, ์„œ๋กœ ๊ฒฉ๋ฆฌ๋œ ์ƒํƒœ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • Dockerfile: ์ด๋ฏธ์ง€ ์ƒ์„ฑ์„ ์œ„ํ•œ ์„ค์ • ํŒŒ์ผ๋กœ, ์„ค์น˜ํ•  ํŒจํ‚ค์ง€๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ • ๋“ฑ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

[Docker] 2. ๋„์ปค์˜ ๋™์ž‘ ์›๋ฆฌ & ๋„์ปค์˜ ํ—ˆ๋ธŒ, ์ด๋ฏธ์ง€

[์›๋ฆฌ ๊ณต๋ถ€] Docker๋ž€? ๋„์ปค ๋™์ž‘ ์›๋ฆฌ, ๋„์ปค ๊ฐœ๋…

โœ”๏ธ ๋„์ปค ํ—ˆ๋ธŒ๋ž€?

๋„์ปค ํ—ˆ๋ธŒ๋Š” ๊ณต์‹์ ์œผ๋กœ ์šด์˜๋˜๋Š” ๋„์ปค ๋ ˆ์ง€์Šคํ† ๋ฆฌ(๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋ฐฐํฌํ•˜๋Š” ์„œ๋น„์Šค)์˜ ์ด๋ฆ„์œผ๋กœ,ย ๊ณต๊ฐœ๋œ ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฏธ์ง€๊ฐ€ ๋ชจ์—ฌ์žˆ๋Š” ๊ณณ์ด๋‹ค.

๋„์ปค ํ—ˆ๋ธŒ๋Š” ์Šค๋งˆํŠธํฐ์˜ ์•ฑ์Šคํ† ์–ด์™€ ๊ฐ™์€ ์กด์žฌ๋กœย ๋‹ค์–‘ํ•œ ๊ณต๊ฐœ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๊ฐ€ ์ œ๊ณต๋œ๋‹ค.

๋ˆ„๊ตฌ๋“ ์ง€ ์ด๋ฏธ์ง€๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ๊ณต๊ฐœํ•˜๋Š” ๋“ฑ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๋ฏธ์ง€์˜ ์ข…๋ฅ˜๋„ ๋‹ค์–‘ํ•˜๋‹ค.

๋„์ปค์˜ ์ปจํ…Œ์ด๋„ˆ ๊ณต์œ 

image


์ปจํ…Œ์ด๋„ˆ

์ปค๋„์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ธ Cgroup๊ณผ Namespace๋ฅผ ์ž˜ ํ™œ์šฉํ•˜์—ฌ ๋งŒ๋“  ๊ธฐ์ˆ 

image 1

  • ์ด๋ฏธ ์žˆ๋˜ ๊ธฐ์ˆ 
    • ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ ์€ ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ๊ฐœ๋…์ด ์•„๋‹ˆ๋ผ, ์˜ค๋žœ ๊ธฐ๊ฐ„ ์กด์žฌํ•ด์™”๋˜ ์‹œ์Šคํ…œ ๊ฒฉ๋ฆฌ ๊ธฐ์ˆ ์—์„œ ๋ฐœ์ „ํ•œ ๊ฒƒ
    • ๋Œ€ํ‘œ์ ์ธ ๊ฒฉ๋ฆฌ ๊ธฐ์ˆ ์ธ Cgroups๊ณผ Namespaces๊ฐ€ ๋ฆฌ๋ˆ…์Šค ์ปค๋„์—์„œ ์˜ค๋ž˜์ „๋ถ€ํ„ฐ ์ง€์›๋˜์—ˆ๊ณ , Docker ๊ฐ™์€ ๋„๊ตฌ๋“ค์ด ์ด๋ฅผ ํ˜„๋Œ€์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ๊ณผ ๋ฐฐํฌ์— ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ
  • ํ•˜๋‚˜์˜ ์„œ๋ฒ„์— ํ•˜๋‚˜์˜ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๊ณ  ์ผ๋ฐ˜์ 
    • ์„œ๋ฒ„(32๊ธฐ๊ฐ€ ~ 256๊ธฐ๊ฐ€)์— ํ•˜๋‚˜์˜ ์„œ๋น„์Šค(2๊ธฐ๊ฐ€ ~ 4๊ธฐ๊ฐ€)๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋น„ํšจ์œจ์ 
    • ๋น„ํšจ์œจ์ ์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์ƒํ™”๊ธฐ์ˆ  ๋„์ž…
    • ์ดˆ๊ธฐ์—๋Š” ํ•˜์ดํผ๋ฐ”์ด์ € ๊ธฐ๋ฐ˜์˜ ๊ฐ€์ƒ ๋จธ์‹ (VM) ๊ธฐ์ˆ ์ด ๋„์ž…๋จ
    • ์ดํ›„ ์ปจํ…Œ์ด๋„ˆํ™” ๊ธฐ์ˆ ์€ ๊ฐ€์ƒ ๋จธ์‹ ๋ณด๋‹ค ๋” ๊ฐ€๋ฒผ์šด ๊ฒฉ๋ฆฌ ๋ฐ ๊ฐ€์ƒํ™”๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ์ž๋ฆฌ๋ฅผ ์žก์Œ (= ์ปจํ…Œ์ด๋„ˆ)

์ปจํ…Œ์ด๋„ˆ์™€ VM

image 2

  • ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ™์€ ์šด์˜์ฒด์ œ ์ปค๋„์„ ๊ณต์œ ํ•˜๋ฉด์„œ ๋…๋ฆฝ์ ์ธ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ํฌํ•จํ•˜์—ฌ ํ˜ธ์ŠคํŠธ OS์˜ ์ปค๋„ ์œ„์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐ€์ƒ ๋จธ์‹ ์€ ํ•˜์ดํผ๋ฐ”์ด์ €๋ฅผ ํ†ตํ•ด ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฒŒ์ŠคํŠธ OS๋ฅผ ๊ฐ๊ฐ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋” ๋งŽ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋ถ€ํŒ… ์‹œ๊ฐ„๋„ ์ปจํ…Œ์ด๋„ˆ๋ณด๋‹ค ๋А๋ฆฝ๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ, ๋„์ปค, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค

  • Docker๋Š” ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆํ™” ๋„๊ตฌ๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํŒจํ‚ค์ง•ํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด ์คŒ
  • Docker๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ณ , ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋ฉฐ, ์ด ๊ณผ์ •์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋„๊ตฌ์™€ ๋ช…๋ น์–ด๋ฅผ ์ œ๊ณต

image 3

image 4

๋ฐฐํฌ ์ „ ๊ณผ์ •

1. ๋กœ์ปฌ์—์„œ ์ฝ”๋“œ ์ˆ˜์ • ํ›„ ํ‘ธ์‹œ

  • ๋กœ์ปฌ์—์„œ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•œ ํ›„ GitHub ์ €์žฅ์†Œ์˜ ํŠน์ • ๋ธŒ๋žœ์น˜(์˜ˆ: main)๋กœ ํ‘ธ์‹œ
  • ํ‘ธ์‹œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด GitHub Actions๊ฐ€ ์ž๋™์œผ๋กœ ํ•ด๋‹น ํ‘ธ์‹œ ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ณ , .github/workflows/deploy.yml ํŒŒ์ผ์—์„œ ์ •์˜ํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์‹คํ–‰

2. GitHub Actions ์›Œํฌํ”Œ๋กœ์šฐ ์‹œ์ž‘

  • deploy.yml์— ์ •์˜๋œ ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ํ‘ธ์‹œ ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , ์ „์ฒด ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์‹คํ–‰

3. ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ฃผ์š” ๋‹จ๊ณ„

a. ์ฝ”๋“œ ์ฒดํฌ์•„์›ƒ (Checkout Code)

  • actions/checkout@v3 ์•ก์…˜์„ ์‚ฌ์šฉํ•ด ์ตœ์‹  ์ปค๋ฐ‹ ์ƒํƒœ์˜ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์˜ด
  • ์ด ๋‹จ๊ณ„์—์„œ ํ˜„์žฌ GitHub ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ์ฝ”๋“œ๊ฐ€ GitHub Actions ์›Œํฌํ”Œ๋กœ์šฐ ๋‚ด์— ๋กœ๋“œ๋จ

b. Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ (Build Docker Image)

  • Dockerfile์— ์ •์˜๋œ ์„ค์ •์— ๋”ฐ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ Docker ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œ
  • ์ด ๋‹จ๊ณ„์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ์˜์กด์„ฑ๊ณผ ํ™˜๊ฒฝ ์„ค์ •์ด Docker ์ด๋ฏธ์ง€์— ํฌํ•จ๋จ
  • docker-compose.yml์ด ์žˆ๋”๋ผ๋„ CI/CD์—์„œ๋Š” ๋ณดํ†ต ์„œ๋น„์Šค๋ณ„๋กœ ์ด๋ฏธ์ง€๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ๋นŒ๋“œํ•จ

c. Docker Hub ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋กœ ์ด๋ฏธ์ง€ ํ‘ธ์‹œ (Push Docker Image)

  • Docker ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•œ ํ›„, ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ Docker Hub ๋˜๋Š” AWS ECR, GCP GCR๊ณผ ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋กœ ํ‘ธ์‹œ

d. Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌ (Deploy to Kubernetes)

  • Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ์ƒˆ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌ
  • Kubernetes์˜ kubectl ๋ช…๋ น์–ด ๋˜๋Š” GitHub Actions์˜ Kubernetes ๊ด€๋ จ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•ด ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅ
  • ์ด ๋‹จ๊ณ„์—์„œ๋Š” ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด kubectl apply ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Deployment ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒˆ ์ด๋ฏธ์ง€๋ฅผ ์ฐธ์กฐํ•˜๋„๋ก ์—…๋ฐ์ดํŠธ

4. ๋กค๋ง ์—…๋ฐ์ดํŠธ (Rolling Update)

  • Kubernetes์˜ ๋กค๋ง ์—…๋ฐ์ดํŠธ ๋ฐฉ์‹์„ ํ†ตํ•ด Pod๋ฅผ ํ•˜๋‚˜์”ฉ ๊ต์ฒดํ•˜๋ฉด์„œ ์ƒˆ ๋ฒ„์ „์œผ๋กœ ์ „ํ™˜
  • Kubernetes๋Š” ์ƒˆ ์ด๋ฏธ์ง€๋กœ ๊ต์ฒด๋œ Pod์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉฐ, ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ๋กค๋ฐฑ
  • ์ด ๊ณผ์ •์„ ํ†ตํ•ด ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์‚ฌ์ดํŠธ๋Š” ์ตœ์‹  ๋ฒ„์ „์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธ

LiBoo

ํŒ€

๊ณตํ†ต

๋ฏผ์ง€

์˜๊ธธ

์ค€์„œ

์ง€์ˆ˜

์ฐฝํ˜„

๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ

ํšŒ์˜๋ก

๋ฐœํ‘œ

์ผ๊ธฐ์žฅ

Clone this wiki locally