[DevCamp] ๐Ÿ“ฆ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

๋™๊ฑดยท2025๋…„ 5์›” 12์ผ

DevCamp

๋ชฉ๋ก ๋ณด๊ธฐ
63/85

๐Ÿ“ฆ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

๋„์ปค(Docker)๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ปจํ…Œ์ด๋„ˆ๋ผ๋Š” ๋‹จ์œ„๋กœ ํŒจํ‚ค์ง•ํ•˜๊ณ 
๋ฐฐํฌ, ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”Œ๋žซํผ์ด๋‹ค.

๊ทธ์ค‘์—์„œ๋„ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ๊ฐœ๋…์œผ๋กœ,

์˜ค๋Š˜์€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€, ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•œ๋‹ค.


๐Ÿณ ์ปจํ…Œ์ด๋„ˆ๋ž€?

๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋Š” ์šด์˜์ฒด์ œ ์ˆ˜์ค€์—์„œ ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์ด๋‹ค.
๊ฐ€์ƒ๋จธ์‹ (VM)๊ณผ ๋‹ฌ๋ฆฌ ์ „์ฒด OS๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ทธ ์˜์กด์„ฑ๋งŒ์„ ํฌํ•จํ•œ๋‹ค.

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

โš™๏ธ ์ปจํ…Œ์ด๋„ˆ vs ๊ฐ€์ƒ๋จธ์‹ 

ํ•ญ๋ชฉ์ปจํ…Œ์ด๋„ˆ๊ฐ€์ƒ๋จธ์‹ 
๊ฒฉ๋ฆฌ ์ˆ˜์ค€ํ”„๋กœ์„ธ์Šค ๊ฒฉ๋ฆฌํ•˜๋“œ์›จ์–ด ๊ฒฉ๋ฆฌ
์‹คํ–‰ ์†๋„๋น ๋ฆ„๋А๋ฆผ
์šฉ๋Ÿ‰์ž‘์Œ (MB ๋‹จ์œ„)ํผ (GB ๋‹จ์œ„)
๋ถ€ํŒ… ์‹œ๊ฐ„์ˆ˜ ์ดˆ์ˆ˜ ๋ถ„

๋„์ปค๋Š” ๋ฆฌ๋ˆ…์Šค ์ปค๋„์˜ namespace์™€ cgroups๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๊ฒฉ๋ฆฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.


๐Ÿ› ๏ธ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์˜ ๊ตฌ์„ฑ ์š”์†Œ

  • Dockerfile: ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์ •์˜ํ•˜๋Š” ์„ค์ • ํŒŒ์ผ
  • Image: ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์„ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ (์ฝ๊ธฐ ์ „์šฉ)
  • Container: ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹คํ–‰ ์ค‘์ธ ์ธ์Šคํ„ด์Šค (์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ฐ€๋Šฅ)

๐Ÿš€ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ณธ ๋ช…๋ น์–ด

# ์ด๋ฏธ์ง€๋กœ๋ถ€ํ„ฐ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
$ docker run -it ubuntu /bin/bash

# ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก ๋ณด๊ธฐ
$ docker ps

# ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ๋ณด๊ธฐ (์ค‘์ง€๋œ ๊ฒƒ๋„ ํฌํ•จ)
$ docker ps -a

# ์ปจํ…Œ์ด๋„ˆ ์ •์ง€
$ docker stop <container_id>

# ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ
$ docker rm <container_id>

๐Ÿ“ ์‹ค์ƒํ™œ ์˜ˆ์‹œ: Node.js ์•ฑ ์ปจํ…Œ์ด๋„ˆํ™”

  1. Dockerfile ์ž‘์„ฑ:
FROM node:18
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]
  1. ์ด๋ฏธ์ง€ ๋นŒ๋“œ & ์‹คํ–‰:
$ docker build -t my-node-app .
$ docker run -p 3000:3000 my-node-app

๐Ÿ”’ ๊ฒฉ๋ฆฌ์™€ ๋ณด์•ˆ์€ ์–ด๋–ป๊ฒŒ ๋ณด์žฅ๋˜๋‚˜?

  • Namespace: PID, ๋„คํŠธ์›Œํฌ, ๋งˆ์šดํŠธ ๋“ฑ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฒฉ๋ฆฌํ•จ
  • Cgroup: CPU, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ œํ•œํ•จ
  • ์ฝ๊ธฐ ์ „์šฉ ์ด๋ฏธ์ง€: ์ปจํ…Œ์ด๋„ˆ์—์„œ๋งŒ ์ฝ๊ธฐ/์“ฐ๊ธฐ ํ—ˆ์šฉ, ์›๋ณธ ์ด๋ฏธ์ง€๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ

๐Ÿ”จ TIL

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

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