๐Ÿ‘จ‍๐Ÿ‘ฉ‍๐Ÿ‘ง‍๐Ÿ‘ฆ Project/๐Ÿ“บ KIOSEK

Docker ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ณผ๋ฅจ, ๋„คํŠธ์›Œํฌ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ• (with Docker Compose)

DevPoong 2023. 5. 10. 21:26

1. ๋ฌธ์ œ ์ƒํ™ฉ


์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ์ž ๋„์šฐ๊ณ  ๋„คํŠธ์›Œํฌ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๊ณ  ๋ณผ๋ฅจ์„ ์—ฐ๊ฒฐํ•ด์ฃผ๊ณ ๋ฅผ ๋ฐ˜๋ณตํ•˜๋‹ค๋ณด๋‹ˆ ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒ๊ฐ์„ ํ•˜์˜€๋‹ค.

MariaDB, Redis, Spring Boot Jar, Prometheus, Grafana ๋“ฑ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•œ๋ฒˆ์— ๋„์šฐ๊ณ  ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ?
๊ทธ๋ฆฌ๊ณ  ๊ฐ ์ปจํ…Œ์ด๋„ˆ์˜ docker network๋ฅผ ์†์‰ฝ๊ฒŒ ์—ฐ๊ฒฐํ•˜๊ณ  ๋ณผ๋ฅจ, ์˜์กด๊ด€๊ณ„, ๊ธฐํƒ€ ํ™˜๊ฒฝ์„ค์ • ๋“ฑ์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ์—์„œ ํŽธ๋ฆฌํ•˜๊ฒŒ ์„ค์ •ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ?

 

2. ๋ฌธ์ œ ํ•ด๊ฒฐ


โœ๏ธ Docker Compose๋ฅผ ์‚ฌ์šฉํ•˜์ž!

  • Docker Compose๋ž€ ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ Tool์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

 

โœ๏ธ Docker Compose ์ฃผ์š” ํŠน์ง•

     1๏ธโƒฃ ๋‹จ์ผ ํ˜ธ์ŠคํŠธ์˜ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ

          Compose๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋กœ ํ™˜๊ฒฝ์„ ๊ฒฉ๋ฆฌ์‹œํ‚จ๋‹ค. 
          kiosek๋ผ๋Š” ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ ค๊ณ  ํ•  ๋•Œ, kiosek1, kiosek2์™€ ๊ฐ™์ด ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์„œ๋กœ ๊ฒฉ๋ฆฌํ•˜์—ฌ ์„œ๋น„์Šค ํ•  ์ˆ˜ ์žˆ๋‹ค.  

     2๏ธโƒฃ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋ณผ๋ฅจ ๋ฐ์ดํ„ฐ ๋ณด์กด

          ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•ด๋„ ๋ณผ๋ฅจ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ•˜์—ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.
          DB์™€ ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ• ๋•Œ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ๊ฒฝ๋กœ์™€ ๋กœ์ปฌ ๊ฒฝ๋กœ์˜ ๋ณผ๋ฅจ์„ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š์œผ๋ฉด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜              ์‚ญ์ œ๋ ์‹œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜๋ฒ„๋ฆฌ๋ฏ€๋กœ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด๋‹ค.  

     3๏ธโƒฃ ๋ณ€๊ฒฝ๋œ ์ปจํ…Œ์ด๋„ˆ๋งŒ ์žฌ์ƒ์„ฑ

          ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ ๊ตฌ์„ฑ์„ ์บ์‹ฑํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๊ณ  ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„์€ ์œ ์ง€ํ•œ๋‹ค.

     4๏ธโƒฃ ๋ณ€์ˆ˜ ๋ฐ ํ™˜๊ฒฝ ๊ฐ„ ๊ตฌ์„ฑ ์ด๋™

          Compose ํŒŒ์ผ์˜ ๋ณ€์ˆ˜๋ฅผ ์ง€์›ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์ด๋‚˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋งž๊ฒŒ ์ปค์Šคํ…€ ํ•  ์ˆ˜ ์žˆ๋‹ค.
          ์ด ๋ถ€๋ถ„์€ ์‚ฌ์šฉํ•  ์ผ์ด ์—†์–ด ํ•ด๋ณด์ง€๋Š” ์•Š์•˜์œผ๋‚˜ ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์ธ ๊ฒƒ ๊ฐ™๋‹ค.

โœ๏ธ ์‹ค์ œ ์ ์šฉํ•œ docker-compose.yml

version: "3.8"
services:
    kiosek-nginx:
        container_name: kiosek-nginx
        image: nginx
        restart: always
        ports:
         - 80:80
         - 443:443
        volumes: 
         - /home/se/kiosek/nginx/nginx.conf:/etc/nginx/nginx.conf
         - /home/se/kiosek/nginx/access.log:/var/log/nginx/access.log
         - /home/se/kiosek/nginx/error.log:/var/log/nginx/error.log
         - /home/se/kiosek/html:/usr/share/nginx/html
         - /home/se/kiosek/certbot-etc:/etc/letsencrypt
        depends_on:
         - kiosek-backend
        environment:
            TZ: "Asia/Seoul"


    kiosek-db:
        container_name: kiosek-db
        image: mariadb
        restart: always
        volumes:
         - /home/se/kiosek/mariadb/data:/var/lib/mysql
         - /home/se/kiosek/mariadb/log:/var/log/maria
        environment:
         - MYSQL_DATABASE=test
         - MYSQL_ROOT_PASSWORD=test
         - MYSQL_USER=root
         - TZ="Asia/Seoul"
        ports:
         - 3306:3306

    kiosek-redis:
        container_name: kiosek-redis
        restart: always
        image: redis
        volumes:
         - /home/se/kiosek/redis/data:/data
        ports:
         - 6379:6379
        environment:
            TZ: "Asia/Seoul"

    kiosek-backend:
        container_name: kiosek-backend
        restart: always
        image: zabcd121/kiosek:latest
        ports:
         - 8050:8050
         - 8060:8060
        volumes:
         - /home/se/kiosek/key.txt:/home/se/kiosek/key.txt
         - /home/se/kiosek/iv.txt:/home/se/kiosek/iv.txt
         - /home/se/kiosek/image:/home/se/kiosek/image
        depends_on:
         - kiosek-db
         - kiosek-redis
        environment:
            TZ: "Asia/Seoul"

    kiosek-prometheus:
        image: prom/prometheus:latest
        container_name: kiosek-prometheus
        user: root
        volumes:
         - /home/se/kiosek/monitor/prometheus:/etc/prometheus
         - /home/se/kiosek/monitor/prometheus/data:/prometheus
        ports:
         - 9090:9090
        restart: always
        environment:
            TZ: "Asia/Seoul"
    kiosek-grafana:
        image: grafana/grafana:latest
        container_name: kiosek-grafana
        environment:
         - GF_SECURITY_ADMIN_USER=admin
         - GF_SECURITY_ADMIN_PASSWORD=test
         - GF_USERS_ALLOW_SIGN_UP=false
         - TZ="Asia/Seoul"
        volumes:
         - /home/se/kiosek/monitor/grafana:/var/lib/grafana
         - /home/se/kiosek/monitor/grafana/provisioning:/etc/grafana/provisioning
        ports:
         - 3000:3000
        user: root
        depends_on:
         - kiosek-prometheus
        restart: always

    certbot:
       depends_on:
        - kiosek-backend
       image: certbot/certbot
       container_name: certbot
       volumes:
        - /home/se/kiosek/certbot-etc:/etc/letsencrypt
        - /home/se/kiosek/html:/usr/share/nginx/html
       command: certonly --webroot --webroot-path=/usr/share/nginx/html --email kiosek@naver.com --agree-tos --no-eff-email -d kiosek.kr -d www.kiosek.kr --force-renewal

 

โœ๏ธ Compose Network

    Docker Compose๋ฅผ ์ด์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ์‹คํ–‰ํ•˜์˜€์„ ๋•Œ๋Š” ์ž๋™์œผ๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๋“ค๋ผ๋ฆฌ ์—ฐ๊ฒฐํ•ด์ค€๋‹ค.
    1. projectName_default ๋„คํŠธ์›Œํฌ ์ƒ์„ฑ
    2. ๊ฐ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฆ„์œผ๋กœ projectName_default ๋„คํŠธ์›Œํฌ์— ์ ‘์†

    ๋„คํŠธ์›Œํฌ๊ฐ€ ๊ตฌ์„ฑ๋œ ์ดํ›„์—๋Š” ๋‚ด๋ถ€ ์„œ๋กœ ์—ฐ๊ฒฐ๋œ ์ปจํ…Œ์ด๋„ˆ๋“ค์€ mariadb://kiosek-db:3306 ์ฃผ์†Œ๋กœ ์ ‘์† ๊ฐ€๋Šฅํ•˜๊ณ 
    ์™ธ๋ถ€ ์ปจํ…Œ์ด๋„ˆ์—์„œ๋Š” mariadb://{์ปจํ…Œ์ด๋„ˆ์—_๋ถ€์—ฌ๋œ_IP}:3306 ์ฃผ์†Œ๋กœ ์ ‘์†ํ•œ๋‹ค.
   

โœ๏ธ Compose Version

    docker-compose.yml ํŒŒ์ผ ์ƒ๋‹จ์— ๋ณด๋ฉด version์ด ๋ช…์‹œ๋˜์–ด ์žˆ๋‹ค.
     ์ฒ˜์Œ์—๋Š” ๋‚ด๊ฐ€ ๋งˆ์Œ๋Œ€๋กœ ์ ๋Š” ๋ฌธ์„œ ๋ฒ„์ „์„ ๋œปํ•˜๋Š”๊ฒƒ์ธ์ค„ ์•Œ์•„์„œ ์—๋Ÿฌ๋ฅผ ๋ณด๊ณ  ๋ง์•˜๋Š”๋ฐ ์‚ฌ์‹ค ๋ฒ„์ „ ๋ณ„๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋„์ปค ์—”์ง„์ด ๋‹ค๋ฅด๊ณ  Compose Version๋„ ๋‹ค๋ฅด๋‹ค๊ณ  ํ•œ๋‹ค.

  • Version 1์€ ๋ฒ„์ „ ์ƒ๋žต ๊ฐ€๋Šฅ
  • Version 2๋ถ€ํ„ฐ๋Š” ๋งˆ์ด๋„ˆ ๋ฒ„์ „(2.x)๊นŒ์ง€ ์„ค์ •ํ•ด์•ผ ํ•จ
  • Version 3์€ ๋„์ปค ์Šค์›œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ๋˜๋„๋ก ๋””์ž์ธ๋จ

 

โœ๏ธ Compose ์ฃผ์š” ๋ช…๋ น

1. up

docker-compose.yml์„ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•œ๋‹ค.

$ docker-compose -p kiosek up -d
  1. ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•  ๋„คํŠธ์›Œํฌ๋ฅผ ์„ค์ •
  2. ๋ณผ๋ฅจ ์ƒ์„ฑ
  3. Docker Image Pull
  4. Docker Image Build
  5. Depend on ์„ค์ •์— ๋”ฐ๋ผ ์„œ๋น„์Šค ์ˆœ์ฐจ ์‹คํ–‰

options

  • -d : ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ 
  • --force-recreate : ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์ƒˆ๋กœ ์ƒ์„ฑ
  • -f : ๊ธฐ๋ณธ docker-compose.yml ํŒŒ์ผ๋ช…์ด ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ํŒŒ์ผ๋ช…์„ ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉ
  • --build: ์„œ๋น„์Šค ์‹œ์ž‘ ์ „ ์ด๋ฏธ์ง€๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑ

etc) stop, start, ps, exec, run, logs, config

docker ๋ช…๋ น๊ณผ ๊ฑฐ์˜ ์œ ์‚ฌํ•จ