[Docker] docker๋ž€?

DevelopHeoยท2025๋…„ 2์›” 2์ผ
post-thumbnail

๐Ÿณ 1. Docker ๋ž€?

Docker๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜์˜ ๊ฐ€์ƒํ™” ๊ธฐ์ˆ ์„ ์ œ๊ณตํ•˜๋Š” ํ”Œ๋žซํผ์œผ๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋น ๋ฅด๊ณ  ์ผ๊ด€๋˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

  • ์ปจํ…Œ์ด๋„ˆ(Container)๋ฅผ ํ™œ์šฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ํ™˜๊ฒฝ ์ œ๊ณต
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ชจ๋“  ์ข…์†์„ฑ์„ ํ•จ๊ป˜ ํŒจํ‚ค์ง•ํ•˜์—ฌ ์–ด๋””์„œ๋“  ๋™์ผํ•œ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅ
  • ๊ฐ€์ƒ ๋จธ์‹ (VM)๋ณด๋‹ค ๊ฐ€๋ณ๊ณ  ๋น ๋ฅธ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅ



๐Ÿณ 2. Docker์˜ ํ•ต์‹ฌ ๊ฐœ๋…

๐Ÿ“Œ 1. ์ปจํ…Œ์ด๋„ˆ(Container)

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

๐Ÿ“Œ 2. ๋„์ปค ์ด๋ฏธ์ง€(Image)

  • ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ชจ๋“  ์š”์†Œ(์ฝ”๋“œ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, OS ์ข…์† ํŒŒ์ผ ๋“ฑ)๋ฅผ ํฌํ•จํ•œ ํ…œํ”Œ๋ฆฟ
  • ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹คํ–‰๋จ
  • Docker Hub ๋˜๋Š” ๊ฐœ์ธ ์ €์žฅ์†Œ(Registry)์— ์—…๋กœ๋“œ ๊ฐ€๋Šฅ

๐Ÿ“Œ 3. ๋„์ปค ์ปจํ…Œ์ด๋„ˆ(Container)

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

๐Ÿ“Œ 4. ๋„์ปค ํ—ˆ๋ธŒ(Docker Hub)

  • ๋„์ปค ์ด๋ฏธ์ง€๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณต์‹ ์ €์žฅ์†Œ(Registry)
  • docker pull์„ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  docker push๋กœ ์—…๋กœ๋“œ ๊ฐ€๋Šฅ

๐Ÿ“Œ 5. Dockerfile

  • ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ • ํŒŒ์ผ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์— ํ•„์š”ํ•œ ํ™˜๊ฒฝ์„ ์ •์˜
  • docker build ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑ



๐Ÿณ 3. Docker vs VM ๋น„๊ต

ํ•ญ๋ชฉDocker (์ปจํ…Œ์ด๋„ˆ)Virtual Machine (VM)
์†๋„๋น ๋ฆ„๋А๋ฆผ
๊ฒฝ๋Ÿ‰์„ฑ๊ฐ€๋ณ๊ณ  ํšจ์œจ์ ๋ฌด๊ฒ๊ณ  ๋งŽ์€ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ
OS ์ข…์†์„ฑํ˜ธ์ŠคํŠธ OS ๊ณต์œ ๋ณ„๋„์˜ OS ํ•„์š”
๋ฐฐํฌ ๋ฐ ํ™•์žฅ๋น ๋ฅด๊ณ  ์šฉ์ด๋А๋ฆฌ๊ณ  ๋ณต์žก
๊ฒฉ๋ฆฌ ์ˆ˜์ค€ํ”„๋กœ์„ธ์Šค ์ˆ˜์ค€ ๊ฒฉ๋ฆฌ์™„์ „ํ•œ OS ์ˆ˜์ค€ ๊ฒฉ๋ฆฌ


๐Ÿณ 4. Docker ๊ธฐ๋ณธ ๋ช…๋ น์–ด

๐Ÿ“Œ ์ด๋ฏธ์ง€ ๊ด€๋ จ ๋ช…๋ น์–ด

# ๋„์ปค ์ด๋ฏธ์ง€ ๋ชฉ๋ก ํ™•์ธ
docker images 

# ๋„์ปค ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ (์˜ˆ: nginx ์ตœ์‹  ๋ฒ„์ „)
docker pull nginx 

# ๋„์ปค ์ด๋ฏธ์ง€ ์‚ญ์ œ
docker rmi ์ด๋ฏธ์ง€ID

๐Ÿ“Œ ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ จ ๋ช…๋ น์–ด

# ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ (์˜ˆ: nginx ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰)
docker run -d --name my-nginx -p 8080:80 nginx 

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

# ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก ์กฐํšŒ (์ค‘์ง€๋œ ์ปจํ…Œ์ด๋„ˆ ํฌํ•จ)
docker ps -a  

# ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€
docker stop ์ปจํ…Œ์ด๋„ˆID 

# ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ
docker rm ์ปจํ…Œ์ด๋„ˆID 

๐Ÿ“Œ Dockerfile์„ ์ด์šฉํ•œ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋ฐ ์‹คํ–‰

# ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ Dockerfile์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฏธ์ง€ ๋นŒ๋“œ
docker build -t my-app .

# ๋นŒ๋“œํ•œ ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
docker run -d --name my-container -p 3000:3000 my-app

๐Ÿณ 5. Docker Compose

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ
  • docker-compose.yml ํŒŒ์ผ์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ •์˜ํ•˜๊ณ  ์‹คํ–‰ ๊ฐ€๋Šฅ

๐Ÿ“Œ ์˜ˆ์ œ (Nginx + Node.js + MySQL)

version: '3.8'

services:
  app:
    build: .
    container_name: spring-app
    restart: always
    ports:
      - "8080:8080"
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/mydb?serverTimezone=UTC&characterEncoding=UTF-8
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: root
    depends_on:
      - db

  db:
    image: mysql:8
    container_name: mysql-db
    restart: always
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: mydb
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:
# ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
docker-compose up -d

# ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ ๋ฐ ์‚ญ์ œ
docker-compose down

๐Ÿณ 6. ๋„์ปค ์‚ฌ์šฉ ์‹œ ์žฅ์ 

  1. ์ผ๊ด€๋œ ํ™˜๊ฒฝ ์ œ๊ณต
  2. ๊ฒฝ๋Ÿ‰ํ™”๋œ ๊ฐ€์ƒํ™” ๊ธฐ์ˆ 
  3. ๋น ๋ฅธ ๋ฐฐํฌ ๋ฐ ํ™•์žฅ์„ฑ
  4. CI/CD ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ์—ฐ๋™ ๊ฐ€๋Šฅ
  5. ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ์„œ๋ฒ„ ํ™˜๊ฒฝ์„ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€ ๊ฐ€๋Šฅ

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