๐Ÿ”ŒDocker

[์‹ค์Šต] Docker Spring Boot + Postgresql (3)

harry.93 2022. 1. 25. 16:27
๋ฐ˜์‘ํ˜•

๊ฐœ์„ ์‚ฌํ•ญ ์ง„ํ–‰

1. Docker Compose ํ™˜๊ฒฝ ๋ณ„๋กœ ๊ตฌ๋ถ„ํ•˜๊ธฐ.

2. ๋„คํŠธ์›Œํฌ ๊ด€๋ จ ์ฐพ์•„๋ณด๊ธฐ


Docker Compose ๊ตฌ๋ถ„ํ•˜๊ธฐ

๋‹จ์ผ docker-compose.yml ์„ multi-compose.yml ๋กœ ๋ถ„ํ• .

docker-compose ํŒŒ์ผ ๋‚ด์—์„œ๋Š” if case ๊ฐ™์€ ์กฐ๊ฑด๋ฌธ์˜ ์ž‘์„ฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์กฐ๊ฑด๋ฌธ์˜ ์ž‘์„ฑ์ด ๋ถˆ๊ฐ€๋Šฅ ํ•˜์—ฌ Multi-compose file ํ˜•ํƒœ๋กœ ์ž‘์„ฑ์„ ํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค.

docker-compose ์˜ต์…˜ ์ค‘, -f ์˜ต์…˜์„ ์ง€์ •ํ•˜์—ฌ compose ํŒŒ์ผ์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. (์˜ต์…˜ ์ฐธ๊ณ )

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

 

์ถ”๊ฐ€์ ์œผ๋กœ, ๊ฐ ํ™˜๊ฒฝ๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ณ€์ˆ˜ ๋˜๋Š” ๊ฐ’ ๋•Œ๋ฌธ์— .env ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํ˜•ํƒœ๋กœ ๊ฐ ํ™˜๊ฒฝ ๋ณ„ ๋งž๋Š” ๊ฐ’์„ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ/์šด์˜ ํ™˜๊ฒฝ์˜ ๊ตฌ๋ถ„์„ ํ•˜๊ธฐ๋กœ ํ•œ๋‹ค.

 

1. docker-compose.yml - base file

# docker-compose (base)
# base file
# ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹คํ–‰๋  ์ฝ”๋“œ๋“ค์„ ์ •์˜ํ•œ๋‹ค.
# docker-compose -f docker-compose.yml -f docker-compose.{env}.yml up ์œผ๋กœ 
# ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•  ํŒŒ์ผ์„ ์„ ํƒํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค.

version: "3.7"

services:
  app:
    # Dockerfile - FROM
    image: adoptopenjdk/openjdk8
    # Dockerfile - EXPOSE
    ports:
      - 8080:8080
    # network ์ถ”๊ฐ€
    networks:
#      - default
      - boot-network
    # image build dir
    build:
      context: .
      # Dockerfile - ARG
    #  args:
    #    WAR-FILE: ${DEV_WAR_FILE}
    # Dockerfile - ENTRYPOINT
    entrypoint: 
      - java
      - '-jar'
      - /app.war
    # Dockerfile - COPY command
#    command: "COPY ${WAR_FILE} app.war"
#    # link : ์ฐธ์กฐํ•  ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ ์—ฐ๊ฒฐ - application.yml ๋‚ด DB ์—ฐ๊ฒฐ ๋„ค์ด๋ฐ ์ฐธ๊ณ .
#    links:
#      - db:Postgresql
#    # ์ข…์†์„ฑ ์ •์˜. ์—ฌ๊ธฐ์—์„  db ์‹คํ–‰ ํ›„์— app ์‹คํ–‰ํ•จ์„ ์˜๋ฏธ.
#    depends_on:
#      - db
#  db:
#    # DB ์ด๋ฏธ์ง€
#    image: postgres:12.9-alpine
#    # ํฌํŠธ ์ง€์ •
#    ports:
#      - 5432:5432
#    # -e ํ™˜๊ฒฝ ๋ณ€์ˆ˜ : docker run ๋ช…๋ น ์ฐธ๊ณ 
#    environment:
#      - POSTGRES_PASSWORD=1tkdlqjvpn!
#    # ๋ณผ๋ฅจ ์ง€์ • : ๋””๋ ‰ํ† ๋ฆฌ ๋งˆ์šดํŒ…
#    volumes:
#      - ${DEV_VOLUME_DIR}:/var/lib/postgresql/data

# Docker Network : boot-network ๋ž€ ์ด๋ฆ„์˜ bridge ๋„คํŠธ์›Œํฌ ์ถ”๊ฐ€
# {projectName}_{networkName} ์œผ๋กœ ์ƒ์„ฑ๋จ.
# ์—†์œผ๋ฉด, default ๋„คํŠธ์›Œํฌ๋กœ ์—ฐ๊ฒฐ
networks:
  boot-network:
    driver: bridge
  #default:
  #  external:
  #    name: boot-sample-network

 

2. docker-compose.dev.yml - ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์ •์˜ ์‹œ ์‚ฌ์šฉ

# docker-compose.dev
# ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์ •์˜
# ๊ฐœ๋ฐœ์ธ ๊ฒฝ์šฐ, postgresql docker ์ด๋ฏธ์ง€๋ฅผ ๋„์›Œ ์‚ฌ์šฉํ•œ๋‹ค.

version: "3.7"

services:
  app:
    # Dockerfile - COPY command
    command: "COPY ${DEV_WAR_FILE} app.war"
    # link : ์ฐธ์กฐํ•  ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ ์—ฐ๊ฒฐ - application.yml ๋‚ด DB ์—ฐ๊ฒฐ ๋„ค์ด๋ฐ ์ฐธ๊ณ .
    links:
      - db:Postgresql
    # ์ข…์†์„ฑ ์ •์˜. ์—ฌ๊ธฐ์—์„  db ์‹คํ–‰ ํ›„์— app ์‹คํ–‰ํ•จ์„ ์˜๋ฏธ.
    depends_on:
      - db
  db:
    # DB ์ด๋ฏธ์ง€
    image: postgres:12.9-alpine
    # network ์ถ”๊ฐ€
    networks:
#      - default
      - boot-network
    # ํฌํŠธ ์ง€์ •
    ports:
      - 5432:5432
    # -e ํ™˜๊ฒฝ ๋ณ€์ˆ˜ : docker run ๋ช…๋ น ์ฐธ๊ณ 
    environment:
      - POSTGRES_PASSWORD=${DEV_POSTGRES_PASSWORD}
    # ๋ณผ๋ฅจ ์ง€์ • : ๋””๋ ‰ํ† ๋ฆฌ ๋งˆ์šดํŒ…
    volumes:
      - ${DEV_VOLUME_DIR}:/var/lib/postgresql/data

 

3. .env ํŒŒ์ผ - ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์ •์˜๋˜์–ด์žˆ๋‹ค.

# docker-compose ํŒŒ์ผ์— ๋ณ€์ˆ˜ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ • ํŒŒ์ผ
# ๊ฐ ํ™˜๊ฒฝ ๋ณ„๋กœ ์‚ฌ์šฉํ•  ๋ณ€์ˆ˜ ๋ฐ ๋‚ด์šฉ์„ ์ •์˜


# dev

DEV_WAR_FILE=build/libs/boot-sample-0.0.1-SNAPSHOT.war
DEV_VOLUME_DIR=/boot-sample-db
DEV_POSTGRES_PASSWORD={password}

# demo

DEMO_WAR_FILE=build/libs/boot-sample-0.0.1-SNAPSHOT.war
DEMO_VOLUME_DIR=/boot-sample-db
DEMO_POSTGRES_PASSWORD=

# prod

PROD_WAR_FILE=build/libs/boot-sample-0.0.1-SNAPSHOT.war
PROD_VOLUME_DIR=/boot-sample-db
PROD_POSTGRES_PASSWORD=

 

์œ„์™€ ๊ฐ™์ด ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ๊ฐ ํ™˜๊ฒฝ(๊ฐœ๋ฐœ/๋ฐ๋ชจ/์šด์˜ ๋“ฑ)๋ณ„๋กœ compose ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ docker-compose ๊ตฌ๋™ ์‹œ, ์žฌ์ •์˜ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌ๋™ํ•˜๋ฉด ๋œ๋‹ค.

.env์— ์ง€์ •๋œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋“ค๋กœ ๊ฐ ์˜ต์…˜์— ๋งž๊ฒŒ ๋„ฃ์–ด์ฃผ๊ฒŒ ๋˜๋ฉด ๋”ฐ๋กœ ๊ตฌ๋™ ์‹œ์— ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์žฌ์ง€์ •ํ•˜๊ฑฐ๋‚˜ ๋„ฃ์–ด์ค„ ํ•„์š”๊ฐ€ ์—†๋‹ค.


Docker Network in Docker-compose

docker network ์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ž˜์˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ .

 

- docker networking ๊ฐœ์š”

https://docs.docker.com/network/

 

Networking overview

 

docs.docker.com

 

- docker network plugin

https://ziwon.github.io/post/designing-scalable-portable-docker-container-networks/

 

[๋ฒˆ์—ญ] ํ™•์žฅ์„ฑ ์žˆ๊ณ , ์ด์‹์„ฑ ์žˆ๋Š” ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ๋„คํŠธ์›Œํฌ ์„ค๊ณ„ | ziwon.github.io

์›๋ฌธ: Docker Reference Architecture: Designing Scalable, Portable Docker Container Networks (์˜ค์—ญ ๋ฐ ์˜คํƒ€๋Š” ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š”) โ€ป ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•„๋‹Œ Pod๊ฐ„์˜ Kubernetes ๋„คํŠธ์›Œํ‚น ๋ชจ๋ธ์€ ๋„์ปค ๋„คํŠธ์›Œํ‚น ๋ชจ๋ธ๊ณผ ์ข€ ๋‹ค๋ฆ…

ziwon.github.io

 

์šฐ์„  ์ƒ˜ํ”Œ ์ƒ์—์„œ ์‹œ๋„ ํ–ˆ๋˜ 

"๋„์ปค ๋„คํŠธ์›Œํฌ" ๋ฅผ cli ํ™˜๊ฒฝ์—์„œ ์šฐ์„  ์ƒ์„ฑ --> compose ์—์„œ external ๋กœ ์‚ฌ์šฉ์€ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

๋„คํŠธ์›Œํฌ๋ฅผ compose ์— ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์ฐพ๊ฑฐ๋‚˜, default netwrok ์— ์—ฐ๊ฒฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋‹ค๋งŒ, ์ƒ์„ฑ์„ ํ•˜๋“  ์•ˆํ•˜๋“  ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ผ๋ฉด, ๊ฐ ์„œ๋น„์Šค๋งˆ๋‹ค ์˜ต์…˜์œผ๋กœ network ์— ์—ฐ๊ฒฐํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

1. db ์„œ๋น„์Šค ๋„คํŠธ์›Œํฌ ์ง€์ •

 

2. app ์„œ๋น„์Šค ๋„คํŠธ์›Œํฌ ์ง€์ •

 

๋„คํŠธ์›Œํฌ ์ƒ์„ฑ์€ ์•„๋ž˜ ๋ผ์ธ์„ ์ฐธ๊ณ ํ•œ๋‹ค.

# Docker Network : boot-network ๋ž€ ์ด๋ฆ„์˜ bridge ๋„คํŠธ์›Œํฌ ์ถ”๊ฐ€
# {projectName}_{networkName} ์œผ๋กœ ์ƒ์„ฑ๋จ.
# ์—†์œผ๋ฉด, default ๋„คํŠธ์›Œํฌ๋กœ ์—ฐ๊ฒฐ
networks:
  boot-network:
    driver: bridge
  #default:
  #  external:
  #    name: boot-sample-network

 


 

 

728x90
๋ฐ˜์‘ํ˜•