본문 바로가기

Docker

[Docker] Dockerfile을이용하여 Spring 프로젝트 Image 생성 및 실행

반응형

Dockerfile

Dockerfile은 새로운 image 를 만들기 위한 명령을 포함하고 있는 파일이다.

이 파일에 작성된 명령어와 base image를 통해 새로운 환경의 image를 만들 수 있다.

 

Spring Project에 Dockerfile 생성 및 작성

아래 사진과 같이 자신의 Spring 프로젝트 폴더에 Dockerfile 이라는 이름의 파일을 생성해 준다.

Dockerfile 생성

FROM openjdk:18-ea-jdk-slim
VOLUME /tmp
COPY build/libs/community-service-0.0.1-SNAPSHOT.jar community-service.jar
ENTRYPOINT ["java","-jar","community-service.jar"]

작성 내용

  • FROM : 새로 생성할 Image 의 기반으로 사용할 image를 지정한다
    • openjdk:18-ea-jdk-slim Image를 포함한 image 생성
  • COPY : 지정된 경로의 호스트 파일을 container에 복사
    • build 된 jar 파일을 container 내부에 복사
  • ENTRYPOINT : container 실행 시 추가로 수행할 실행 커맨드 입력
    • 복사한 community-service.jar 파일 실행

 

image build

Dockerfile을 작성하였다면 build를 하여 jar 파일을 만들어 준다.

./gradlew clean build --exclude-task test
  • clean : 기존의 jar파일을 삭제하고 build
  • --exclude-task test : 테스트 코드들은 build 에서 skip

build가 다 되고 jar파일이 생성이 되었다면 아래 명령어를 입력해 image를 생성한다.

docker build --tag blac2013/community-service:0.0.1 .
  • --tag 뒤로는 자신의 Docker hub 계정 이름(push를 위해 로컬 저장소에 저장) / 생성할 image 이름 

image build

build가 다 되면 docker images 명령어를 통해 image가 추가된것을 확인할 수 있다.

추가된 image

 

image push

만들어진 image 파일을 hub의 계정 repository 로 push하려면 아래 명령어를 입력한다.

 docker push blac2013/community-service:0.0.1

push가 완료 되면 docker hub의 reposiotries에 추가가된다.

docker hub -> repositories

 

image pull (test)

먼저 기존에 생성한 image 를 삭제한다.

docker rmi [image id]

명령어를 입력하고 image 목록을 확인해보면 삭제된 것을 확인할 수 있다.

docker pull blac2013/community-service:0.0.1

위의 명령어를 자신의 repository 계정과 image 이름에 맞게 입력을 하면

 

다음 로그들과 함께 image 목록에도 추가가 되었다.

 

image run

docker run blac2013/community-service:0.0.1

위 명령어를 입력하여 실행해보면 spring boot 가 실행된다.

 

 

 

 


+

도커관련된 글을 작성하다보니 소소한 협찬을 받게 되었다.

 

감기가 걸려 코를 풀 때도 도커 생각이 떠오르며 업무에 한 층 더 심혈을 기울일 수 있게 될거같다.

백엔드 개발자 책상이 점점 더 개발자 스러워지고 있다. 좋은 현상인지는 모르겠지만 어쨌든 주변에서는 나를 좀더 프로페셔널한 백엔드 개발자로 봐준다면 그건 개인적으로 좋은 변화라는 생각이 든다.

내가 쓴 글의 처음 취지가 어떤 누군가에게 도움을 주기 위해 쓴 글들은 아니었지만 이렇게 협찬품을 제공해준 분에게라도 도움이 될 수도 있다고 생각하니 가슴이 벅차오른다.

반응형