1. 도커 네트워크 설정
컨테이너끼리 통신을 원활히 하려면 네트워크를 생성해야 한다.
docker network create <네트워크 이름>
2. MySQL 설정
Dockerfile
# MySQL 8.0 버전을 베이스 이미지로 사용
FROM mysql:8.0.32
# MySQL 설정 파일을 복사
COPY ./my.cnf /etc/mysql/conf.d/my.cnf
# init.sql 파일을 /docker-entrypoint-initdb.d/로 복사
COPY ./init.sql /docker-entrypoint-initdb.d/
# 계정 정보 설정
ENV MYSQL_ROOT_PASSWORD=<루트 비밀번호 계정>
ENV MYSQL_DATABASE=<데이터베이스 이름>
ENV MYSQL_USER=<데이터베이스 유저>
ENV MYSQL_PASSWORD=<패스워드>
# MySQL 기본 포트 3306 노출
EXPOSE 3306
init.sql은 서비스가 실행되기 위한 SQL 파일을 의미한다.
이 파일을 /docker-entrypoint-initdb.d/ 로 복사하면 MySQL 컨테이너가 실행될 때 init.sql 파일이 자동으로 실행된다.
즉, 서비스가 실행되기 위한 테이블 정의나 데이터 삽입 등을 init.sql 파일에 적어놓고 컨테이너가 실행될 때 자동으로 되게 하는 것이다.
my.cnf
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
[client]
default-character-set=utf8mb4
DB 컨테이너에서 한글이 깨지는 것을 방지하기 위한 설정파일이다.
이제 도커 이미지를 빌드하면 된다.
도커파일이 있는 경로로 이동 후에 아래의 명령어로 이미지를 빌드한다.
docker build -t <MySQL 이미지 이름> .
여기서 지정한 컨테이너 이름은 아무렇게나 지어도 상관 없다.
이후 이미지에 태그를 붙히고 자신의 이미지 레지스트리에 푸시한다.
docker tag <MySQL 이미지 이름> <도커 레지스트리 계정명>/myapp-db
docker push <도커 레지스트리 계정명>/myapp-db
이후 실행할 때는 아래의 명령어를 입력한다.
docker run -d -p 3306:3306 --name <MySQL 이미지 이름> --network <네트워크 이름> <MySQL 이미지 이름>
3. 스프링부트 설정
Dockerfile
# 베이스 이미지로 OpenJDK 17 사용
FROM openjdk:17-jdk
# 애플리케이션을 위한 작업 디렉토리 설정
WORKDIR /spring-boot
# 빌드된 JAR 파일을 컨테이너로 복사
COPY build/libs/*SNAPSHOT.jar app.jar
# 애플리케이션 실행
ENTRYPOINT ["java", "-jar", "/spring-boot/app.jar"]
application.properties
spring.datasource.url=jdbc:mysql://<MySQL 이미지 이름>:3306/<데이터베이스 이름>
spring.datasource.username=<데이터베이스 유저>
spring.datasource.password=<패스워드>
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
<MySQL 이미지 이름> 은 이전에 MySQL을 컨테이너로 만들었을 때의 이름을 넣어주면 된다.
이제 도커 이미지를 빌드하면 된다.
스프링 부트 프로젝트를 빌드한다.
./gradlew clean build
스프링 부트의 도커 파일로 이동하고, 도커 이미지를 빌드한다.
docker build --platform linux/amd64 -t <스프링부트 이미지 이름> .
태그를 지정하고 이미지 레지스트리에 푸시한다.
docker tag <스프링부트 이미지 이름> leesw0924/<스프링부트 이미지 이름>
docker push <도커 레지스트리 계정명>/<스프링부트 이미지 이름>
이후 아래의 명령으로 실행하면 된다.
단, MySQL 이미지가 실행되어 있어야 한다.
docker run -d -p 80:8080 --name <스프링부트 이미지 이름> --network <네트워크 이름> <스프링부트 이미지 이름>
'Cloud > Docker' 카테고리의 다른 글
[Docker] 도커 네트워크 (0) | 2024.09.11 |
---|---|
[Docker] 이미지와 컨테이너 레이어 (0) | 2024.09.09 |
[Docker] 이미지 레지스트리 (3) | 2024.09.07 |
[Docker] 이미지와 컨테이너 (0) | 2024.09.06 |
[Docker] 하이퍼바이저 및 컨테이너 가상화와 도커 아키텍쳐 (0) | 2024.09.05 |