-
Docker 로 SpringBoot 프로젝트 배포하기 - 이미지 빌드 해서 Docker Hub에 푸시Docker 2023. 10. 30. 20:49
기존 내 프로젝트는 war 파일을 톰캣 매니저 페이지를 통해 배포하는 방법을 채택했었다.
다만 프로젝트를 변경해 나가는 과정에서, ec2 인스턴스를 새로 설정하게 되는 경우가 발생하는데, 이때마다 톰캣 설정, 포트포워딩 등 수반되어야 하는 작업이 번거롭게 느껴졌다.
1. jar 파일로 빌드하기
Docker 에 배포 할 이미지파일을 빌드하기 위해서, 우선 애플리케이션을 빌드해서 jar 파일을 생성해야한다.
cmd 에서 내 프로젝트가 있는 경로로 들어간다.
(내 프로젝트의 경로를 모르겠다면, 이클립스 에서 프로젝트 메인 루트를 클릭 후 Alt + Enter 눌러서 속성창 내 Location에서 확인해볼 수 있다. 그대로 복사해 놓으면 된다.)
명령 프롬프트에서 cd <경로> 해서 들어간다.
여기로 들어가는 이유는, 여기에 gradlew 파일이 있기 때문인데, gradlew 파일이 다른 경로에 있다면 해당 경로로 들어가야 한다
C:\Users\gynpa>cd C:\Users\gynpa\Documents\projects\iamcaster\workspace\iamcaster
이제 빌드하기 위한 명령어를 입력한다.
clean 명령어를 통해 이전 빌드에서 생성된 파일들을 삭제하여 빌드 환경을 깨끗하게 하는 것이 좋다.
gradlew clean build
빌드에 성공하게 되면 이런 메세지를 받는다. 빌드에 성공했다면, 프로젝트 경로에 새로운 'build' 라는 폴더가 생성되었을 것이다.
빌드된 jar 파일은 별도의 설정을 하지 않았다면 build/libs 에 위치하게 된다.
(이 위치를 잘 기억해 두자. 이걸로 Docker build 를 할 것이다.)
2. 윈도우 에서 Docker 환경 설정하기
위에서 빌드한 jar 파일을 Docker 에서 실행할 수 있도록 빌드해야 한다.
이전 글에서 윈도우에서 Docker 환경설정 하는 방법에 대해 작성했다.
환경설정이 모두 완료되었다면 다음으로 넘어간다.
윈도우에서 Docker 환경 설정하기
1. WSL2 활성화 하기 WSL2 는 윈도우에서 리눅스 실행파일을 네이티브로 실행할 수 있게 해준다. Docker Desktop for Windows는 WSL2를 기반으로 만들어졌다. 따라서 WSL2를 미리 활성화 해준다. 우선 명령프
joelinseoul.tistory.com
3. 프로젝트 내 Dockerfile 파일 생성하기

Package Explorer 에서 본인의 프로젝트 폴더 하위에 Dockerfile 라는 이름으로 파일 생성한다.
그럼 docker build 명령어를 실행해서 이미지파일을 만들 때, Docker 가 현재 디렉토리에서 Dockerfile을 찾아,
여기에 정의한 명령어들을 실행하게 된다.4. Dockerfile 파일 작성하기
# DockerFile # jdk17 Image Start FROM openjdk:17-jdk #인자 정리 - Jar ARG JAR_FILE=build/libs/*.jar # JAR 파일 복사 COPY ${JAR_FILE} app.jar # JSP 파일 복사 COPY src/main/webapp/WEB-INF/jsp /src/main/webapp/WEB-INF/jsp # 서버시간대 서울로 설정 RUN ln -snf /usr/share/zoneinfo/Asia/Seoul /etc/localtime ENTRYPOINT [ "java", "-Dspring.profiles.active=docker","-jar","app.jar" ]여기에 작성되는 내용은 docker 빌드 시에 적용되는 아주 중요한 내용이다.
이 내용에 따라 이미지가 생성된다.
FROM openjdk:17-jdk
내 프로젝트는 java 17 기반이므로, 17버전의 jdk를 기준으로 이미지를 생성하며 시작한다.
11버전이면 FROM openjdk:11-jdk 등으로 각자 버전에 맞추어 작성하면 된다.
ARG JAR_FILE=build/libs/*.jar
이미지 빌드 시에 사용될 변수를 선언하는 부분이다.
디폴트 값이 build/libs/*.jar 이므로, 별도로 수정할 필요는 없는 부분이다.
COPY ${JAR_FILE} app.jar
위에서 선언한 JAR_FILE 변수에 지정된 파일을 이미지 내부의 app.jar 로 복사한다.
COPY src/main/webapp/WEB-INF/jsp /src/main/webapp/WEB-INF/jsp
나는 별도의 프론트 없이 jsp 로 화면구성을 했기 때문에, jsp 경로 안에 있는 파일들 또한 함께 이미지파일 안에 포함시켰다. src 하위의 상대경로로 지정되어있는 jsp 를 절대경로 위치로 복사해서, 기존에 controller 에 매핑시킨 view 를 띄울 수 있게 한다.
RUN ln -snf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
컨테이너의 시간대를 서울로 설정한다.
서버의 시간대를 설정하는 방법은 다양하겠지만, 이 방법이 도커 이미지를 사용하는 목적에 가장 부합하지 않은가 싶다.
ENTRYPOINT [ "java", "-Dspring.profiles.active=docker","-jar","app.jar" ]
컨테이너가 시작될 때, 위에서 만든 app.jar 를 실행시킨다.
두번째 파라미터는 application-docker.yml 등의 프로필을 선택할 수 있어, 환경에 따라 다른 설정을 적용시킬 수 있다.5. Docker 이미지 생성하기
cmd 에서 위에서 만든 jar파일을 Docker 에서 실행할 수 있는 이미지 파일로 빌드해야 한다.
Docker Desktop을 실행 후, cmd 에서 Docker 를 실행해 Docker Hub에 로그인 한다.
docker login -u <계정ID>
Docker Hub 로그인 성공 
Docker Desktop을 실행하지 않으면 위의 에러를 만나게 된다. Dockerfiles 경로에서 Docker 이미지를 만드는 명령어를 입력한다.
위에서 Dockerfiles 의 경로를 프로젝트 폴더 최 상단에 만들었기 때문에, 프로젝트 경로로 들어가면 된다.
Dockerfiles가 있는 경로에서 아래의 명령어를 실행한다.
docker build -t mydockerid/iamcaster:23103010 .
- -t : 태그 옵션을 사용 시 입력. 태그를 활용하면 버전 정보 등을 기록하는데 유용하다.
- <도커id>/<이미지명>:<태그> <Dockerfile디렉토리>
docker build -t mydockerid/iamcaster:23103010 .
Dockerfiles 에서 작성한 내용들에 따라 이미지가 만들어진다.
완료 시 아래와 같이 FINISHED 를 볼 수 있다.
6. Docker Hub 에 Push 하기
위에서 만들어진 이미지는 로컬 Docker 데몬에 저장된다.
Docker Hub에 이미지를 올려야 ec2 등의 서버에서 pull 받기 용이하므로, Push 한다.
Push 명령어는 아래와 같다.
docker push <도커id>/<이미지명>:<태그>
* 태그를 입력하지 않으면 latest 란 텍스트로 자동 입력된다.
docker push 도커id/이미지명:태그
푸시 완료 이렇게 빌드된 이미지들은 도커 데스크탑에서 확인할 수 있다.(local / hub)

다음 : EC2 에 Docker 올리고 배포하기
Docker 로 SpringBoot 프로젝트 배포하기 - EC2에 Docker 올리기
이전 글에서 스프링부트 프로젝트를 jar 파일 빌드, 윈도우에서 Docker 환경 설정, Docker 이미지 생성 및 Push를 했다. 윈도우에서 Docker 환경 설정하기 1. WSL2 활성화 하기 WSL2 는 윈도우에서 리눅스 실
joelinseoul.tistory.com
'Docker' 카테고리의 다른 글
Docker 로 SpringBoot 프로젝트 배포하기 - EC2에 Docker 올리고 배포 (0) 2023.10.30 Docker 로 SpringBoot 프로젝트 배포하기 - 윈도우에서 Docker 환경 설정하기 (0) 2023.10.30