본문 바로가기

DevOps/Docker

[Docker 실습] AWS EC2에 Spring Boot 배포하기

AWS EC2에 Spring Boot 배포하기


1. start.spring.io 에서 간단하게 프로젝트 셋팅을 해보자. 

 

 

 

2. 인텔리제이에서 프로젝트를 오픈한다 .

 

3. AppController 파일을 생성하고 간단한 코드 작성

package com.example.SpringProjectForDeploy;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AppController {
    @GetMapping("/")
    public String home() {
        return "Docker, World!";
    }
}

 

 

4. Dockerfile 생성

FROM openjdk:17-jdk

COPY build/libs/*SNAPSHOT.jar app.jar

ENTRYPOINT ["java", "-jar", "/app.jar"]

 

 

5. 빌드

 ./gradlew clean build

 

6. 빌드한 이미지를 aws ecr에 올려보자. 

aws에 접속해서 Elastic container registry에 들어간다. 

 

 

=> 푸시 명령 보기를 클릭해서 인텔리제이 터미널에 명령어를 차례대로 입력한다. 

 

7. 이미지가 생성됐다. 

 

 

8. EC2에서 이 이미지를 다운받는다. 

docker pull

'레포지토리 URI'오류 발생 시 로그인 명령어를 입력해준다. 

 

9.  이미지 이름을 확인한다. 

docker image ls

 

docker run -d -p 8080:8080 '이미지 이름'

 

=> 이미지의 플랫폼이 다르다는 오류가 발생했다. 

이미지를 빌드한 환경과 이미지를 실행시키는 환경의 cpu 아키텍쳐가 동일해야 한다. 맥북 M1,M2,M3 를 사용하는 경우 이 에러가 발생할 수 있다. 

 

10. 다시 인텔리제이로 돌아가서 

빌드 후 로그인 명령어를 입력한다. 

두번째 명령어를 입력할 때 --platform linux/amd64를 추가해준다. 

 docker build --platform linux/amd64  -t instagram-server .

 

11. 나머지 명령어도 입력하면 정상적으로 docker 가 실행되는 것을 볼 수 있다. 

 

 

docker compose 사용해 배포하기


 

이전에 만든 이미지는 삭제하자. 

docker rm -f 242

docker image rm -f 914 4bf

 

1. 폴더 생성

mkdir instagram-server

 

2. 생성한 폴더로 이동한 뒤 compose 파일 작성

vi compose.yml

 

services:
	instgram-server:
    	image: image id
        ports: 
        	- 8080:8080

 

 

 

3. docker compose up -d --build

 

4. ip:8080 입력해서 접속해보자. 

 

 

 

* 인프런 '김영한의 실전 자바 - 기본편'을 참고하여 작성하였습니다.