Dockerfile
- 도커 이미지를 빌드하기 위한 설정 파일
- 이미지 생성 과정에서 필요한 명령어를 순차적으로 기술
Spring Boot 애플리케이션을 Docker를 이용해 배포 과정 실습
방식
- Gradle을 사용하여 Spring Boot 애플리케이션을 빌드하고 Docker 컨테이너에서 포트 8687을 사용하여 실행
- 불필요한 실행파일인 plain.jar 생성 방지를 위해 build.gradle에 설정
1. Dockerfile 작성
FROM openjdk:17 // Dockerfile에서 jdk 17버전 설치했으니 피시방같은 곳 가서 실행해도 jdk, 인텔리제이 이런거 안깔아도돼! -> 자바 설치한거
ARG JAR_FILE=build/libs/*.jar // jar 파일 위치, JAR_FILE은 변수명
COPY ${JAR_FILE} app.jar // JAR_FILE 이름 app.jar로 변경
ENTRYPOINT ["java","-jar","/app.jar"] // 실행
2. 도커 이미지 빌드
3. 도커 컨테이너 실행
docker run -p 8687:8687 <이미지명>
도커 컴포즈 (Docker Compose)
- 여러 컨테이너로 구성된 애플리케이션을 정의하고 실행하기 위한 도구
- 웹 서버, 데이터베이스, 캐시 서버 등을 각각 컨테이너로 관리할 수 있습니다. Docker Compose는 이들을 하나의 설정 파일로 관리할 수 있게 도와줌
- 설정도 한꺼번에 가능하게됨
- YAML 파일(docker-compose.yml)을 통해 서비스, 네트워크, 볼륨 등을 구성하고 관리할 수 있어 복잡한 애플리케이션을 쉽게 배포
- docker-compose.yml
services:
app:
image: spring-image:latest
ports:
- "9000:9000"
environment:
SPRING_PROFILES_ACTIVE: 'test'
docker compose up -d
하면 test로 실행
SPRING_PROFILES_ACTIVE: 'test'
에서 test를 default로 바꾸고
- docker compose down,
docker compose up -d
하면 default로 실행
도커 컴포즈로 컨테이너 관리하기
docker에 여러가지 서버 포트 설정해놓고 하나씩 사용하는 법
- 하나는 로컬서버, 하나는 aws를 연결해놓고 사용가능
- application.properties에는 local 서버 포토를, application-test.properties에는 aws 서버 포트를 연결
- docker-compose.yml에 environment(환경설정)
- SPRING_PROFILES_ACTIVE을 기본이면
default
, test면 test
로 해놓고
- cmd에서 docker compose up -d 실행
- 실행하게되면 아래 이미지와 같이 실행되는 것 확인 가능
- 다른 서버포트로 바꾸고 싶다?
- docker compose down 하고 yml에서 SPRING_PROFILES_ACTIVE 이름 바꾸고 docker compose up -d 실행
도커 컴포즈로 여러 컨테이너 관리하기
docker-compose.yml 파일에 MariaDB 서비스를 정의하고, 스프링 부트 애플리케이션과 연동 설정하여 함께 실행
- docker-compose.yml 생성
services:
app:
build: .
ports:
- "80:80"
environment:
SPRING_PROFILES_ACTIVE: 'docker'
- application-docker.yml 생성
- docker 컨테이너에 있는 DB를 연결하기 위해 환경변수로 설정
- docker-compose.yml 수정
- Spring Boot 애플리케이션과 DB를 함께 실행하는 구성
- app (Spring Boot 애플리케이션)과 db (MariaDB 데이터베이스)
build: .
:현재 디렉토리(.)에 있는 Dockerfile을 사용하여 이미지 빌드
SPRING_PROFILES_ACTIVE
: applcation-docker.yml을 사용했다는 뜻
SPRING_DATASOURCE_URL
: MariaDB의 URL을 설정
- db-data: /var/lib/mysql
: db-data라는 이름의 Docker 볼륨을 사용하여 컨테이너의 /var/lib/mysql 경로(데이터베이스 파일이 저장되는 위치)를 호스트에 영구적으로 저장. 이를 통해 컨테이너를 삭제하더라도 데이터가 보존
services:
app:
build: .
ports:
- "80:80"
depends_on:
- db
environment:
SPRING_PROFILES_ACTIVE: 'docker'
SPRING_DATASOURCE_URL: jdbc:mariadb://db:3306/spring7
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: abc1234
db:
image: mariadb:10
environment:
MYSQL_ROOT_PASSWORD: abc1234
MYSQL_DATABASE: spring7
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:
- Dockerfile 수정 (Dockerfile: 도커 이미지를 빌드하기 위한 설정 파일)
FROM amazoncorretto:11
COPY build/libs
- 애플리케이션 설정
- application-dev.yml 파일에서 MariaDB 연결 설정을 확인하고 필요한 경우 수정
- 실행
docker compose up -d
명령어를 사용하여 도커 컨테이너를 구동
- docker에 mariadb 생성
- 이미지 빌드
- 도커 컴포즈를 통해 컨테이너에 스프링 부트 애플리케이션과 DB가 연결 된 것 확인 가능