저번엔 git/github를 이용한 원격 저장소에 저장되어있는 프로젝트를
단순 clone하여 jar파일로 실행하기만 했었습니다.
이번엔 프로젝트를 docker 로 컨테이너화 시켜 배포해보겠습니다.
먼저 ec2 인스턴스를 생성해줍니다.
apt update
apt를 최신화 시켜줍니다. apt install openjdk-17-jdk
자바 jdk 설치java -version
으로 자바 가 잘 설치되었나 확인해줍니다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
압축해제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
환경변수 로드apt install git
깃 설치후 git --version
확인 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
usermod -aG docker <username>
sudo service docker restart
안된다면
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 - 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 이미지이름
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 환경변수 설정 을 추가적으로 해줘야 합니다.