스프링 부트 프로젝트 하위에 Dockerfile이라는 파일을 생성합니다. 이 파일은 도커 이미지를 빌드할 때 필요한 커맨드를 가지고 있습니다.
FROM openjdk:17-jdk-slim
ADD /build/libs/*.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
FROM openjdk:17
COPY build/libs/{생성된 파일}.jar {사용할 이름}.jar
ENTRYPOINT ["java","-jar","/{사용할 이름}.jar"]
프로젝트 파일을 빌드를 해준다.
Mac , Android Studio 환경에서 터미널로 앱 빌드를 하고 싶으면
./gradlew build
위와 같은 명령어로 빌드를 실행할 수 있다.
bash: ./gradlew: Permission denied
그러나 위와 같이 Permission denied 가 발생하면
chmod +x gradlew
⚠️ chmod +x gradlew 를 터미널에 입력 한 후, 다시 ./gradlew build 를 실행하면 빌드가 되는 것을 확인 할 수 있다.
(gradlew 빌드 실패시 명령창에 나온 주소 클릭하면 원인을 알 수 있어 원인제거 하면 빌드 성공)
그러면 libs에 jar파일이 두개 생성됨을 알 수 있다.(아래 사진 참고)
1) 로그인 후 Repositories > Create Repository 로 들어가서 도커 레포지토리를 생성합니다.
2) 아래 명령어를 통해 dockerfile -> docker image 로 빌드를 진행합니다.
애플 M1의 경우 도커 이미지로 빌드할 때 --platform 옵션을 사용해야 한다.
이 문제는 깃허브에 자세히 나와있다.
// gradle
docker build --build-arg DEPENDENCY=build/dependency -t 도커허브 ID/Repository --platform linux/amd64 .
// maven
docker build -t 도커허브 ID/Repository --platform linux/amd64 .
docker push 도커허브 ID/Repository
혹시 denied: requested access to the resource is denied 라는 문구가 나오면 로그인을 해주어야 한다.
dokcer login
도커 아이디로 로그인에 성공하면 다시 푸시 명령어를 입력한다.
docker login 명령어를 통해 로그인을 한 뒤 다시 push하면 정상적으로 push가 되고, docker hub의 Repository에
새로운 TAG(latest)가 생성된 걸 확인할 수 있습니다.
아래 링크로 RDS 생성 및 세팅하는 과정을 거쳤다. 다른 부분이 있다면 디폴프 값으로 설정해주었다.
(MYSQL연결이 확인하고 싶다면 끝까지 진행하면되고 아니라면 4번까지 따라 해보면 된다.)
추가로 EC2에서 MYSQL이 설치가 문제가 생긴다면
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
sudo yum update
후에 아래 두개 중 하나의 명령어로 mysql을 설치하면 된다.
sudo yum -y install mysql-community-server
sudo yum install mysql
추가적으로 문제가 생긴다면 로그에서 버전을 다시 확인해보면된다.
mysql80-community-release-el9-5.noarch.rpm
프로젝트의 application.properties를 yml파일로 바꿔서 사용해도 된다.
src/main/resources/application.(properties 또는 yml)
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://{RDS Endpoint}:3306/example?serverTimezone=UTC&characterEncoding=UTF-8
username: {rds.username}
password: {rds.password}
driver-class-name
com.mysql.jdbc.Driver와 com.mysql.cj.jdbc.Driver 두가지가 있습니다.
전자는 Deprecated이므로 com.mysql.cj.jdbc.Driver를 사용하도록 합니다.
url
localhost:3306/example (example은 database를 의미합니다.)
serverTimezone=UTC
RDS > database > {생성한 이름}
생성했던 RDS로 들어가면 Connectivity & security쪽에 Endpoint & port가 나와있다.
username 과 password는 rds생성할 때 작성했던걸 이용하면 된다.
터미널로 들어가거나
ssh -i {키페어 이름}.pem ec2-user@{퍼블릭 IPv4 DNS}"
권한오류가 발생한다면 키페어를 생성한 위치로 들어가서 명령어를 입력해주면된다.
chmod 400 {키 페어 이름}.pem
EC2 인스턴스로 연결해서 진행하면 됩니다.
도커 설치
sudo yum install docker
## yum 안되면 apt 로 설치 하기
설치 후 도커 실행 명령어를 입력합니다.
sudo systemctl start docker
docker가 정상적으로 동작하고있는지 확인합니다.
systemctl status docker
도커 허브에 존재하는 이미지에 도커 이미지 파일 Pull
sudo docker pull 도커허브 ID/Repository
도커 이미지를 통해 스프링 부트 애플리케이션 배포(실행)합니다.
sudo docker run -p 8080:8080 도커허브 ID/Repository
포트가 이미 할당되어 있어서 에러가 발생한다면 해당 포트를 사용 중인지 확인하여 강제 종료시켜준다.
lsof -i :포트번호 # 해당 포트 번호 (해당 포트번호 사용 중인지 확인)
kill -9 [PID] # 강제종료 시켜주기
다시 도커 이미지를 통해 스프링 부트 애플리케이션 배포(실행)합니다.
프로젝트 내부에서 데이터베이스 연결을 확인하고 실행하는지 확인하고 싶다면.
데이터 베이스를 추가하면된다. (5번 RDS 링크로 돌아가기)
1. mysql 추가 host쪽에 RDS Endpoint사용한다.
2. RDS의 username과 password입력한다.
3. database부분에 RDS DB이름을 넣어주면된다.