๋ชฉ์ฐจ
Spring Boot ํ๋ก์ ํธ Docker์์ ์คํ์ํค๊ธฐ
โ SpringBoot ํ๋ก์ ํธ๋ฅผ ์ค๋นํด์ค๋ค.
โ ํด๋น ํ๋ก์ ํธ๋ฅผ Docker ๋ก ์คํ์ํค๊ธฐ ์ํด์๋ ํ๋ก์ ํธ๋ฅผ ์ด๋ฏธ์ง๋ก ๋ง๋ค์ด์ผํ๋ค.
์ด๋ฏธ์ง๋ฅผ ๋ง๋๋ ๋ฒ > Dockerfile ์์ฑํ๊ธฐ
์์ฑํ๊ธฐ์ ์ ๊ผญ!
`./gradlew clean build ` ๋ช ๋ น์ด๋ก ๋น๋
โ Dockerfile ์์ฑ
`FROM openjdk:17-jdk` ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ ์คํ๋งํ๋ก์ ํธ์ด๋ฏ๋ก jdk ์ผ๋ก ์ธํ
COPY ๋น๋ํ ํ์ผ์ ์ปจํ ์ด๋๋ก ๋ณต์ฌ ํ ์ปจํ ์ด๋์์ jar ์คํ
app.jar ์ ์๋๊ฒฝ๋ก์ธ ์ํ /app.jar ์ ์ ๋๊ฒฝ๋ก
์ํธ๋ฆฌ ํฌ์ธํธ์๋ jar ํ์ผ์ jdk ๋ก ๋๋ฆฌ๊ธฐ ์ํด์ ๋ช ๋ น์ด ์ ๋ ฅ
์ฐ๋ฆฌ๋ ์ฆ, build ํ์ผ์ ์ปจํ ์ด๋ ํ๊ฒฝ์ผ๋ก ๋ณต์ฌํด์ฌ๊ฒ์ด๋ค
์ปจํ ์ด๋ ์์์ jar ์ ์คํํ ๊ฑฐ์
โ ๋น๋ > ์คํ
โ ์ปจํ ์ด๋๋ฅผ ์คํ์์ผ๋ณด์
ํ๋ก์ ํธ ํฌํธ๋ฒํธ(8989)๋ ์ฐ๊ฒฐ์์ผ์ค ๊ฒ์ด๋ค. `docker run -d -p 8989:8989 hello-server`
์ ์คํ๋๊ฑธ ํ์ธํ ์ ์๊ณ , ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด spring-boot ์์ ๋ณด๋ ๋ก๊ทธ์ฐฝ๊ณผ ๋์ผํจ
โ ์ ์ ์ ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
Spring Boot ํ๋ก์ ํธ Docker์์ ์คํ์ํค๊ธฐ (Docker Compose ์ฌ์ฉ)
โ compose.yml ํ์ผ ์์ฑ
์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ์ด๋ฏธ์ง๊ธฐ๋ฐ (๋์ปคํ์ผ ์์น๊ฒฝ๋ก, ์๋๊ฒฝ๋ก) . ์ ๊ฐ์ ์์น์ด๊ธฐ ๋๋ฌธ
โ `--build` ๋ฅผ ๋ถ์ฌ์ค๋ค
build ์ ์๋ ์ด๋ฏธ์ง = jar ํ์ผ ๋ฐ๋ ์ ์๊ธฐ๋๋ฌธ์
์ฆ build ๋ฅผ ๊ณ์ ์๋ก ํด์ค์ผํจ
MySQL ์ปจํ ์ด๋ Compose ๋ก ๋์ฐ๊ธฐ
- mysql_data ํด๋์์ ๊ณต์ <-> /var .. ํด๋์ ๊ณต์
- ์ปดํฌ์ฆ ํ์ผ ๊ธฐ์ค์ผ๋ก ๊ฒฝ๋ก ์ค์ ๊ฐ๋ฅ (ํธ๋ฆฌ)
Spring Boot + MySQL ์ปจํ ์ด๋ Compose ๋ก ๋์์ ๋์ฐ๊ธฐ
โ compose.yml ํ์ผ ์์ฑ
services:
my-server:
build: .
ports:
- 8080:8080
depends_on:
my-db:
condition: service_healthy
my-db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: pwd1234 #์ง์ ํด์ค pwd
MYSQL_DATABASE: mydb # ์ด๊ธฐ ์ด๋ฆ ์ง์ (ํ๊ฒฝ๋ณ์)
volumes:
- ./mysql_data:/var/lib/mysql
ports:
- 3306:3306
healthcheck:
test : ["CMD", "mysqladmin", "ping"] # ์ด ๋ช
๋ น์ด๊ฐ ์๋ํ๋ฉด "mysql ์ ์๋ํ๋์ง ping ๋ณด๋"
interval: 5s # ์ฃผ๊ธฐ๋ฅผ 5์ด๋ง๋ค ์ฒดํฌ
retries: 10 #์ฌ์๋๋ 10๋ฒ๊น์ง ์ฌ์๋ํ๋ค.
โ ์ด๋ !! db ๊ฐ ์คํ๋์ด์ผ ์คํ๋ง๋ถํธ ์ ์์ ์ผ๋ก ์คํ ๋ ์ ์์.
db ๊ฐ ์คํ๋๊ณ ์คํ๋ง ๋ถํธ๊ฐ ์คํ๋๋๋ก! ์ฝ๋๋ฅผ ์ถ๊ฐํด์ค์ผํจ
โ but . ์คํ์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ด ์๋์๋ค๊ณ ์๋ฌ๊ฐ ๋จ๋ ์ด์ ??
- ๊ฐ๊ฐ ์ปจํ ์ด๋ : ๋คํธ์ํฌ๋ง / IP ์ฃผ์๋ฅผ ๊ฐ๊ฐ ๊ฐ์ง
- host ์ ์ฅ : localhost ๋ ๋ณธ์ธ ์ปดํจํฐ๋ฅผ ๊ฐ๋ฆฌํด
- ์คํ๋ง๋ถํธ ์ปจํ ์ด๋ ์ ์ฅ : localhost ๋ ๋ณธ์ธ ์ปดํจํฐ๋ฅผ ๊ฐ๋ฆฌํด (๊ฐ๋ณ ํฌํธ๋ฅผ ์ฌ์ฉํ๊ธฐ๋๋ฌธ์ 3306 ์ธ์ ๋ถ๊ฐ)
mysql db ์ ๋ณด์ localhost:3306 ์ผ๋ก ์์ฑํ๋ ๊ฒฝ์ฐ
ํด๋น ์ปจํ ์ด๋ ํ๊ฒฝ์๋ 3306 ํฌํธ๊ฐ ์๊ธฐ๋๋ฌธ์ ์ ์์ ํ ์ ์์๋ ๊ฒ ์ด๋ค.
์ด๋ป๊ฒ ์ฐ๊ฒฐํด์ผํ ๊น???
โ compose ์ ์ ์ํด๋ ์๋น์ค๋ช ์ ๊ทธ๋๋ก ๊ฐ์ ธ๋ค ์ฐ๋ฉด ๋๋ค. โญ
์คํ๋ง๋ถํธ ์ปจํ ์ด๋ ์์ ์ ํ my-db ๋ฅผ docker ๊ฐ ์ธ์์ ํด์ my-db ํฌํธ๋ฅผ ์ฐพ์๋ค์ด๊ฐ๊ฒ ํด์ค๋ค.
์ฆ , mysql ์ปจํ ์ด๋ ํฌํธ๋ก ์ ๊ทผํ ์ ์๊ฒ ๋จ (ํด๋น ์ปจํ ์ด๋ ์ฃผ์์ IP์ ๊ฐ์ ์ญ ํ๊ฒ๋จ)