1. MySQL(Dockerfile)
FROM mysql:8.0
COPY init.sql /docker-entrypoint-initdb.d
ENV MYSQL_ROOT_PASSWORD=1111
ENV MYSQL_DATABASE=kitaedb
ENV MYSQL_HOST=%
CMD ["--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]
2. init.sql
CREATE TABLE user_tb (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO user_tb (name) VALUES ('John');
INSERT INTO user_tb (name) VALUES ('Jane');
3. Spring(Dockerfile)
FROM openjdk:11-jdk-slim
WORKDIR /app
# COPY만 docker-compose 파일의 위치를 기반으로 작동함
COPY . .
# 개행문자 오류 해결 [unix와 window 시스템 차이]
RUN sed -i 's/\r$//' gradlew
# RUN은 현재 파일을 위치를 기반으로 작동함
RUN chmod +x ./gradlew
RUN ./gradlew clean build
ENV JAR_PATH=/app/build/libs
RUN mv ${JAR_PATH}/*.jar /app/app.jar
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=prod", "app.jar"]
4. docker-compose.yml
version: '3'
services:
db:
build:
context: ./docker-test-db
dockerfile: Dockerfile
ports:
- 3307:3306
volumes:
- ./docker-test-db/store:/var/lib/mysql
networks:
- network
server:
build:
context: ./docker-test-server
dockerfile: Dockerfile
restart: always
ports:
- 8080:8080
depends_on:
- db
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/kitaedb?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false&allowPublicKeyRetrieval=true
SPRING_DATASOURCE_DRIVER: com.mysql.cj.jdbc.Driver
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: 1111
networks:
- network
networks:
network:
5. 이미지 빌드
✅ docker-compose up -d
- docker-compose.yml에 정의된 서비스들을 백그라운드에서 실행.
- 웹 서버 + DB 서버를 한 번에 실행