IT정보사전

[Docker] AWS EC2 도커 컨테이너에 Spring boot 프로젝트 JAR 배포하기 본문

IT정보

[Docker] AWS EC2 도커 컨테이너에 Spring boot 프로젝트 JAR 배포하기

작은나무0530 2024. 5. 28. 16:09
728x90
반응형

안녕하세요~ 작은나무입니다!
오늘은 AWS EC2 도커 컨테이너에 Spring boot 프로젝트 JAR 파일을 배포하는 방법을 알아보도록 하겠습니다.

우선 배포할 JAR파일이 이상이 없는지 로컬에서 실행해 보겠습니다.
관리자 권한으로 Windows PowerShell을 실행하고 아래 명령어를 입력해서 jar 파일을 실행합니다. 

java jar #{JAR파일명.jar}

jar파일이 이상없는 것을 확인 하신 후 Docker를 통해 AWS EC2 서버에 배포하기 위해 Dockerfile을 작성하고 Docker Image로 빌드를 진행해 보겠습니다.

1. Spring boot 프로젝트 Dockerfile 생성 및 설정
저는 Intellij를 사용하고 있어 아래와 같이 Dockerfile을 생성하고 Gradle 프로젝트 기준으로 내용을 작성합니다.

※ Dockerfile 내용 작성시 Gradle과 Maven의 ARG JAR_FILE에 대한 경로가 다르니 아래 내용 참고해 주세요.

# Gradle
FROM openjdk:17-alpine
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} smalltree-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java","-jar","/smalltree-0.0.1-SNAPSHOT.jar"]
# Maven
FROM openjdk:17-alpine
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} smalltree-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java","-jar","/smalltree-0.0.1-SNAPSHOT.jar"]

Dockerfile 작성을 하고 Gradle의 bootJar를 실행하면 build/libs에 jar파일이 생성됩니다.


2. Docker Image 생성 및 Docker Hub Push
Windows PowerShell을 실행하고 Local에 설치한 Docker Desktop에 로그인 합니다.

docker login -u [username]

※ Docker Desktop을 설치하지 않으신 분들은 아래 링크를 통해 설치 진행하시면 됩니다.

 

[Docker] Windows Docker Desktop 설치하기

안녕하세요~ 작은나무입니다!오늘은 Windows Docker Desktop을 설치하는 방법에 대해 알아보겠습니다.먼저 Docker는 Linux를 기반으로 하기 때문에 Windows에서 사용하기 위해서는 WSL2를 활성화해야 합니다

miniweb4u.tistory.com


로그인 하신 후 생성한 Dockerfile의 경로로 이동해서 build하고 도커 이미지를 생성합니다.
※ Dockerfile 경로로 이동하지 않고 경로를 작성해도 됩니다.

# docker build -t #{DockerHub ID/#{Image Name} #{Dockerfile Path}
docker build -t smalltree0530/smalltree .

도커 이미지가 생성되었는지 확인합니다.

docker images

생성된 도커 이미지는 Docker Desktop을 실행해서 확인 가능합니다.

위의 Docker Desktop에서 확인 할 수 있듯이 생성된 이미지는 Local에 등록되어 있기 때문에 Docker Hub에 이미지를 올리기 위해  Repositories를 하나 생성하고 아래 Docker commands의 push 명령어를 복사해서 실행합니다.
※ tagname은 입력하지 않아도 됩니다.

docker push smalltree0530/smalltree:tagname

Docker Hub에 이미지가 정상적으로 등록된 것을 확인 할 수 있습니다.

3. Docker Hub Image를 AWS EC2 Docker에 가져오기
마지막으로 생성한 이미지를 AWS EC2 Docker에 배포하기 위해 Dorkder Hub 이미지를 가져옵니다.
※ AWS EC2 서버에도 Docker가 설치되어 있어야 합니다.

AWS EC2 인스턴스에 연결하고 docker pull 명령어를 통해 이미지를 가져옵니다.

# docker pull #{DockerHub ID/#{Image Name}
~$ docker pull smalltree0530/smalltree

명령어 실행시 다음과 같은 에러 메시지가 확인되는 경우가 있는대요~
(docker push denied: requested access to the resource is denied)
저는 Docker Hub Repositories는 private으로 생성하였기 때문에 Docker Hub에 로그인 후 실행해야 합니다.

Docker Hub에 있는 이미지를 AWS EC2 서버로 잘 가져온 것을 확인 하실 수 있습니다.

4. AWS EC2 Docker에 Dorker Image 컨테이너화
가져온 이미지를 컨테이너화 해서 jar파일을 실행하고 접근할 수 있도록 아래 명령어를 실행합니다.

docker run -d -p #{로컬 포트}:#{도커 포트} --name #{도커 실행 이름} #{DockerHub ID}/#{Image Name}:#{Tagname}
~$ docker run -d -p 80:80 --name dockertest smalltree0530/smalltree:latest

[docker run 옵션]
-d : 백그라운드 실행
-p : 로컬 포트와 도커의 포트를 설정

드디어 마무리 되는가 싶었는대... 다시 아래와 같은 Error가 발생하네요... ㅠㅠ
Error response from daemon: driver failed programming external connectivity on endpoint dockertest 
(5c185fdcb7ad513bbdf348cf9952f8cd923a729343b69dff6dbc13fa9c27fd1e): Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use.

80포트가 이미 사용중이라고 하네요..
에러 해결방법은 포트를 변경하거나 실행중인 포트를 kill/stop하고 다시 실행하면 됩니다.

사용중인 80포트를 확인하기 위해 netstat를 이용해 확인해 보겠습니다.

~$ netstat -ntlp | grep:80

netstat 명령어 실행 시 위와 같이 'netstat' not found가 확인되면 아래 링크를 통해 net-tools를 설치해 주세요~

 

[AWS] EC2 Ubuntu에 net-tools 설치하기

안녕하세요~ 작은나무입니다!AWS EC2 Ubuntu 설치 후에 사용중인 포트를 확인하기 위해서는 네트워크 관련 툴(net-tools)을 설치해야 합니다.1. apt update 명령으로 패키지를 업데이트 합니다.~$ sudo apt upd

miniweb4u.tistory.com


다시 Docker Image를 컨테이너화하기 위해 아래 명령어를 실행하고 실행 중인지 확인합니다.

~$ docker run -d -p 80:80 --name dockertest smalltree0530/smalltree:latest
~$ docker ps

Docker 이미지가 실행되고 있으니, AWS EC2 서버에 정상적으로 접속이 되는지 확인해 보겠습니다.
AWS EC2의 퍼블릭 IPv4 주소를 확인해서 브라우저에 입력하면 정상적으로 jar파일이 배포되어 서비스 되는 것을 확인할 수 있습니다.

지금까지 AWS EC2 도커 컨테이너에 Spring boot 프로젝트 JAR 배포하는 방법에 대해 알아봤습니다.
감사합니다.

728x90
반응형
그리드형
Comments