[ docker ] Spring boot를 Docker Desktop으로 AWS EC2에 배포하기

선호·2024년 2월 29일

인프라 탐험기

목록 보기
1/2
post-thumbnail

OverView

  • 이 포스팅의 전체적인 흐름은 아래와 같다

docker란?

  • 소프트웨어를 개발, 배포 및 실행하기 위한 플랫폼( flatform )

docker desktop

  • 🤔 docker는 알겠는데 docker desktop은 뭐지?
    - docker desktop은 docker를 개발자들이 로컬 환경에서 쉽고 빠르게 사용하게 해주는 그래픽 툴입니다.
  • docker desktop이 사용되기 이전에는 아래와 같은 커맨드 기반으로 작업을 했었지만 이와 같이 명령어기반으로 docker를 실행하는게 아닌 시각적으로 표현된 환경에서 작업할 수 있게 해주는 도구 입니다.

docker desktop 다운로드

1. docker 홈페이지 접속 후 Develops -> Documentation 접속


2. Get docker 접속

3. 자신의 운영체재에 맞는 docker를 다운로드

저는 운영체재가 window이기 때문에 window로 다운합니다.

4. 다운 후 실행

🤢 만약에 다운 후 실행이 안된다면

1. 작업 관리자에서 가상화 사용 중 인지 체크

2. 사용중이 아니라면 Hiper-v 기능 활성화

  1. 제어판 -> 프로그램 및 기능 - windows 기능 켜기/끄기에 들어가서 아래의 항목에 체크를 하고 확인을 눌러줍니다.

  1. 위 항목을 적용했으면 컴퓨터를 재부팅하고 재부팅시 'F2'나 'DELETE' 를 눌러 bios 환경에 들어가 준 뒤 아래항목을 체크해줍니다.

Spring Boot Project 이미지화 시키기

인텔리제이 파일 설정

1. spring boot file build

  • /build/libs file안에 .jar 파일이 생겼는지 확인합니다.

2. Docker file 생성

3. Docker file 설정

FROM openjdk:17-alpine

COPY ./build/libs/webtoon-zoa-0.0.1-SNAPSHOT.jar /build/libs/webtoon-zoa-0.0.1-SNAPSHOT.jar

ENTRYPOINT ["java","-jar","/build/libs/webtoon-zoa-0.0.1-SNAPSHOT.jar"]

위의 내용을 하나하나씩 설명하자면 다음과 같습니다

FROM openjdk:17-alpine
  • 현재 제가 작업하고 있는 spring boot의 java는 17 버전이기에 도커를 이미지화 시킬 때 spring boot와 java의 환경을 맞춰줄 필요가 있습니다.

  • alpine : Alpine Linux 기반의 OpenJDK 17 이미지를 베이스 이미지로 사용합니다. Alpine Linux는 경량화된 리눅스 배포판으로, Docker 이미지의 크기를 최소화하는 데 도움이 됩니다.

COPY ./build/libs/webtoon-zoa-0.0.1-SNAPSHOT.jar /build/libs/webtoon-zoa-0.0.1-SNAPSHOT.jar
  • ./build/libs/webtoon-zoa-0.0.1-SNAPSHOT.jar 파일을 컨테이너 내부의 /build/libs/ 디렉토리로 복사합니다. 이 디렉토리는 Spring Boot JAR 파일을 실행하는 데 사용됩니다.

  • ./build/libs/webtoon-zoa-0.0.1-SNAPSHOT.jar
    - /build/libs는 파일의 위치를 나타냅니다.

    • webtoon-zoa는 project의 이름을 나타냅니다.
    • 0.0.1-SNAPSHOT은 gradle의 build version을 나타냅니다.
ENTRYPOINT ["java","-jar","/build/libs/webtoon-zoa-0.0.1-SNAPSHOT.jar"]
  • 도커의 이미지가 실행되어 컨테이너가 시작이 될 때 실행될 명령어들입니다.

4. dockerfile 실행

  1. 아래와 같이 docker image name과 image tag를 설정해줍니다.

ex ) [ docker Id ] / [ docker Image name ]:[ tag ] -> yiyaaa/webtoon-zoa:1.0

  1. Run을 눌러 실행시켜줍니다.

  1. 아래와 같이 정상적으로 작동이 되면 성공한 모습입니다.

3-1. docker desktop 내부에서 image가 생겼는지 확인합니다.

3-2. 생성한 이미지의 컨테이너가 제대로 동작되는 모습입니다.

docker 이미지를 ec2에 배포하기

docker hub로 이미지 push 하기

  • docker image를 성공적으로 생성하였으면 ec2에 docker image를 배포하기 위해 docker hub에 push해 줍니다.

  • 아래와 같이 알림이 뜨면 push가 성공한 것입니다.

  • local이 아닌 Hub에 성공적으로 등록된 모습입니다.

ec2에 접속하여 docker 설치하기

  • cmd나 git bash를 활용하여 ec2서버에 접속해줍니다.

  • ec2에서 docker를 사용할 수 있게 설치해줍니다.

  • 아래와 같은 명령어를 입력해 줍니다.
    - gpg 키 및 저장소 추가

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository --yes \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
  • docker 엔진 설치
sudo apt-get install docker-ce docker-ce-cli containerd.io -y

위와 같이 입력하고 나면 docker -v를 입력하여 설치가 되었는지 확인해줍니다.

  • 위와 같이 출력되면 정상적으로 설치가 된 모습입니다.

docker login

  • docker image를 다운받으려면 docker에 먼저 login을 해야 됩니다.
  • 아래와 같이 입력하여 docker에 login을 시켜줍니다.
docker login -u [ docker userId ]

  • password 입력시 아무것도 입력이 안되는 모습을 볼 수 있는데 보안상 안보일 뿐이지 입력이 되고 있습니다.

  • 참고로 아래의 명령어를 입력해주면 logout됩니다.

docker logout

🤢 docker permission denied while ~

  • 위와 같은 에러가 발생할 시 대처법이다.
sudo usermod -aG docker $USER
  • 해당 docker를 root권한을 가지고 실행하는 것은 권장되지 않기에 일어나는 에러이다.
  • 그렇기에 위와같이 입력을 한 뒤 docker group에 사용자를 포함시켜주면 된다.

docker image 다운받기

  • docker를 설치했으니 docker image pull NAME[ :TAG|@DIGEST ] 를 입력하여 아까 생성한 docker 이미지를 다운로드 받아 줍니다.
  • 해당 명령어는 docker 홈페이지 docs부분에 잘 나와있습니다.

  • 아래와 같이 입력해줍니다.
docker image pull yiyaaa/webtoon-zoa:3.0
  • 성공적으로 잘 다운로드 된 모습입니다.

ec2에서 docker로 spring boot 실행

pull 받은 image 실행

  • pull 받은 image를 실행시켜서 spring 서버를 실행시켜준다.
docker run -p 80:8080 yiyaaa/webtoon-zoa:3.0

  • 성공적으로 서버에서 돌아가는 모습이다.

  • postman으로 테스트를 하는 모습이다.
profile
개발을 하더라도 탄탄하게

0개의 댓글