๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐‘†๐‘ข๐‘›๐‘ โ„Ž๐‘–๐‘›๐‘’ ๐‘Ž๐‘“๐‘ก๐‘’๐‘Ÿ ๐‘Ÿ๐‘Ž๐‘–๐‘›โœง

[Docker] ์šด์˜ ํ™˜๊ฒฝ Docker Compose ์ž‘์„ฑ & ์Šคํ”„๋ง๋ถ€ํŠธ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ํ•˜๊ธฐ ๋ณธ๋ฌธ

๐—ฃ๐—ฟ๐—ผ๐—ด๐—ฟ๐—ฎ๐—บ๐—บ๐—ถ๐—ป๐—ด๐Ÿ’ป/๐ƒ๐จ๐œ๐ค๐ž๐ซ

[Docker] ์šด์˜ ํ™˜๊ฒฝ Docker Compose ์ž‘์„ฑ & ์Šคํ”„๋ง๋ถ€ํŠธ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ํ•˜๊ธฐ

๐ŸคRyusun๐Ÿค 2024. 3. 13. 08:20

ํ•„์ž๋Š” ๋กœ์ปฌํ™˜๊ฒฝ์—์„œ ์ธํ…”๋ฆฌ์ œ์ด ๋””๋ฒ„๊น…์„ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋กœ์ปฌํ™˜๊ฒฝ์—์„œ๋Š” Redis์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปจํ…Œ์ด๋„ˆ๋งŒ ๋„์› ๋‹ค. ํ•˜์ง€๋งŒ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค์˜ ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด์„œ๋Š” ์Šคํ”„๋ง๋ถ€ํŠธ ์ปจํ…Œ์ด๋„ˆ๋„ ๋„์›Œ์ค˜์•ผ ํ•œ๋‹ค.

์šด์˜ํ™˜๊ฒฝ์„ ์œ„ํ•œ Redis + Mysql + Spring Boot ์ปจํ…Œ์ด๋„ˆ๋ฅผ๋„์›Œ๋ณด์ž.

 


 


์šฐ์„  ์šด์˜ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•  Docker Compose ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜์ž. ์ด์ „์— ๋กœ์ปฌ ํ™˜๊ฒฝ์„ ์œ„ํ•ด ์ƒ์„ฑํ–ˆ๋˜ docker-compose-local.yml๊ณผ Dockerfile๊ณผ ๋™์ผํ•œ ๊ฒฝ๋กœ์— docker-compose.yml ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด ์ค€๋‹ค.

docker-compose.yml

version: "3.8"
services:
  creditmarket-redis: # ์„œ๋น„์Šค๋ช…
    container_name: creditmarket-redis # ์ปจํ…Œ์ด๋„ˆ๋ช…
    build:
      dockerfile: Dockerfile
      context: ./redis
    image: ryusunny/creditmarket-redis
    ports:
      - "6379:6379"

  creditmarket-db: # ์„œ๋น„์Šค๋ช…
    container_name: creditmarket-db # ์ปจํ…Œ์ด๋„ˆ๋ช…
    restart: always
    build:
      dockerfile: Dockerfile
      context: ./database
    image: ryusunny/creditmarket-db
    environment:
      MYSQL_DATABASE: ${DB_USERNAME}
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
    volumes:
      - ./database/config:/etc/mysql/conf.d
      - ./database/init:/docker-entrypoint-initdb.d
    ports:
      - "3307:3306"

  creditmarket-app: # ์„œ๋น„์Šค๋ช…
    container_name: creditmarket-app # ์ปจํ…Œ์ด๋„ˆ๋ช…
    build: .
    depends_on: # DB, REDIS ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋œ ๋‹ค์Œ WEB์„ ์‹คํ–‰์‹œํ‚จ๋‹ค.
      - creditmarket-db
      - creditmarket-redis
    image: ryusunny/creditmarket-app
    environment:
      SPRING_DATASOURCE_USERNAME: ${DB_USERNAME}
      SPRING_DATASOURCE_PASSWORD: ${DB_PASSWORD}
      SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE}
    ports:
      - "80:8080" # ์ ‘๊ทผ ํฌํŠธ ์„ค์ • (์ปจํ…Œ์ด๋„ˆ ์™ธ๋ถ€:์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€)
    restart: always
    # depends on์€ ์‹คํ–‰ ์ˆœ์„œ๋งŒ ์ปจํŠธ๋กค ํ• ๋ฟ,
    # ์ปจํ…Œ์ด๋„ˆ ์•ˆ์˜ ์„œ๋น„์Šค๊ฐ€ ์‹คํ–‰๊ฐ€๋Šฅํ•œ ์ƒํƒœ์ธ์ง€๊นŒ์ง€๋Š” ํ™•์ธ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—
    # DB ๋˜๋Š” Redis๊ฐ€ ์•„์ง ์‹คํ–‰๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ์—ฌ์„œ ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ ์žฌ์‹œ์ž‘ ํ•˜๋„๋ก ์„ค์ •

 

์ด์ „์— docker-compose-local.yml์— ์ž‘์„ฑํ–ˆ๋˜ redis์™€ database ์„ค์ •์€ ๋™์ผํ•˜๋‹ค.

์—ฌ๊ธฐ์— ์ถ”๊ฐ€๋กœ ์ƒˆ๋กœ ๋„์šธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ ์„ค์ •๊ฐ’์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

application.yml

 

 

๋„์ปค ์„ค์ •์„ ๋‹คํ–ˆ์œผ๋ฏ€๋กœ application.yml์˜ prod profile๋ฅผ ์„ค์ •ํ•ด์ค€๋‹ค.

์šด์˜ํ™˜๊ฒฝ ์„ค์ •๊ฐ’์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค url๋ถ€๋ถ„๊ณผ redis host ๋ถ€๋ถ„์„ ์ œ์™ธํ•œ ๋กœ์ปฌ ์„ค์ •๊ฐ’์ด๋ž‘ ๋™์ผํ•˜๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค url ๋ถ€๋ถ„๊ณผ redis host๋ถ€๋ถ„์€ docker-compose ํŒŒ์ผ์—์„œ ์ง€์ •ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋น„์Šค๋ช…๊ณผ redis ์„œ๋น„์Šค ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

 

์ด์ œ ์„ค์ •์ด ๋๋‚ฌ๋‹ค.

ํ•œ๋ฒˆ ์‹คํ–‰์„ ํ•ด๋ณด์ž

./gradlew clean build

docker-compose up --build

 

clean bulid๋ฅผ ํ†ตํ•ด jarํŒŒ์ผ์„ ๋‹ค์‹œ ์ƒ์„ฑํ•ด์ค€๋‹ค.

๋„์ปค ์ปดํฌ์ฆˆ๊ฐ€ ์‹คํ–‰์ด ๋  ๋•Œ ์ด๋ฏธ์ง€๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋ฉด ๊ทธ ์บ์‹ฑ๋œ ์ด๋ฏธ์ง€๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. docker-compose up --build์—์„œ --build ์˜ต์…˜์€ ์ด๋ฏธ์ง€๋ฅผ ์žฌ๋นŒ๋“œ ํ•ด์ค€๋‹ค. 

์‹คํ–‰์„ ํ•œ ํ›„ ์ปจํ…Œ์ด๋„ˆ 3๊ฐœ๊ฐ€ ์ž˜ ๋„์›Œ์กŒ๋Š”์ง€ ํ™•์ธํ•ด ๋ณด์ž

 

 

์ปจํ…Œ์ด๋„ˆ 3๊ฐœ๊ฐ€ ์ž˜ ๋„์›Œ์กŒ๋‹ค!!

๋‹ค์Œ ๊ธ€์€ ์ด ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค์— ๋ฐฐํฌ๋ฅผ ํ•ด๋ณผ ๊ฒƒ์ด๋‹ค.