DevOps

💻 실전편: Spring 프로젝트를 Docker로 배포해보기

Developer Covy 2025. 5. 17. 13:38

안녕하세요. 오늘은 우리가 만든 Spring 프로젝트를 docker를 활용하여 배포하는 과정을 예제로 적어볼까합니다.

 

우선적으로 Spring 프로젝트는 이미 가지고 계신다는 전재하에 블로그를 쓰니 이점 참고 부탁드리겠습니다.

https://github.com/Junni802/docker-example

 

GitHub - Junni802/docker-example

Contribute to Junni802/docker-example development by creating an account on GitHub.

github.com

(귀찮아서 안만들고 기존것으로 할려고했는데 하나 올립니다)

 

도커 설치하기

도커 설치 URL

https://www.docker.com/products/docker-desktop

 

Docker Desktop: The #1 Containerization Tool for Developers | Docker

Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.

www.docker.com

 

해당 경로로 들어가면 실제 download Docker Desktop 버튼이 존재하는데 해당 버튼을 클릭해주시면

다운로드가 진행됩니다.

 

도커 다운로드가 정상적으로 완료가 되었다면 실제 아이디가 있으신 분들은 기존 아이디로 로그인 해주시고

아이디가 없으신 분들은 도커 회원가입을 진행 부탁드립니다.

 

요기 까지 따라오셨다면 벌써 30프로가 완료되었습니다!!!👏👏

 

이제는 스프링 프로젝트에서 Dockerfile을 생성하고 작성하는 과정을 진행하겠습니다.

 

Spring 프로젝트에 Dockerfile 생성

실제 프로젝트 exaple-docker폴더 기준으로 new -> file -> Dockerfile을 생성해주시면 됩니다.

 

이제 우리는 이전 블로그에서 설명한데로 Spring project를 도커파일 생성 -> 도커 이미지 생성 -> 도커 컨테이너 생성

해당 과정을 배포를 진행하겠습니다.

해당 내용이 이해가 잘 안가시는 분들은

https://covy.tistory.com/20

 

도커(Docker)란 무엇인가?

도커(Docker)란 무엇인가?도커는 컨테이너 기반 가상화 기술을 활용해 애플리케이션을 효율적으로 배포, 실행, 관리할 수 있도록 도와주는 오픈소스 플랫폼입니다.컨테이너란 운영체제 수준에서

covy.tistory.com

이전 블로그를 정독하시고 오시기 바랍니다.

 

 

Dockerfile을 생성을 완료하셨다면 이제 Dockerfile을 작성해보도록 하겠습니다.

FROM openjdk:17-ea-11-jdk-slim
VOLUME /tmp
COPY build/libs/exaple-docker-1.0.jar ExapleDocker.jar
ENTRYPOINT ["java", "-jar", "ExapleDocker.jar"]

저는 해당 내용으로 작성을 완료하였습니다.

비교적 작은 예제 프로젝트이므로 jdk slim 버전을 채택하였습니다.

 

해당 문법들을 잘 모르시는 분들을 위하여 Docker문법 파일 이미지를 공유하도록 하겠습니다.

 

해당 내용까지 따라오셨가면 아래 내용을 따라 오시기 바랍니다.

이제부터는 Dockerfile을 생성한 뒤의 터미널에서 현재 작업하고 있는 프로젝트 경로로 들어가서 

실제 프로젝트를 빌드시키도록 하겠습니다.

intellij 터미널에서 실행하셔도 되고 터미널을 직접 실행하셔도 무방합니다.

 

Spring project 를 Docker를 활용하여 빌드

해당 프로젝트 경로에 들어가셔서 아래와 같이 코드를 주입하여 프로젝트를 빌드시킵니다.

docker build -t [Docker계정명/프로젝트명]:[버전] .

-- 실제 저의 build 내용을 아래에 적겠습니다.
docker build -t developercovy/example-docker:1.0 .

 

 

DockerHub로 push

위에서 만든 이미지로 컨테이너를 실행만 해주면 자동으로 스프링부트 프로젝트가 실행된다. 하지만 다른 서버 환경에서도 이 이미지에 접근하기 위해서는 docker hub에 push한 후 이미지가 필요할 때 pull 하는 것이 편합니다.

$ docker login

먼저 도커에 로그인을 해줍니다.

$ docker push <이미지 이름>

해당 명령어로 도커허브로 push 해주면됩니다.

이 때 이미지 이름은 작성자명, 이름, 버전등이 모두 포함된 풀네임으로 작성해야합니다.

이제 클라우드 환경에 방금 만들었던 도커 이미지가 공유되었습니다.

어디서든 도커가 설치된 환경이라면 도커허브에서 다운로드 받아 해당 이미지의 컨테이너를 생성할 수 있다.

배포하기

필자는 NCP 서버를 하나 생성한 후 SSH로 접속하였습니다.

새로운 서버에 접속했으므로 다시 도커에 로그인 해줍니다.

$ docker login

로그인을 해준 후 이미지를 도커 컨테이너에서 가져옵니다.

$ docker pull <이미지 이름>

도커 이미지 목록을 확인하면 방금 push 했던 도커이미지가 정상적으로 다운로드 되었을 것입니다.

$ docker images

해당 image를 실행할텐데 이 프로젝트는 스프링 MVC 기반으로 이루어져 있기 때문에 도커와 로컬의 포트포워딩을 잘 설정해주어야 합니다.

해당 이미지는 8080포트를 할당해주었지만 이건 어디까지나 도커 컨테이너 내부의 포트입니다.

도커 컨테이너의 8080포트를 로컬의 8080포트와 포트 포워딩을 해주기 위해서

$ docker run -i -t -p 8080:8080 <도커이미지> &

해당 명령어로 컨테이너를 백그라운드로 생성해준다. 성공적으로 해당 서버의 공인 ip의 8080포트로 접속되는 것을 확인할 수 있다.