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

    ๋ฐ˜์‘ํ˜•

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

    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
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€