ec2 환경에 배포하기(docker)

박우영·2023년 4월 24일
0

Cloud

목록 보기
2/10

저번엔 git/github를 이용한 원격 저장소에 저장되어있는 프로젝트를
단순 clone하여 jar파일로 실행하기만 했었습니다.

이번엔 프로젝트를 docker 로 컨테이너화 시켜 배포해보겠습니다.

설치


먼저 ec2 인스턴스를 생성해줍니다.

  • java 설치
    • apt update apt를 최신화 시켜줍니다.
    • apt install openjdk-17-jdk 자바 jdk 설치
    • java -version으로 자바 가 잘 설치되었나 확인해줍니다
  • gradle 설치 (사용하려는 버전에 맞게 해줍니다 전 7.5.1할 예정)
    • apt install wget
    • wget https://services.gradle.org/distributions/gradle-7.6.1-bin.zip -P /tmp 으로 gradle 다운 7.5.1 만 바꿔주면 됩니다
    • apt install unzip zip 파일로 받았으니 압축해제를 위해 unzip 인스톨
    • unzip -d /opt/gradle /tmp/gradle-7.6.1-bin.zip 압축해제
    • 4.4.1 버전이 나옵니다 환경변수 설정을 통해 7.5.1버전이라는 것을 명시해줍니다.
    • apt-get install nano nano 편집기 인스톨
    • nano /etc/profile.d/gradle.sh
    • 실행후 아래 명령어를 입력해줍니다.
      export GRADLE_HOME=/opt/gradle/gradle-7.6.1export PATH=${GRADLE_HOME}/bin:${PATH}``` 
    • chmod +x /etc/profile.d/gradle.sh 스크립트 실행
    • source /etc/profile.d/gradle.sh 환경변수 로드
    • 버전을 확인해보면
  • git 설치
    • apt install git 깃 설치후 git --version 확인
  • docker 설치
    • apt update
    • apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
    • curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    • add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    • apt update
    • apt install docker-ce docker-ce-cli containerd.io
    • 설치 확인 sudo systemctl status docker
    • user를 그룹에 포함 usermod -aG docker <username>
    • docker 재시작 sudo service docker restart
    • user logout 후 다시 실행

안된다면

sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

Build 및 컨테이너 화


먼저 프로젝트 디렉토리에 가서 build 를 진행해줍니다.

그러면 build - libs 디렉토리에 jar파일이 생기는데

프로젝트 안에 들어가서 Dockerfile 을 생성해줍니다.

저는 아래와 같이 작성했습니다 arg 에는 컨테이너화 시킬 파일명을 작성해주시면 됩니다

# 저는 m1이기 때문에 FROM openjdk:17-jdk-alpine 를 안하고 아래와 같이 작성
FROM openjdk:17
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-jar","-Dspring.profiles.active=prod" , "/app.jar"]

docker build -t [이미지명] .
이미지명을 지을때 도커허브id,레포지토리Id/이미지 명으로 하시면 됩니다.

잘 생성 된거 확인했으니

도커 허브에 push 해보겠습니다.
이대로 하면 아이디가 없기때문에 tag 명령어를 사용해 이미지 이름을 변경해줍니다.

  • docker login
  • docker push 이미지이름

    잘 Push 된게 확인 되었습니다.

EC2 에서 실행

docker run --name=test -p 8080:8080 --rm -d wy9295/testimage
명령어를 통해 도커를 받아오고 실행시켜줍니다.

c859a5f642344fdcdd611b4b4f391e9232c912d371a38d83e6ae8dcc8c99b200

에러가 발생했습니다. 제가 m1 을 사용하는데 m1과 ec2 가 다른 cpu 를 사용해서
발생한 오류인거 같습니다.
자세한 사항은 https://velog.io/@wy9295/docker-%EC%9D%B4%EB%AF%B8%EC%A7%80-%ED%8C%8C%EC%9D%BC-%EB%AC%B8%EC%A0%9C-m1-ec2 를 참고해주세요

해결 후
ec2 ip:port/api 를 입력해주면


추가 사항

여기서 우리 프로젝트에 적용시키기 위해선 jasypt 환경변수 설정 을 추가적으로 해줘야 합니다.

0개의 댓글