<aside> 👨🏻🏫 AWS EC2에 Spring Boot 프로젝트만 배포를 해야하는 상황이라고 가정하자.
</aside>
로컬 환경에서 프로젝트 셋팅

간단한 코드 작성
AppController
@RestController
public class AppController {
@GetMapping("/")
public String home() {
return "Docker, World!";
}
}
Dockerfile 작성하기
Dockerfile
FROM openjdk:17-jdk
COPY build/libs/*SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
Spring Boot 프로젝트 빌드하기
$ ./gradlew clean build
$ aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com
$ docker build -t instagram-server .
$ docker tag instagram-server:latest 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com/instagram-server:latest
$ docker push 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com/instagram-server:latest
AWS EC2에서 AWS CLI 설치 및 액세스 키 등록하기
(아래 설명 참고하기)
AWS ECR로부터 이미지 다운받아 컨테이너 띄우기
$ aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com
$ docker pull 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com/instagram-server
$ docker run -d -p 8080:8080 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com/instagram-server
혹시나 아래와 같은 에러가 발생했다면?

이 에러의 원인은 CPU 아키텍처 환경이 다르다는 뜻이다. 조금 더 자세히 설명하자면, 이미지 빌드는 M1과 같은 ARM 기반의 환경에서 진행하고, 이미지 실행은 ARM 기반의 환경이 아닌 곳에서 할 때 위와 같은 에러가 발생한다.
위 에러를 해결하기 위해서는 이미지를 실행시키고자 하는 CPU 아키텍처에 맞춰서 이미지를 빌드해야 한다. 로컬 환경에서 아래와 같이 다시 빌드한 뒤 AWS ECR로 Push하자.
$ ./gradlew clean build
$ aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com
$ docker build **--platform linux/amd64** -t instagram-server .
$ docker tag instagram-server:latest 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com/instagram-server:latest
$ docker push 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com/instagram-server:latest
잘 작동하는 지 확인하기
$ docker ps
$ docker logs

Docker Compose의 장점 중 하나는 복잡한 명령어로 실행시키던 걸 간소화 시킬 수 있다는 점이 있다. 따라서 Docker CLI 말고 Docker Compose를 활용해서 Spring Boot 서버를 배포해보자.
폴더 만들기
$ mkdir instagram-server