์ Docker
๋ฅผ ๋์
ํ๋๊ฐ?
๊ฐ๋ น ๋ฐฑ์๋, ํ๋ก ํธ ๊ฐ๋ฐ์๊ฐ ํ์
์ ํ๊ณ ์๋ค๊ณ ํ์. ๊ฐ๋ฐ์ ์
์ฅ์์ ํ์
์ ์ํด ๋๋ฃ ๊ฐ๋ฐ์์ PC
์ JDK
, IDE
, DB
๋ฑ์ ์ง์ ์ค์นํด์ผ ํ๋ค๋ฉด ์ผ๋ง๋ ๋ฒ๊ฑฐ๋ก์ด๊ฐ. ๋จ์ํ ๋ฒ์ ์ ๋ง์ถ๋ ๊ฒ๋ง ํด๋ ๋ฒ๊ฑฐ๋กญ๊ณ ๊ท์ฐฎ์ ์
๋ฌด๊ฐ ๋์ด ๋ฒ๋ฆฐ๋ค. ๊ทธ๋ฅ ๊ฐ๋ฐ ํ๊ฒฝ ์์ฒด๋ฅผ ์ ๋ฌํ ์๋ง ์๋ค๋ฉด ์ ๋ง ํธํ์ง ์์๊น? ์ด๋ ํ์ํ ๊ฒ์ด ๋์ปค ์ปจํ
์ด๋ ๊ธฐ์ ์ด๋ค.
ํ์๋ ๋ก์ปฌ ํ๊ฒฝ์์ ํ๋ก์ ํธ ์คํ ํ React
๋ฅผ ํตํด ํ๋ก ํธ์๋๋ฅผ ๊ฐ๋ฐํ๋ฉด์, ๋ฐฑ์๋์ ์์ค ์ฝ๋๋ DB
๋ฑ์ ๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ ๋ถํธํจ์ ๊ฒช์๋ค. ์ด ๋ถํธํจ์ ํด์ํ๊ธฐ ์ํด Docker
๋ฅผ ๋์
ํ์ฌ ๋ฐฑ์๋ ํ๋ก์ ํธ๋ฅผ ์ปจํ
์ด๋ ํ๊ฒฝ์์ ๋น๋ ํด๋ณด์๋ค.
์ ์ฐจ
Spring Boot
ํ๋ก์ ํธ Jar
ํ์ผ๋ก ๋น๋dockerfile
์์ฑdocker-compose.yml
์์ฑ ๋ฐ ์คํ
โ
application.yml
์์ฑ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| spring:
ย ย datasource:
ย ย ย ย url: ${ENV_DB:jdbc:oracle:thin:@localhost:xe}?oracle.jdbc.timezoneAsRegion=false
ย ย ย ย username: ${ENV_USERNAME:DB_์์ด๋}
ย ย ย ย password: DB_ํจ์ค์๋
ย ย jpa:
ย ย ย ย hibernate:
ย ย ย ย ย ย ddl-auto: update
ย ย ย ย properties:
ย ย ย ย ย ย hibernate:
ย ย ย ย ย ย ย ย format_sql: true
logging:
ย ย level:
ย ย ย ย org.hibernate.SQL: debug
ย ย ย ย org.hibernate.orm.jdbc.bind: trace
ย ย ย ย ํ๋ก์ ํธ_๋๋ฉ์ธ: debug
|
- ๋์ปค ์ปจํ
์ด๋ ๋ด
DB
๋ฅผ ์ฌ์ฉํ ์์ ์ด๋ฏ๋ก ${ํ๊ฒฝ๋ณ์}
๋ฅผ ํตํด DB URL
๊ฐ์ ์ฃผ์
ํด์ผ ํ๋ค. Jar
ํ์ผ์ ๋น๋ ํ ๋๋ Docker
์ ๊ด๋ จ ์์ด ์ฐ๊ฒฐ๋ DB URL
์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ${ํ๊ฒฝ๋ณ์:๊ธฐ๋ณธ๊ฐ}
ํ์์ผ๋ก ์์ฑํ๋ฉด ๋๋ค.- ํ์๋ ํ์์กด ๊ด๋ จ ์ค๋ฅ๋ก
DB
์ฐ๊ฒฐ์ด ์คํจํด์ ?oracle.jdbc.timezoneAsRegion=false
์ต์
์ DB URL
์ ์ถ๊ฐํ์๋ค. - ์๊ธฐ ํ์ผ์๋
jpa.hibernate.ddl-auto
๊ฐ์ด update
๋ก ์ค์ ๋์ด ์๋๋ฐ, ์ค์ ํ๊ฒฝ์์๋ none
๋๋ validate
๋ก ์ค์ ํ๋ ๊ฒ์ด ์ ์ ํ๋ค๊ณ ํ๋ค.
โ
dockerfile
์์ฑ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| # JDK ์ค์
FROM openjdk:17-jdk-slim
# ๊ธฐ๋ณธ ํฌํธ ์ค์
EXPOSE 8080
# JAR ํ์ผ ๋ณต์ฌ
COPY ./build/libs/ํ๋ก์ ํธ๋ช
-๋ฒ์ -SNAPSHOT.jar /usr/local/app/ํ๋ก์ ํธ๋ช
-๋ฒ์ -SNAPSHOT.jar
# ํ๊ฒฝ ๋ณ์ ์ค์
ENV ENV_DB=jdbc:oracle:thin:@oracle-db:1521:xe
ENV ENV_USERNAME=system
# ์์
๋๋ ํฐ๋ฆฌ ์ค์
WORKDIR /usr/local/app
# ์ ํ๋ฆฌ์ผ์ด์
์คํ
ENTRYPOINT ["sh", "-c", "sleep 60 && java -jar ํ๋ก์ ํธ๋ช
-๋ฒ์ -SNAPSHOT.jar"]
|
Spring Boot
ํ๋ก์ ํธ๊ฐ ์ ์์ ์ผ๋ก ์คํ๋๊ธฐ ์ํด์๋ DB
๊ฐ ์ ์์ ์ผ๋ก ์ด๊ธฐํ๋ ์ํ์ฌ์ผ ํ๋ค.- ๊ทธ๋ฐ๋ฐ
docker-compose.yml
ํ์ผ์์ ์์กด ๊ด๊ณ ์ค์ ์ ํตํด ๋น๋ ์์๋ฅผ ์ ํ ์๋ ์์ง๋ง ์์กดํ๊ณ ์๋ ์๋น์ค๊ฐ ์ค์ ๋ก ์ด๊ธฐํ๋ฅผ ๋ง์ณค๋์ง๋ ์ ์ ์๋ค. - ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด
sh -c sleep 60
๋ช
๋ น์ด๋ฅผ ์ ํ๋ฆฌ์ผ์ด์
์คํ ์์ ์ ์ถ๊ฐํ์๋ค.
โ
docker-compose.yml
์์ฑ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| services:
ย ย oracle-db:
ย ย ย ย image: gvenzl/oracle-xe:11-slim
ย ย ย ย environment:
ย ย ย ย ย ย ORACLE_USER: DB_์ฌ์ฉ์_ID
ย ย ย ย ย ย ORACLE_PASSWORD: DB_๋น๋ฐ๋ฒํธ
ย ย ย ย networks:
ย ย ย ย ย ย - oracle-network
ย ย spring-app:
ย ย ย ย build: .
ย ย ย ย image: spring-app
ย ย ย ย ports:
ย ย ย ย ย ย - "8080:8080"
ย ย ย ย depends_on:
ย ย ย ย ย ย - oracle-db
ย ย ย ย restart: on-failure:3
ย ย ย ย networks:
ย ย ย ย ย ย - oracle-network
networks:
ย ย oracle-network:
ย ย ย ย driver: bridge
|
- ์ปจํ
์ด๋ ๊ฐ ํต์ ํ๊ธฐ ์ํด์๋ ๊ฐ์ ๋คํธ์ํฌ ์์ ์์ด์ผ ํ๋ค.
ํ๊ณ
dockerfile
์ ์์ฑํ ๋ sh -c sleep 60
๋ช
๋ น์ด๋ฅผ ์ ํ๋ฆฌ์ผ์ด์
์คํ ์์ ์ ์ถ๊ฐํ์ฌ ์์กด ๊ด๊ณ์ ์ํ ์ฒดํฌ๋ฅผ ํ์๋ค.- ๊ทธ๋ฐ๋ฐ
docker-compose.yml
ํ์ผ์์ healthcheck
์ค์ ์ ํตํด ์์กด ๊ด๊ณ์ ์ํ๋ฅผ ์ฒดํฌํด์ฃผ๋ ๊ฒ์ด ๋์ฑ ์์ ํ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ํ๋ค. - ํด๋น ์์
์ ํ ๋๋
Dockerfile
๊ณผ docker-compose.yml
ํ์ผ์ ์์ฑํ๋ ๊ฒ์ด ์ด๊ธฐ ๋ชฉ์ ๊ณผ๋ ๋ค๋ฅด๊ฒ ์คํ๋ ค ๋ฌด๊ฒ๊ณ , ๋ฒ๊ฑฐ๋ก์ด ์์
์ผ๋ก๋ง ๋ค๊ฐ์๋๋ฐ, ํ์ผ ์์ฑ์ ์ต์ํด์ง ์์ฆ์๋ ๊ต์ฅํ ํธ๋ฆฌํ ๋๊ตฌ๊ฐ ๋์๋ค.