With AI

Docker๋ž€

  • -
๋ฐ˜์‘ํ˜•

 

๐Ÿณ Docker๋ž€?

Docker๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ปจํ…Œ์ด๋„ˆ(container)๋ผ๋Š” ๋…๋ฆฝ๋œ ํ™˜๊ฒฝ์—์„œ ํŒจํ‚ค์ง•, ๋ฐฐํฌ, ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.
2013๋…„ ๋„์ปค็คพ(Docker, Inc.)์—์„œ ์‹œ์ž‘๋œ ์ด ๊ธฐ์ˆ ์€ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ํ‘œ์ค€ํ™”ํ•˜๊ณ  ๋ฐฐํฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•ด์ฃผ๋Š” ๋„๊ตฌ๋กœ ์ „ ์„ธ๊ณ„ ๊ฐœ๋ฐœ์ž์™€ DevOps ํŒ€์— ํฐ ์˜ํ–ฅ์„ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

 

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

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

์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ€์ƒ๋จธ์‹ ์ฒ˜๋Ÿผ ๋…๋ฆฝ์ ์ด์ง€๋งŒ, ํ›จ์”ฌ ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๋ฉฐ, OS ์ปค๋„์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

 

โš™๏ธ Docker์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ์š”์†Œ

๊ตฌ์„ฑ์š”์†Œ ์„ค๋ช…
Docker Engine ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋Ÿฐํƒ€์ž„
Docker Image ์ปจํ…Œ์ด๋„ˆ์˜ ์‹คํ–‰ ๋‹จ์œ„๊ฐ€ ๋˜๋Š” ๋ถˆ๋ณ€์˜ ํ…œํ”Œ๋ฆฟ
Docker Container ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•œ ์ธ์Šคํ„ด์Šค, ๋…๋ฆฝ๋œ ํ™˜๊ฒฝ
Dockerfile ์ด๋ฏธ์ง€๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ
Docker Hub ๋„์ปค ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ (๊ณต์‹ ์ด๋ฏธ์ง€, ๊ฐœ์ธ ์ €์žฅ์†Œ ๋“ฑ)
Volume ์ปจํ…Œ์ด๋„ˆ ์™ธ๋ถ€์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ (์˜์†์„ฑ ํ™•๋ณด)
Network ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•œ ๋„คํŠธ์›Œํฌ ๊ตฌ์กฐ (bridge, host ๋“ฑ)

 

๐Ÿ› ๏ธ Docker ์ž‘๋™ ์›๋ฆฌ

  1. Dockerfile ์ž‘์„ฑ: ์–ด๋–ค OS, ์–ด๋–ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ์–ด๋–ค ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋ ์ง€๋ฅผ ์ •์˜
  2. ์ด๋ฏธ์ง€ ์ƒ์„ฑ: Dockerfile์„ ๋นŒ๋“œํ•ด์„œ ๋„์ปค ์ด๋ฏธ์ง€ ์ƒ์„ฑ (docker build)
  3. ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰: ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ (docker run)
  4. ๋ฐฐํฌ ๋ฐ ์šด์˜: ๋„์ปค ํ—ˆ๋ธŒ ๋˜๋Š” ์‚ฌ์„ค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌ

 

๐Ÿงฉ Docker vs VM(๊ฐ€์ƒ๋จธ์‹ )

ํ•ญ๋ชฉ Docker ์ปจํ…Œ์ด๋„ˆ ๊ฐ€์ƒ ๋จธ์‹ (VM)
๋ถ€ํŒ… ์†๋„ ์ˆ˜ ์ดˆ ์ด๋‚ด ์ˆ˜ ๋ถ„
๋ฌด๊ฒŒ ์ˆ˜ MB ์ˆ˜ GB
๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ ์ ์Œ ๋งŽ์Œ
์‹คํ–‰ ๋‹จ์œ„ ํ”„๋กœ์„ธ์Šค ์ˆ˜์ค€ OS ์ˆ˜์ค€
OS ํ•„์š” ํ•˜๋‚˜์˜ OS์—์„œ ๋‹ค์ˆ˜ ์‹คํ–‰ ๊ฐ VM์ด ๋…๋ฆฝ๋œ OS ์‹คํ–‰

 

๐Ÿ“Œ Docker์˜ ์ฃผ์š” ๋ช…๋ น์–ด

docker build -t myapp .           # Dockerfile๋กœ ์ด๋ฏธ์ง€ ์ƒ์„ฑ
docker images                     # ์ด๋ฏธ์ง€ ๋ชฉ๋ก ๋ณด๊ธฐ
docker run -d -p 8080:80 myapp    # ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ (ํฌํŠธ ๋งคํ•‘)
docker ps                         # ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ํ™•์ธ
docker stop [id]                  # ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€
docker rm [id]                    # ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ
docker rmi [image]                # ์ด๋ฏธ์ง€ ์‚ญ์ œ
docker logs [id]                  # ๋กœ๊ทธ ๋ณด๊ธฐ
 
๐Ÿ“ฆ Dockerfile ์˜ˆ์‹œ
 
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]

 

 

โ˜๏ธ Docker์™€ CI/CD

Docker๋Š” CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋งค์šฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

  • GitHub Actions, GitLab CI, Jenkins ๋“ฑ๊ณผ ์‰ฝ๊ฒŒ ํ†ตํ•ฉ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํŠน์ • ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์ปจํ…Œ์ด๋„ˆํ™”ํ•˜์—ฌ ๋ฐฐํฌ
  • ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ(Zero Downtime Deployment) ๊ฐ€๋Šฅ

 

๐ŸŒ Kubernetes์™€ ์—ฐ๋™

๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹จ๋…์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก Kubernetes(์ฟ ๋ฒ„๋„คํ‹ฐ์Šค) ๊ฐ™์€ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ๋‹ค์ˆ˜์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์Šค์ผ€์ผ๋ง, ์—…๋ฐ์ดํŠธ, ๋ณต๊ตฌ, ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ
  • Kubernetes๋Š” Docker๋ฅผ ์ง€์›ํ•˜๋ฉฐ, Docker๋Š” Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ธฐ๋ฐ˜ ๋‹จ์œ„๊ฐ€ ๋ฉ๋‹ˆ๋‹ค (๋‹จ, ํ˜„์žฌ๋Š” Containerd ๋“ฑ์˜ ๋Ÿฐํƒ€์ž„์œผ๋กœ ์ „ํ™˜๋˜๋Š” ์ถ”์„ธ)

 

โœ… Docker์˜ ์žฅ์  ์š”์•ฝ

  • ํ™˜๊ฒฝ ์ผ๊ด€์„ฑ ํ™•๋ณด: ์–ด๋””์„œ๋“  ๋˜‘๊ฐ™์ด ์‹คํ–‰๋จ
  • ๋น ๋ฅธ ๋ฐฐํฌ ๋ฐ ๋กค๋ฐฑ
  • ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ
  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์— ์ ํ•ฉ
  • ํด๋ผ์šฐ๋“œ ์นœํ™”์ 

 

โ— ์ฃผ์˜์  ๋ฐ ํ•œ๊ณ„

ํ•ญ๋ชฉ ๋‚ด์šฉ
๋ณด์•ˆ ์ปจํ…Œ์ด๋„ˆ ๊ฒฉ๋ฆฌ๋Š” ์™„์ „ํ•œ ๊ฐ€์ƒํ™” ์ˆ˜์ค€์€ ์•„๋‹˜
ํผํฌ๋จผ์Šค ์ปจํ…Œ์ด๋„ˆ ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๋„คํŠธ์›Œํฌ ๋ฐ ๋ณผ๋ฅจ ๊ด€๋ฆฌ ๋ณต์žก๋„ ์ฆ๊ฐ€
ํ•™์Šต ๊ณก์„  ์ฒ˜์Œ ์ ‘ํ•˜๋ฉด Dockerfile, ๋„คํŠธ์›Œํฌ, ๋ณผ๋ฅจ, ์ด๋ฏธ์ง€ ๊ณ„์ธต ์ดํ•ด ํ•„์š”

 

๐Ÿงญ ๋งˆ๋ฌด๋ฆฌ

Docker๋Š” ๋‹จ์ˆœํ•œ ๊ฐ€์ƒํ™” ๋„๊ตฌ๋ฅผ ๋„˜์–ด ํ˜„๋Œ€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ํ•ต์‹ฌ ์ธํ”„๋ผ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
ํŠนํžˆ DevOps, ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ๋“ฑ์—์„œ๋Š” ํ‘œ์ค€์ ์ธ ๋ฐฐํฌ ๋„๊ตฌ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์œผ๋ฉฐ,
๊ฐœ๋ฐœ๋ถ€ํ„ฐ ์šด์˜๊นŒ์ง€์˜ ์ผ๊ด€์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ๋ฐ ํฐ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.