[#13] feat: docker compose 활용한 애플리케이션 실행

- nginx, app, db 컨테이너 구성
- dockerize 활용한 컨테이너 실제 실행 순서 보장
This commit is contained in:
beaniejoy
2022-08-23 00:13:01 +09:00
parent 747b5a7f3d
commit c48399b6be
7 changed files with 49 additions and 17 deletions

View File

@@ -20,13 +20,23 @@ RUN ./gradlew bootjar
FROM openjdk:17-alpine
ENV DOCKERIZE_VERSION v0.6.1
ENV WORK_DIR=/usr/app/
WORKDIR $WORK_DIR
COPY --from=BUILD_IMAGE $WORK_DIR/build/libs/*.jar dongne-api.jar
ENTRYPOINT ["java", \
"-jar", \
"-Dspring.profiles.active=${PROFILE_OPTION}", \
"dongne-api.jar"]
# run in order through dockerize utility (alpine version)
# link - https://github.com/jwilder/dockerize
RUN apk add --no-cache openssl bash
RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
&& tar -C /usr/local/bin -xzvf dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
&& rm dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz
COPY ./script/docker-entrypoint.sh docker-entrypoint.sh
RUN chmod +x docker-entrypoint.sh
ENTRYPOINT ["./docker-entrypoint.sh"]

View File

@@ -7,3 +7,18 @@
- kotlin 1.6.21
- Spring Boot 2.7.0
- MySQL
## local 환경
### 로컬 환경 내 로컬 DB 따로 구성
- local에 DB(MySQL)용 docker container run
- application은 IDE에서 실행 (default profile: `local`)
```bash
$ docker run --name beanie-test-db -e MYSQL_ROOT_PASSWORD=beaniejoy -d -p 3306:3306 mysql:5.7.34
```
### docker compose 실행
- docker compose를 이용한 nginx, DB(MySQL), application 한꺼번에 실행하는 경우
```bash
$ docker-compose up --build
```

View File

@@ -17,9 +17,11 @@ services:
- "8080:8080"
env_file:
- env/app.env
# docker 환경에서 local db 활용하기 위한 설정
networks:
default:
external:
name: api-net
depends_on:
- db
db:
image: mysql:5.7.34
ports:
- "3306:3306"
env_file:
- env/db.env

5
env/app.env vendored
View File

@@ -1 +1,4 @@
PROFILE_OPTION=docker
PROFILE_OPTION=docker
SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/dongne?autoreconnect=true&characterEncoding=utf8&serverTimezone=Asia/Seoul
SPRING_DATASOURCE_USERNAME=root
SPRING_DATASOURCE_PASSWORD=beaniejoy

2
env/db.env vendored Normal file
View File

@@ -0,0 +1,2 @@
MYSQL_DATABASE=dongne
MYSQL_ROOT_PASSWORD=beaniejoy

View File

@@ -0,0 +1,6 @@
#!/bin/bash
echo "wait DB container up"
dockerize -wait tcp://db:3306 -timeout 20s
echo "run dongne-api application"
java -jar -Dspring.profiles.active=${PROFILE_OPTION} dongne-api.jar

View File

@@ -1,6 +0,0 @@
# local docker 환경 내 local db 활용
spring:
datasource:
url: jdbc:mysql://beanie-test-db:3306/dongne?autoreconnect=true&characterEncoding=utf8&serverTimezone=Asia/Seoul
username: root
password: beaniejoy # TODO 추후 보안에 대해 생각해보기