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
- ์๋น์ค๋ฅผ ์คํํ ๋คํธ์ํฌ๋ฅผ ์ค์
- ๋ณผ๋ฅจ ์์ฑ
- Docker Image Pull
- Docker Image Build
- Depend on ์ค์ ์ ๋ฐ๋ผ ์๋น์ค ์์ฐจ ์คํ
options
- -d : ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์๋น์ค๋ฅผ ์คํ
- --force-recreate : ์ปจํ ์ด๋๋ฅผ ์ญ์ ํ๊ณ ์๋ก ์์ฑ
- -f : ๊ธฐ๋ณธ docker-compose.yml ํ์ผ๋ช ์ด ์๋๋ผ ๋ค๋ฅธ ํ์ผ๋ช ์ ์ฌ์ฉํ ๋ ์ฌ์ฉ
- --build: ์๋น์ค ์์ ์ ์ด๋ฏธ์ง๋ฅผ ์๋ก ์์ฑ
etc) stop, start, ps, exec, run, logs, config
docker ๋ช ๋ น๊ณผ ๊ฑฐ์ ์ ์ฌํจ