이 글에선 maven프로젝트를 .jar
파일로 빌드한 후 이 파일을 도커이미지에 복사시켜 컨테이너에서 실행시키는 방법을 다룬다.
spring.io의 문서를 참고했다.
이 글에선 .jar
파일을 docker container에서 실행시키도록 Dockerfile
을 작성할 것이다.
따라서 먼저 maven프로젝트의 코드를 .jar
파일로 빌드하자.
mvn install
위 명령은 테스트를 거쳐서 프로젝트를 build
하게 하는데 target
폴더에 .jar
파일을 생성해준다.
Dockerfile
작성Dockerfile
은 도커가 이미지 생성시 해야할 작업들을 나열한 파일이다.
프로젝트의 루트 폴더에 생성하고 아래와 같이 작성하면 된다.
FROM openjdk:11
COPY target/front-office-0.0.1-SNAPSHOT.jar /app/app.jar
WORKDIR /app
CMD ["java","-jar", "app.jar"]
위 명령의 의미를 한 줄씩 해석해보면
target/front-office-0.0.1-SNAPSHOT.jar
파일을 컨테이너의 /app/app.jar
파일로 복사시킨다. –> 실행파일을 복사시키기/app
폴더에서 명령을 실행시킨다.java -jar app.kar
명령을 실행한다. –> 실행파일 실행이제 위에서 만든 Dockerfile을 이용해 이미지를 생성한다.
이미지 생성대상은 Dockerfile이 있는 폴더를 가리키면된다.
# 현재 폴더의 Dockerfile을 이용해 'rst0070/myjava:latest'태그가 있는 이미지를 생성
docker build -t rst0070/myjava:latest .
이때 -t
옵션으로 태그를 추가할 수 있는데 나중에 docker hub에 이미지를 push한다면 <도커계정이름>/<repo이름>[:태그명]
으로 태그를 추가해야 docker hub에 push할 수 있다.
push를 하기전에 도커계정에 로그인이 필요하다.
docker login
push 명령은 도커계정이름/repo이름
으로 어느 push대상 repo와 local image를 찾는다.
# 도커 계정이 rst0070, repo 이름이 myjava인 곳에
# latest 태그가 붙은 이미지를 push 한다.
docker push rst0070/myjava:latest
rst0070/myjava
를 내려받는다.
docker pull rst0070/myjava
컨테이너화해서 실행시키는 명령은 다음과 같다.
docker run -p 8080:8080 rst0070/myjava
-p
를 통해 특정 포트범위를 컨테이너와 로컬을 동기화시킴.-d
옵션을 추가하면된다.