๐ŸŒ CS & Infra/Infrastructure

Docker

devCloud 2026. 3. 10. 21:59
728x90

๐Ÿ“‹ ๋ชฉ์ฐจ


๐Ÿ“Œ ๋„์ปค๋ž€?

  • ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ๊ฐ€์ƒํ™” ๋„๊ตฌ (2013๋…„ ๋“ฑ์žฅ)
  • ๋ฆฌ๋ˆ…์Šค์˜ ํ”„๋กœ์„ธ์Šค ๊ฒฉ๋ฆฌ ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•ด ์•ฑ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ด€๋ฆฌ
  • OS ์ „์ฒด๋ฅผ ๋„์šฐ๋Š” VM(๊ฐ€์ƒ๋จธ์‹ )๊ณผ ๋‹ฌ๋ฆฌ ๊ฐ€๋ณ๊ณ  ๋น ๋ฆ„
  • ์–ด๋–ค ํ™˜๊ฒฝ(๋กœ์ปฌ, AWS, Azure ๋“ฑ)์—์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์‹คํ–‰ ๊ฐ€๋Šฅ → ํ™˜๊ฒฝ ์˜์กด์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ

๐Ÿ“ฆ ํ•ต์‹ฌ ๊ฐœ๋…

์ปจํ…Œ์ด๋„ˆ (Container)

  • ์„ ๋ฐ• ์ปจํ…Œ์ด๋„ˆ์ฒ˜๋Ÿผ ๊ทœ๊ฒฉํ™”๋œ ์‹คํ–‰ ๋‹จ์œ„
  • ์•ฑ + ์‹คํ–‰์— ํ•„์š”ํ•œ ํ™˜๊ฒฝ(์˜์กด์„ฑ, ์„ค์ •)์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ๊ฒฉ๋ฆฌ๋œ ๊ณต๊ฐ„์—์„œ ์‹คํ–‰
  • ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด๋ฏธ์ง€๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋จ

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

  • ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์„ค๊ณ„๋„/ํ…œํ”Œ๋ฆฟ
  • Dockerfile๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Œ
  • Docker Hub์—์„œ ๊ณต์‹ ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅ
  • URL ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌ: ubuntu:14.04 ์ฒ˜๋Ÿผ ์ด๋ฆ„:ํƒœ๊ทธ ํ˜•์‹

Dockerfile

  • ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๊ณผ์ •์„ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋Š” ํŒŒ์ผ
  • ์„œ๋ฒ„ ์„ค์ •/์„ค์น˜ ๊ณผ์ •์„ ๋ฌธ์„œ ๋Œ€์‹  ์ฝ”๋“œ๋กœ ๊ด€๋ฆฌ
  • docker build -t {์ด๋ฏธ์ง€๋ช…} . ์œผ๋กœ ์ด๋ฏธ์ง€ ์ƒ์„ฑ

Docker Compose

  • ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•œ ๋ฒˆ์— ์ •์˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ
  • docker-compose.yml ํŒŒ์ผ์— ์„œ๋น„์Šค ๊ตฌ์„ฑ์„ ์„ ์–ธ
  • ์›น ์„œ๋ฒ„ + DB + ์บ์‹œ ์„œ๋ฒ„์ฒ˜๋Ÿผ ๋ฉ€ํ‹ฐ ์ปจํ…Œ์ด๋„ˆ ์•ฑ์— ํ•„์ˆ˜

๐Ÿ–ฅ๏ธ VM๊ณผ Docker ์ฐจ์ด

[ VM ]
ํ˜ธ์ŠคํŠธ OS
โ””โ”€โ”€ ํ•˜์ดํผ๋ฐ”์ด์ € (VMware, VirtualBox ๋“ฑ)
    โ”œโ”€โ”€ Guest OS (Windows, Linux...)  ← OS ์ „์ฒด๋ฅผ ๋„์›€
    โ”‚   โ””โ”€โ”€ ์•ฑ
    โ””โ”€โ”€ Guest OS
        โ””โ”€โ”€ ์•ฑ
[ Docker ]
ํ˜ธ์ŠคํŠธ OS
โ””โ”€โ”€ Docker Engine
    โ”œโ”€โ”€ ์ปจํ…Œ์ด๋„ˆ (์•ฑ + ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ)  ← OS ์—†์Œ!
    โ””โ”€โ”€ ์ปจํ…Œ์ด๋„ˆ

 

ํ•ต์‹ฌ ์ฐจ์ด๋Š” Guest OS ์œ ๋ฌด์ด๋‹ค.

  • VM → ๊ฐ€์ƒ ํ•˜๋“œ์›จ์–ด ์œ„์— OS๋ฅผ ํ†ต์งธ๋กœ ์˜ฌ๋ฆผ → ๋ฌด๊ฒ๊ณ  ๋А๋ฆผ
  • Docker → ํ˜ธ์ŠคํŠธ OS์˜ ์ปค๋„์„ ๊ณต์œ ํ•ด์„œ ์“ฐ๊ณ , ์•ฑ ์‹คํ–‰์— ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ํŒจํ‚ค์ง• → ๊ฐ€๋ณ๊ณ  ๋น ๋ฆ„

๊ทธ๋ž˜์„œ ๋„์ปค๋Š” "๊ฐ€์ƒ ๋จธ์‹ "์ด ์•„๋‹ˆ๋ผ ์ปจํ…Œ์ด๋„ˆ ๊ฐ€์ƒํ™”๋ผ๊ณ  ๋”ฐ๋กœ ๋ถ€๋ฅธ๋‹ค. VM์ฒ˜๋Ÿผ ์™„์ „ํ•œ ์ปดํ“จํ„ฐ๋ฅผ ํ‰๋‚ด ๋‚ด๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฒฉ๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


๐Ÿš€ ๋ฐฐํฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ

[ ๊ฐœ๋ฐœ ์™„๋ฃŒ ]
๋ฐฑ์—”๋“œ (Spring Boot)
ํ”„๋ก ํŠธ์—”๋“œ (React)
DB (MySQL)
↓
[ ๊ฐ๊ฐ Dockerfile ์ž‘์„ฑ ]
↓
[ docker-compose.yml ๋กœ ๋ฌถ๊ธฐ ]
↓
[ ์„œ๋ฒ„์—์„œ docker-compose up ํ•œ ๋ฐฉ! ]

 

์„œ๋ฒ„์— ๋„์ปค๋งŒ ์„ค์น˜๋˜์–ด ์žˆ์œผ๋ฉด Java ๋ฒ„์ „, Node.js ๋ฒ„์ „ ๊ฐ™์€ ๊ฑฐ ์‹ ๊ฒฝ ์•ˆ ์จ๋„ ๋˜๊ณ , ๋ช…๋ น์–ด ํ•˜๋‚˜๋กœ ์ „์ฒด ์„œ๋น„์Šค๊ฐ€ ๋œจ๋Š” ๊ฒƒ์ด๋‹ค.


โŒจ๏ธ ๊ธฐ๋ณธ ๋ช…๋ น์–ด

ํ™˜๊ฒฝ ํ™•์ธ

docker -v              # ๋„์ปค ๋ฒ„์ „ ํ™•์ธ

 

์ด๋ฏธ์ง€ ๊ด€๋ จ

docker pull {์ด๋ฏธ์ง€๋ช…}:{ํƒœ๊ทธ}     # ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ
# ์˜ˆ: docker pull python:3

docker images                   # ๋กœ์ปฌ ์ด๋ฏธ์ง€ ๋ชฉ๋ก ํ™•์ธ

docker rmi {์ด๋ฏธ์ง€ id}           # ์ด๋ฏธ์ง€ ์‚ญ์ œ
docker rmi -f {์ด๋ฏธ์ง€ id}        # ์ปจํ…Œ์ด๋„ˆ ์žˆ์–ด๋„ ๊ฐ•์ œ ์‚ญ์ œ

docker build -t {์ด๋ฏธ์ง€๋ช…} .     # Dockerfile๋กœ ์ด๋ฏธ์ง€ ๋นŒ๋“œ โญ

 

์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ & ์‹คํ–‰

docker create {์˜ต์…˜} {์ด๋ฏธ์ง€๋ช…}:{ํƒœ๊ทธ}     # ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ
# ์˜ˆ: docker create -it python

docker start {์ปจํ…Œ์ด๋„ˆ id ๋˜๋Š” ์ด๋ฆ„}      # ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘

docker attach {์ปจํ…Œ์ด๋„ˆ id ๋˜๋Š” ์ด๋ฆ„}     # ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์ง„์ž…

# โญ ์œ„ 3๊ฐœ๋ฅผ ํ•œ ๋ฒˆ์—: pull + create + start + attach
docker run {์ด๋ฏธ์ง€๋ช…}:{ํƒœ๊ทธ}
# ์˜ˆ: docker run -it python:3

 

docker run ์ฃผ์š” ์˜ต์…˜

์˜ต์…˜ ์„ค๋ช…
-d ๋ฐฑ๊ทธ๋ผ์šด๋“œ(๋ฐ๋ชฌ)์œผ๋กœ ์‹คํ–‰
-it CLI ์ž…์ถœ๋ ฅ ๊ฐ€๋Šฅํ•˜๋„๋ก (bash ์ ‘๊ทผ)
--name {์ด๋ฆ„} ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„ ์ง€์ •
-p {ํ˜ธ์ŠคํŠธํฌํŠธ}:{์ปจํ…Œ์ด๋„ˆํฌํŠธ} ํฌํŠธ ์—ฐ๊ฒฐ
--rm ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ ์‹œ ์ž๋™ ์‚ญ์ œ
-v {ํ˜ธ์ŠคํŠธ ๋””๋ ‰ํ† ๋ฆฌ}:{์ปจํ…Œ์ด๋„ˆ ๋””๋ ‰ํ† ๋ฆฌ} ๋””๋ ‰ํ† ๋ฆฌ(๋ณผ๋ฅจ) ์—ฐ๊ฒฐ

 

์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ

docker ps              # ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก โญ
docker ps -a           # ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก (์ค‘์ง€ ํฌํ•จ)

docker restart {์ปจํ…Œ์ด๋„ˆ id ๋˜๋Š” ์ด๋ฆ„}    # ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘

docker rm {์ปจํ…Œ์ด๋„ˆ id ๋˜๋Š” ์ด๋ฆ„}         # ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ
docker rm `docker ps -a -q`              # ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ โญ

 

์ปจํ…Œ์ด๋„ˆ ์‰˜ ์กฐ์ž‘

exit          # ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒํ•˜๋ฉฐ ๋น ์ ธ๋‚˜์˜ค๊ธฐ
Ctrl + D      # ๋™์ผ

Ctrl + P, Q   # ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ ์—†์ด ๋น ์ ธ๋‚˜์˜ค๊ธฐ

 

์ „์ฒด ์ดˆ๊ธฐํ™”

# โญ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€ + ๋„์ปค ์š”์†Œ ์ „์ฒด ์‚ญ์ œ (์‹ค์Šต ์ดˆ๊ธฐํ™” ์‹œ ์œ ์šฉ)
docker stop $(docker ps -aq)
docker system prune -a
# → ํ™•์ธ ์งˆ๋ฌธ์— y ์ž…๋ ฅ

 

Docker Compose

docker-compose up       # ์ปดํฌ์ฆˆ ์‹คํ–‰ โญ
docker-compose up -d    # ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ฐ๋ชฌ์œผ๋กœ ์‹คํ–‰

๐Ÿ”— ์ฐธ๊ณ  ๋งํฌ

728x90