limsr12/log
โ† back to posts

๐Ÿณ Docker๋ž€ ๋ฌด์—‡์ธ๊ฐ€

Docker ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ, ํŠน์ง• ์•Œ์•„๋ณด๊ธฐ

docker

๐Ÿณ Docker๋ž€ ๋ฌด์—‡์ธ๊ฐ€

1. Docker์˜ ์ •์˜

Docker(๋„์ปค) ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ปจํ…Œ์ด๋„ˆ๋ผ๋Š” ๋‹จ์œ„๋กœ ํŒจํ‚ค์ง•ํ•˜์—ฌ ์–ด๋””์„œ๋‚˜ ๋™์ผํ•œ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ๊ฐ€์ƒํ™” ํ”Œ๋žซํผ์ด๋‹ค.

ํ™˜๊ฒฝ ์ฐจ์ด๋กœ ์ธํ•œ ๋ฌธ์ œ๋ฅผ ์—†์• ๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ํ‘œ์ค€ํ™”ํ•ด์ฃผ๋Š” ๋„๊ตฌ

2. Docker๊ฐ€ ๋“ฑ์žฅํ•œ ๋ฐฐ๊ฒฝ

๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ์‹คํ–‰ ํ™˜๊ฒฝ์ด ๋‹ฌ๋ผ ๋ฐœ์ƒํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฌธ์ œ๋“ค:

  • ๋กœ์ปฌ์—์„œ๋Š” ์ž˜ ๋˜๋Š”๋ฐ ์„œ๋ฒ„์—์„œ๋Š” ์•ˆ ๋จ
  • ํŒ€์›๋งˆ๋‹ค OS, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๋ฒ„์ „์ด ๋‹ค๋ฆ„
  • ์„œ๋ฒ„์— ์ง์ ‘ ์„ค์น˜ํ•˜๋‹ค๊ฐ€ ํ™˜๊ฒฝ์ด ๋ง๊ฐ€์ง
  • ๋ฐฐํฌํ•  ๋•Œ๋งˆ๋‹ค ์„ค์ •์„ ๋‹ค์‹œ ํ•ด์•ผ ํ•จ

Docker๋Š” ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋‹ค์Œ ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค.

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ + ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ชจ๋“  ์˜์กด์„ฑ์„ ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€(Image) ๋กœ ๋ฌถ์Œ
  • ์–ด๋””์„œ ์‹คํ–‰ํ•˜๋“  ๋™์ผํ•œ ๊ฒฐ๊ณผ ๋ณด์žฅ

3. Docker์˜ ํ•ต์‹ฌ ๊ฐœ๋…

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

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ทธ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ํ•จ๊ป˜ ๋‹ด์€ ์‹คํ–‰ ๋‹จ์œ„
  • OS ์ „์ฒด๋ฅผ ๊ฐ€์ƒํ™”ํ•˜์ง€ ์•Š๊ณ , ํ”„๋กœ์„ธ์Šค ๋‹จ์œ„๋กœ ๊ฒฉ๋ฆฌ
  • ๊ฐ€๋ณ๊ณ  ์‹คํ–‰ ์†๋„๊ฐ€ ๋น ๋ฆ„

๐Ÿ“Œ ํŠน์ง•

  • ๋…๋ฆฝ์ ์ธ ํŒŒ์ผ ์‹œ์Šคํ…œ
  • ๋…๋ฆฝ์ ์ธ ๋„คํŠธ์›Œํฌ
  • ํ˜ธ์ŠคํŠธ OS ์ปค๋„์„ ๊ณต์œ 

3.2 ์ด๋ฏธ์ง€(Image)

  • ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์„ค๊ณ„๋„
  • ์‹คํ–‰ ํ™˜๊ฒฝ + ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ด๋ฏธ ์ •์˜๋˜์–ด ์žˆ์Œ
  • ๋ถˆ๋ณ€(Immutable) โ†’ ์ˆ˜์ • ์‹œ ์ƒˆ ์ด๋ฏธ์ง€ ์ƒ์„ฑ

์˜ˆ์‹œ:

  • node:20-alpine
  • mysql:8.0
  • nginx:latest

3.3 Dockerfile

  • ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ • ํŒŒ์ผ
  • ์–ด๋–ค ํ™˜๊ฒฝ์—์„œ, ์–ด๋–ค ๋ช…๋ น์„ ์‹คํ–‰ํ• ์ง€ ์ฝ”๋“œ๋กœ ์ •์˜
FROM node:20-alpine
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]

๐Ÿ“Œ ์˜๋ฏธ

โ†’ "์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Node 20 ํ™˜๊ฒฝ์—์„œ ์ด๋ ‡๊ฒŒ ์‹คํ–‰๋œ๋‹ค"

3.4 Docker Engine

  • Docker์˜ ํ•ต์‹ฌ ์‹คํ–‰ ์—”์ง„
  • ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ, ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ/์‹คํ–‰/์‚ญ์ œ๋ฅผ ๋‹ด๋‹น
  • ๋ณดํ†ต docker ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ œ์–ด

4. Docker vs ๊ฐ€์ƒ๋จธ์‹ (VM)

๊ตฌ๋ถ„Docker (Container)VM
๊ฐ€์ƒํ™” ๋Œ€์ƒํ”„๋กœ์„ธ์ŠคOS ์ „์ฒด
์†๋„๋งค์šฐ ๋น ๋ฆ„๋А๋ฆผ
์šฉ๋Ÿ‰๊ฐ€๋ฒผ์›€๋ฌด๊ฑฐ์›€
์‹คํ–‰ ํ™˜๊ฒฝํ˜ธ์ŠคํŠธ ์ปค๋„ ๊ณต์œ ๋…๋ฆฝ ์ปค๋„
ํ™œ์šฉ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค, ๋ฐฐํฌ์„œ๋ฒ„ ๊ฒฉ๋ฆฌ

๐Ÿ“Œ Docker๋Š” ๊ฐ€๋ณ๊ณ  ๋น ๋ฅธ ๋ฐฐํฌ์— ์ตœ์ ํ™”๋œ ๋ฐฉ์‹

5. Docker์˜ ์žฅ์ 

  • โœ… ๊ฐœ๋ฐœ/์šด์˜ ํ™˜๊ฒฝ ์ผ๊ด€์„ฑ ๋ณด์žฅ
  • โœ… ๋น ๋ฅธ ์‹คํ–‰ ๋ฐ ๋ฐฐํฌ
  • โœ… ์„ค์ •์„ ์ฝ”๋“œ๋กœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ (Infrastructure as Code)
  • โœ… ๋กœ์ปฌ โ†” ์„œ๋ฒ„ โ†” CI/CD ํ™˜๊ฒฝ ํ†ต์ผ
  • โœ… ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์— ์ ํ•ฉ

6. Docker์˜ ํ•œ๊ณ„ ๋ฐ ์ฃผ์˜์ 

  • OS ์ปค๋„์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ ์™„์ „ํ•œ OS ๊ฒฉ๋ฆฌ๋Š” ์•„๋‹˜
  • ๋ณด์•ˆ ์„ค์ •์„ ์ œ๋Œ€๋กœ ํ•˜์ง€ ์•Š์œผ๋ฉด ์œ„ํ—˜
  • ์ปจํ…Œ์ด๋„ˆ ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๊ด€๋ฆฌ ๋ณต์žก๋„ ์ฆ๊ฐ€
    โ†’ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Docker Compose, Kubernetes ๋“ฑ์žฅ

7. ์–ธ์ œ Docker๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€

  • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ํŒ€์› ๊ฐ„ ๋™์ผํ•˜๊ฒŒ ๋งž์ถ”๊ณ  ์‹ถ์„ ๋•Œ
  • ๋กœ์ปฌ์—์„œ ์„œ๋ฒ„ ํ™˜๊ฒฝ์„ ๊ทธ๋Œ€๋กœ ์žฌํ˜„ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
  • CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋™์ผํ•œ ์‹คํ–‰ ํ™˜๊ฒฝ์ด ํ•„์š”ํ•  ๋•Œ
  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ตฌ์กฐ๋กœ ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•  ๋•Œ