Deploy Spring MVC project to Docker Hub
이 과정은 터미널을 활용하여 Maven으로 Spring MVC 프로젝트를 생성하고 Docker 컨테이너에서 실행하는 방법을 알려드리는 글이에요. 프로젝트를 생성 후 Docker Hub에 이미지를 업로드하여 배포할 수 있도록 구성했습니다. 이 과정을 진행하면 Spring MVC 애플리케이션을 컨테이너화하고 어디서든 쉽게 배포할 수 있습니다.
1. Spring MVC 프로젝트 생성 (Maven 사용)
Maven의 maven-archetype-webapp 템플릿을 사용하면 기본적인 웹 애플리케이션 프로젝트를 빠르게 만들 수 있습니다.
아래 명령어를 작성해서 프로젝트를 생성해주시고 디렉토리로 이동해주세요. "DartifactId=springmvc-app"에서 springmvc-app이 프로젝트 디렉토리명이니깐 디렉토리명은 편하게 적으시면 됩니다.
mvn archetype:generate -DgroupId="프로젝트 그룹ID" -DartifactId="프로젝트명" -DarchetypeArtifactId="프로젝트 생성을 위한 기본 템플릿을 지정" -DinteractiveMode=false
mvn archetype:generate -DgroupId=com.example -DartifactId=springmvc-app -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
명령어 설명
- mvn archetype:generate : Maven 프로젝트의 초기 구조를 생성하는 명령어입니다.
- -DgroupId=com.example : 프로젝트의 그룹 ID를 설정합니다. 일반적으로 패키지 구조와 관련됩니다.
- -DartifactId=springmvc-app : 프로젝트의 아티팩트 ID를 설정합니다. 프로젝트의 이름을 나타냅니다.
- -DarchetypeArtifactId=maven-archetype-webapp : 웹 애플리케이션 프로젝트 생성을 위한 기본 템플릿을 지정합니다.
- -DinteractiveMode=false : 인터랙티브 모드를 비활성화하여 자동으로 프로젝트를 생성합니다.
2. 프로젝트 설정 및 빌드
프로젝트 생성이 완료되면 빌드하기 전에 pom.xml 파일에 필요한 의존성을 추가할게요.
<dependencies>
<!-- Spring MVC Dependency -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.18</version> <!-- 원하는 버전으로 변경 가능 -->
</dependency>
<!-- MySQL JDBC Driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version> <!-- 원하는 버전으로 변경 가능 -->
</dependency>
<!-- 기타 의존성 추가 -->
</dependencies>

의존성 추가했다면 빌드를 바로 진행해주세요. 빌드를 완료하면 target/ 폴더 내에 spring-app의 war 파일이 생성됩니다. 간혹 war 파일명이 다르게 만들어질 수 있으니 꼭 확인하시길 바랍니다.
# mvn clean package : 기존 빌드 파일을 정리하고 새로운 WAR 파일을 생성
mvn clean package


3. Docker 설정 (Tomcat 환경에서 실행하기)
Docker를 이용해서 Spring MVC 애플리케이션을 배포를 해야 하는데 Dockerkfile을 설정해야 하니 spring 디렉토리 내에 Dockerfile을 추가해 주세요. Dockerfile에 아래 나와있는 "## Dockerfile 안에 작성해야 할 내용들" 아래에 있는 내용들을 작성해주세요.
# 텍스트 에디터 열기
nano Dockerfile
## Dockerfile 안에 작성해야 할 내용들
# Tomcat 기반 이미지 사용
ROM tomcat:9-jdk11-openjdk-slim
# WAR 파일을 Tomcat 웹 애플리케이션 디렉터리에 복사
COPY target/springmvc-app.war /usr/local/tomcat/webapps/app.war
# Tomcat 포트 노출
EXPOSE 8080
# Tomcat 시작
CMD ["catalina.sh", "run"]
- FROM tomcat:9-jdk11-openjdk-slim : Tomcat 9 + JDK 11 환경을 기반으로 설정
- COPY target/springmvc-app.war /usr/local/tomcat/webapps/app.war : 빌드된 WAR 파일을 Tomcat의 배포 디렉터리로 복사
- EXPOSE 8080 : 컨테이너의 8080 포트를 외부에 개방
- CMD ["catalina.sh", "run"] : Tomcat 서버 실행

4. Docker 이미지 빌드, 실행 및 컨테이너 상태 확인
docker build -t springmvc-app .
docker run -d -p 8080:8080 --name springmvc-app
docker images
docker ps
- docker build : 현재 디렉터리(.)의 Dockerfile을 기반으로 이미지를 생성
- -t springmvc-app : 생성될 이미지의 태그를 springmvc-app으로 설정
- -d : 컨테이너를 백그라운드에서 실행
- -p 8080:8080 : 컨테이너의 8080 포트를 로컬 8080 포트에 매핑
- springmvc-app : 실행할 Docker 이미지 지정
- docker images : 현재 존재하는 Docker 이미지 목록 확인
- docker ps : 실행 중인 컨테이너 목록 확인



다 진행하셨다면 확인을 위해 브라우저에서 "http://localhost:8080/app"에 접속하여 애플리케이션이 정상적으로 동작하는지 확인합니다.

5. Docker Hub에 업로드
Docker 이미지를 빌드한 후, Docker Hub에 푸시(push)하여 다른 환경에서도 사용할 수 있게 배포합니다. 아래 명령어 참고하시고 진행하시면 되는데 순서는 지키셔야 합니다. 제가 아래에 올린 사진은 태그 먼저 하고 로그인을 한 상태인데 push 할 때 오류가 발생할 수도 있으니 로그인 먼저 하고 하시는게 좋아요. 태그 하는 이유가 궁금하신 분들을 위해 간략히 적어드릴게요.
태그 하는 이유
- 버전 관리 : 동일한 애플리케이션 여러 버전 관리, 새로운 버전에서 진행하다가 문제가 발생했을 때 이전 버전으로 롤백할 수 있어서 안정적인 배포가 가능함
- 추적성 및 책임 관리 : 태그를 통해서 특정 이미지를 누가 어떻게 생성했는지 추적이 가능하고 변경 이력이나 특정 업데이트가 언제 이뤄졌는지 파악할 수 있음
- 배포 및 자동화 간소화 : 일관된 태그를 정해두면 CI/CD 파이프라인을 통해 특정 태그가 붙은 Docker 이미지를 자동으로 빌드하고 배포할 수 있음
docker login
docker tag springmvc-app bddung/springmvc-app:latest
docker push bddung/springmvc-app:latest
- docker login : Docker Hub에 로그인
- docker tag springmvc-app bddung/springmvc-app:latest => springmvc-app 이미지를 bddung/springmvc-app:latest로 태깅, 태그명 latest는 편한대로 작성 가능
- docker push bddung/springmvc-app:latest : 태깅한 이미지를 Docker Hub에 업로드

push를 완료했다면 잘 진행이 됐는지 확인해봐야겠죠?? 저는 빨리 확인하기 위해 desktop 앱에서 확인해볼게요.


확인이 잘 되었네요. 혹시 글을 보시다가 잘 모르시는 부분이 있으시면 댓글에 물어보시거나 ChatGPT 활용하셔서 찾아보시는 것도 좋아요!!
'Docker' 카테고리의 다른 글
| 이클립스에서 Gradle(Groovy) 기반 Spring Boot 프로젝트를 Docker에 올리는 방법 (40) | 2025.03.16 |
|---|---|
| Docker 이미지 Pull 및 실행 (10) | 2025.03.07 |
| Docker 로컬 이미지 삭제하기 (4) | 2025.03.07 |
| 기존 Docker Hub Repository에 Push하기 (4) | 2025.03.05 |
| Ubuntu에 Docker 설치하는 방법 (WSL2에서 사용하는 방법) (2) | 2025.03.05 |