이 글은 [2024 NEW] 개발자를 위한 쉬운 도커 강의를 듣고 작성한 글입니다! 모든 강의자료 이미지 출처는 해당 강사님께 있습니다.
빌드 스테이지에서는 gradle을 사용하여 빌드해 jar 파일을 만든다.
실행 스테이지에서는 자바 애플리케이션 실행 기능만 갖고있는 openjdk 이미지를 복사하고, 복사한 jar 파일을 애플리케이션으로 실행할 것이다.
컨테이너를 실행하여 컨테이너 내부에서 직접 환경을 구성해보자.
두 개의 터미널을 사용한다.
(터미널1) gradle 컨테이너를 실행하고 shell에 접속한다.
docker run -it --name gradle gradle:7.6.1-jdk17 bash
(터미널1) app 폴더를 생성하고 해당 폴더로 이동한다. (WORKDIR /app과 같은 효과이다.)
mkdir /app && cd /app
(터미널2) gradle이 제대로 제대로 실행되었는지 확인한다.
docker ps
(터미널2) 소스코드들이 존재하는지 확인한다.
ls
(터미널2) gradle 컨테이너의 /app 경로로 .(현재) 경로를 복사한다.
docker cp . gradle:app
(터미널1) 호스트 머신의 파일들이 복사된 것을 알 수 있다.
ls
(터미널1) gradle 빌드를 실행한다.
gradle clean build --no-daemon
(터미널1) build 디렉토리가 생성된 것을 볼 수 있다.
ls
(터미널1) gradle 빌드를 실행한 결과를 확인할 수 있다. jar 파일이 생성되었다.
ls build/libs
(터미널1) gradle 컨테이너 내부에서 빌드로 만들어진 jar 파일을 실행시킨다. 데이터베이스가 정상적으로 연결되지 않아서 종료되었다.
java -jar /app/build/libs/leafy-0.0.1-SNAPSHOT.jar
(터미널2) gradle 컨테이너를 삭제한다.
docker rm -f gradle
Dockerfile을 사용하여 이미지 빌드하기
leafy의 Dockerfile이 있는 경로에서 진행한다.
Dockerfile은 다음과 같이 작성한다.
# 빌드 이미지로 OpenJDK 17 & Gradle을 지정
FROM gradle:7.6.1-jdk17 AS build
# 소스코드를 복사할 작업 디렉토리를 생성
WORKDIR /app
# 호스트 머신의 소스코드를 작업 디렉토리로 복사
COPY . /app
# Gradle 빌드를 실행하여 JAR 파일 생성
RUN gradle clean build --no-daemon
# 런타임 이미지로 OpenJDK 11 JRE-slim 지정
FROM openjdk:11-jre-slim
# 애플리케이션을 실행할 작업 디렉토리를 생성
WORKDIR /app
# 빌드 이미지에서 생성된 JAR 파일을 런타임 이미지로 복사
COPY --from=build /app/build/libs/*.jar /app/leafy.jar
EXPOSE 8080
ENTRYPOINT ["java"]
CMD ["-jar", "leafy.jar"]
Dockerfile을 사용해 leafy-backend 이미지를 빌드한다.
docker build -t kms02171/leafy-backend:1.0.0 .
빌드한 이미지를 레지스트리로 푸시한다.
docker push kms02171/leafy-backend:1.0.0
Dockerfile을 사용해 leafy-backend 컨테이너를 실행한다.
docker run -d -p 8080:8080 -e DB_URL=leafy-postgres --name leafy --network leafy-network kms02171/leafy-backend:1.0.0
DB와 backend 컨테이너 실행을 확인한다.
docker ps
leafy 컨테이너의 로그를 확인한다. (leafy-postgres가 실행되어 있어야 한다.)
docker logs leafy
응답을 json 형식으로 받아오는 것을 볼 수 있다.
curl http://localhost:8080/api/v1/users
'Docker' 카테고리의 다른 글
PostgresSQL 컨테이너 구성 (0) | 2024.03.01 |
---|---|
Leafy 애플리케이션 구성 (0) | 2024.02.29 |
클라우드 네이티브 애플리케이션 (0) | 2024.02.27 |
멀티 스테이지 빌드 (0) | 2024.02.27 |
Dockerfile 지시어 (1) | 2024.02.27 |