๐Ÿณ [Docker ์‹ค์Šต] ์ง์ ‘ ์‹คํ–‰๋ถ€ํ„ฐ Docker Compose๊นŒ์ง€

์ด์ง„์ผยท2026๋…„ 5์›” 6์ผ
post-thumbnail

๐Ÿ—๏ธ ์‹ค์Šต ์‹œ๋‚˜๋ฆฌ์˜ค

๋‘ ๊ฐœ์˜ ์Šคํ”„๋ง ๋ถ€ํŠธ ์„œ๋น„์Šค๊ฐ€ ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

  • Service-B: /hello ํ˜ธ์ถœ ์‹œ "hello"๋ผ๋Š” ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์„œ๋ฒ„.
  • Service-A: OpenFeign์„ ์ด์šฉํ•ด Service-B๋ฅผ ํ˜ธ์ถœ. ์ž์‹ ์˜ ๋ฉ”์‹œ์ง€์™€ B์˜ ์‘๋‹ต์„ ํ•ฉ์ณ์„œ ๋ฐ˜ํ™˜. (sevice-a: hi ###### service-b: hello)

1๏ธโƒฃ 1๋‹จ๊ณ„: ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์ง์ ‘ ์‹คํ–‰

๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ๋‹จ๊ณ„๋กœ, ๋‚ด ์ปดํ“จํ„ฐ(Local) ํ™˜๊ฒฝ์—์„œ ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ง์ ‘ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ์„ค์ • ๋ฐฉ์‹: ํฌํŠธ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ๊ธฐ ๋‹ค๋ฅธ ํฌํŠธ๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.
    • Service-A: 18080 ํฌํŠธ
    • Service-B: 18081 ํฌํŠธ
  • ํ†ต์‹  ๋ฐฉ์‹: localhost:18081๊ณผ ๊ฐ™์ด ์‹ค์ œ ํ˜ธ์ŠคํŠธ์˜ IP์™€ ํฌํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ํŠน์ง•: ๊ด€๋ฆฌํ•ด์•ผ ํ•  ์„œ๋น„์Šค๊ฐ€ ๋Š˜์–ด๋‚ ์ˆ˜๋ก ํฌํŠธ ๋ฒˆํ˜ธ ๊ด€๋ฆฌ๊ฐ€ ๋งค์šฐ ๋ฒˆ๊ฑฐ๋กญ๊ณ  ํ™˜๊ฒฝ์ด ํŒŒํŽธํ™”๋ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ 2๋‹จ๊ณ„: Docker์™€ ์‚ฌ์šฉ์ž ์ •์˜ ๋„คํŠธ์›Œํฌ

๊ฐ ์„œ๋น„์Šค๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ฒฉ๋ฆฌํ•˜์—ฌ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ•ต์‹ฌ์€ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์œผ๋กœ ์„œ๋กœ๋ฅผ ์ธ์‹ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๐ŸŒ ์™œ ์‚ฌ์šฉ์ž ์ •์˜ ๋„คํŠธ์›Œํฌ์ธ๊ฐ€?

๋„์ปค์˜ ๊ธฐ๋ณธ ๋ธŒ๋ฆฌ์ง€(Bridge) ๋„คํŠธ์›Œํฌ๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์œผ๋กœ ์„œ๋กœ๋ฅผ ์ฐพ๋Š” DNS ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ๋„คํŠธ์›Œํฌ๋ฅผ ๋งŒ๋“ค๊ณ  ์—ฐ๊ฒฐํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž ์ •์˜ ๋„คํŠธ์›Œํฌ ์ƒ์„ฑ:

    docker network create my-network
  2. Service-B ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋ฐ ์‹คํ–‰:

    # 1. ์ด๋ฏธ์ง€ ์ƒ์„ฑ (Dockerfile ์œ„์น˜์—์„œ ์‹คํ–‰)
    docker build -t img-service-b .
    
    # 2. ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ (๋„คํŠธ์›Œํฌ ์ง€์ • ํ•„์ˆ˜!)
    docker run -d --name service-b \
      --network my-network \
      -p 18081:8080 \
      img-service-b
  • ํ•ต์‹ฌ ๋ณ€ํ™”: ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์ด๋ฏ€๋กœ ๋‚ด๋ถ€ ํฌํŠธ๋ฅผ ๋ชจ๋‘ 8080์œผ๋กœ ํ†ต์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ ํฌํŠธ(18081)๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์™ธ๋ถ€์™€ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

3๏ธโƒฃ 3๋‹จ๊ณ„: Docker Compose๋กœ ์ผ๊ด„ ๊ด€๋ฆฌ

๋งค๋ฒˆ ๋„คํŠธ์›Œํฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ธด docker run ๋ช…๋ น์–ด๋ฅผ ์ผ์ผ์ด ์ž…๋ ฅํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์„ docker-compose.yml ํ•˜๋‚˜๋กœ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“„ docker-compose.yml ์ž‘์„ฑ

version: '3.8'

services:
  service-a:
    image: img-service-a
    ports:
      - "18080:8080"
    environment:
      - SERVICE_B_URL=http://service-b:8080
    depends_on:
      - service-b

  service-b:
    image: img-service-b
    ports:
      - "18081:8080"

networks:
  default:
    driver: bridge

โœจ Docker Compose๊ฐ€ ์ฃผ๋Š” ์ด์ 

  • ๋„คํŠธ์›Œํฌ ์ž๋™ ๊ด€๋ฆฌ: docker network create๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Compose๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์ „์šฉ ๋„คํŠธ์›Œํฌ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜๊ณ  ๋ชจ๋“  ์„œ๋น„์Šค๋ฅผ ์†Œ์†์‹œํ‚ต๋‹ˆ๋‹ค.
  • ์„œ๋น„์Šค ์ด๋ฆ„ ํ†ต์‹ : OpenFeign ์„ค์ •์—์„œ IP ์ฃผ์†Œ ๋Œ€์‹  ์„œ๋น„์Šค ๋ช…์ธ service-b๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋„์ปค๊ฐ€ ์ž๋™์œผ๋กœ ํ†ต์‹  ๊ฒฝ๋กœ๋ฅผ ์ฐพ์•„์ค๋‹ˆ๋‹ค.
  • ์›Œํฌํ”Œ๋กœ์šฐ ๊ฐ„์†Œํ™”: docker-compose up ๋ช…๋ น ํ•˜๋‚˜๋กœ ๋นŒ๋“œ, ๋„คํŠธ์›Œํฌ ์ƒ์„ฑ, ์‹คํ–‰์ด ํ•œ ๋ฒˆ์— ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ Docker Compose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, Docker Compose๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒˆ ๋ธŒ๋ฆฌ์ง€ ๋„คํŠธ์›Œํฌ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ฐ ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ทธ ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๋„คํŠธ์›Œํฌ๋Š” docker-compose.yml ํŒŒ์ผ์— ์ •์˜๋œ ๋ชจ๋“  ์„œ๋น„์Šค๊ฐ€ ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

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