Docker ์ฌ๋ฌ ์ปจํ ์ด๋์ ๋ณผ๋ฅจ, ๋คํธ์ํฌ๋ฅผ ๊ฐํธํ๊ฒ ๊ด๋ฆฌํ๊ณ ์คํํ๋ ๋ฐฉ๋ฒ (with Docker Compose)
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 ๋ช ๋ น๊ณผ ๊ฑฐ์ ์ ์ฌํจ