카테고리 없음

AWS Lightsail | IntelliJ, Docker Desktop 설치 및 Docker Image 생성

여니's 2025. 12. 20. 01:16
# 1. 베이스 이미지 (자바 17 버전이 깔린 리눅스 컴퓨터를 가져와)
FROM openjdk:17-jdk

# 2. 내 도시락(jar 파일)을 컨테이너 안으로 복사해
# (build/libs 폴더 안에 있는 jar 파일을 app.jar라는 이름으로 복사함)
COPY build/libs/*.jar app.jar

# 3. 컨테이너가 켜지면 바로 이 명령어를 실행해 (자바 실행)
ENTRYPOINT ["java", "-jar", "app.jar"]

하기와 같이 설정 후 IntelliJ 프로젝트 생성해보겠습니다.

 

프로젝트 빌드까지 완료되었습니다.

 

HelloController.java 파일을 만들고 서버를 실행하였습니다.

 

이제 실행파일(.jar)을 만들기 위해 Terminal 탭을 클릭하여 하기 명령어를 입력하겠습니다.

# 기존에 있던 거 싹 지우고 새로 빌드해 (to Gradle)
./gradlew clean build

 

이 과정이 끝나면 build/libs 라는 폴더 안에 ~-0.0.1-SNAPSHOT.jar 라는 도시락이 생깁니다.

 

이제 도커 설명서를 만들어보겠습니다.

# 1. 베이스 이미지 (자바 17 버전이 깔린 리눅스 컴퓨터를 가져와)
FROM openjdk:17-jdk

# 2. 내 도시락(jar 파일)을 컨테이너 안으로 복사해
# (build/libs 폴더 안에 있는 jar 파일을 app.jar라는 이름으로 복사함)
COPY build/libs/*.jar app.jar

# 3. 컨테이너가 켜지면 바로 이 명령어를 실행해 (자바 실행)
ENTRYPOINT ["java", "-jar", "app.jar"]

 

마지막으로 도커 이미지를 구워야합니다.

 

설명서(Dockerfile)와 도시락(.jar)이 준비됐으니, 이제 진짜 도커 이미지(밀키트)를 만들어야합니다.

 

위 도커 설명서 기준으로 이미지를 만들라고 했으나 오류가 발생했습니다.

도커 허브라는 파일 서버에서 해당 파일이 삭제되었거나 경로가 없어져 발생한 오류라고 합니다.

따라서 현재 파일이 존재하고 AWS에서도 밀어주는 아마존 코레토 이미지로 재료를 변경해보겠습니다.

# 1. 베이스 이미지 (아마존에서 만든 자바 17 버전 사용 - 훨씬 안정적!)
FROM amazoncorretto:17

# 2. 내 도시락(jar 파일)을 컨테이너 안으로 복사해
# (build/libs 폴더 안에 있는 jar 파일을 app.jar라는 이름으로 복사함)
COPY build/libs/*.jar app.jar

# 3. 컨테이너가 켜지면 바로 이 명령어를 실행해 (자바 실행)
ENTRYPOINT ["java", "-jar", "app.jar"]

 

이제 도커 이미지가 생성되었습니다.

이제 이 도커 이미지를 AWS 서버로 옮겨야합니다!

 

가장 표준적인 방법은 도커 허브라는 저장소를 거쳐가는 것입니다.

맥북 -> 업로드 -> 도커 허브 -> 다운로드 -> AWS 서버

# 1. docker 로그인
docker login

# 2. 이미지 이름 변경
# 도커 허브에 올리려면 규칙에 맞는 이름표를 다시 붙여야함
# 예: docker tag jadu-server user123/jadu-server
docker tag jadu-server [본인아이디]/jadu-server

# 3. 이미지 업로드
# 도커 허브로 파일을 전송
# 예: docker push user123/jadu-server
docker push [본인아이디]/jadu-server

 

이제 AWS 서버 접속해서 도커 허브로부터 pull 받아오면 반영됩니다!

# 1. 도커 허브로부터 이미지 pull
docker pull [본인아이디]/jadu-server

# 2. 서버 실행하기
# 가져온 이미지를 실행합니다.
# -d : 백그라운드 실행 (서버 켜놓고 집에 가도 안 꺼짐)
# -p 80:8080 : 밖에서 들어오면 안쪽으로 연결해줘
# --Name my-server : 켜진 서버 일므을 my-server라고 부르겠다.
docker run -d -p 80:8080 --name my-server 0206dus/making-money

# 3. 최종확인
http://고정IP

 

docker run 명령어 실행하니 오류가 발생했습니다 ㅜ

알고보니 맥북은 ARM 칩을 쓰고 AWS 서버는 Inter/AMD 칩을 써서 발생하는 문제였네요..

 

WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64/v4) and no specific platform was requested

그래서 아래 방식으로 번역해서 다시 보내줘야합니다.

# 1. 맥북 호환 모드로 다시 빌드하기
# [본인아이디]는 아까 그 영어 아이디!
docker build --platform linux/amd64 -t [본인아이디]/[프로젝트명]

# 2. 다시 업로드
# [본인아이디]는 아까 그 영어 아이디!
docker build --platform linux/amd64 -t [본인아이디]/[프로젝트명] .

# 3. 기존 찌꺼기 청소
# 돌다 죽은 컨테이너 강제 삭제
docker rm -f my-server

# 잘못 받아온 이미지 삭제
docker rmi [본인아이디]/[프로젝트명]

# 4. 
# 다시 다운로드 (새 버전 받아옴)
docker pull [본인아이디]/[프로젝트명]

# 실행 (아까랑 명령어 같음)
docker run -d -p 80:8080 --name my-server [본인아이디]/[프로젝트명]

 

고정 IP로 들어가니까 로컬에서 띄웠던 페이지가 뜹니다!! 


[개념정리]

개발은 항상 코딩 -> 컴파일 -> 빌드 -> 배포 순서로 진행됩니다.

컴파일 : 자바 컴파일러가 진행 (JDK 안에 들어있는 프로그램)

             java -> class 파일로 바꿔!

빌드 : Gradle이 진행

          빌드라는 큰 과정 안에 컴파일 과정이 포함되어 있음

 

- 빌드

코드를 실행 가능한 프로그램 파일 하나로 만드는 과정

 

- Gradle (그레이들) 

인터넷에서 필요한 재료(라이브러리) 다운받아오고 > 의존성 관리

코드를 번역하고 > 컴파일

테스트 돌려보고 > 테스트

결과물을 만듭니다 > 빌드