본문 바로가기
프로젝트/낙낙(KnockKnock)

배포를 해볼까-4

by 티코딩 2023. 7. 18.

어제 멘탈을 깨먹고 오늘 다시 새로운 멘탈을 갈아끼고 돌아왔다.

나는 언제나 그랬듯.. 방법을 찾을것이다.

어제 나는 .gitignore에서 build 폴더 안에 있는 libs 폴더를 제외시키려고 했다.

분명히 gpt가 된다했다. 하지만. 수많은 추궁 끝에 부분적으로 제외시키는방법은 없다고 했다.

이젠 gpt가하는말은 되도록이면 신뢰하지 않을것이다. 알못새끼

그럼 이제 다른방법을 찾아봐야겠다.

내가 여지껏 작성한 dockerfile은

# 베이스 이미지 설정
FROM ubuntu:latest

# 변수 설정(빌드파일의 경로)
ARG JAR_FILE=build/libs/*.jar

# 애플리케이션 파일 복사
COPY ${JAR_FILE} app.jar

# x86_64 아키텍처용 OpenJDK 설치
RUN apt-get update && apt-get install -y openjdk-11-jdk

#jar파일 실행
ENTRYPOINT ["java", "-jar", "/app.jar"]

buile/libs 경로에 jar 파일이있는데 build 폴더는 .gitignore로 지정되어있어, 아무리 git push해도 jar파일을 찾을 수 없었다.

그래서 다른 블로그를 찾아봤다.

맨아래 참고한 블로그를 보면 작성자분은 dockerfile을 아래와 같이 작성하셨다.

FROM gradle:7.4-jdk11-slim as builder
WORKDIR /build

# 그래들 파일이 변경되었을 때만 새롭게 의존패키지 다운로드 받게함.
COPY build.gradle settings.gradle /build/
RUN gradle build -x test --parallel --continue > /dev/null 2>&1 || true

# 빌더 이미지에서 애플리케이션 빌드
COPY . /build
RUN gradle build -x test --parallel

# APP
FROM openjdk:11.0-slim
WORKDIR /app

# 빌더 이미지에서 jar 파일만 복사
COPY --from=builder /build/build/libs/<생성된 jar 파일명>.jar .

EXPOSE 8080

# root 대신 nobody 권한으로 실행
USER nobody
ENTRYPOINT [ \                                               
   "java", \                                                
   "-jar", \                                                
   "-Djava.security.egd=file:/dev/./urandom", \              
   "-Dsun.net.inetaddr.ttl=0", \                            
   "<생성된 jar 파일명>.jar" \             
]

이렇게 수정하고, 다시 git에 push 하고, EC2에서 클론 받았다.
dockerfile이 있는 위치로 가서 docker build -t <프로젝트명> .
명령어를 입력했는데

이렇게 오류가 떴다.

대체 언제쯤 제대로 되는지 모르겠다.

문제는 FROM 문에서 내가 FROM gradle:7.4-jdk11-slim as builder
이렇게 했는데, 블로그에선 alpine이었는데 혹시 몰라서 또 지피티한테 물어봤다가 slim으로 바꿨는데 그것때문에 안되던거였다.
그냥 블로그 믿을걸..alpine으로 수정하고 build를 성공했다.

knockknock:latest로 만들어진걸 확인할 수 있다. 그런데 궁금한건, 저 <none>들이다. 저게 왜 생긴지 모르겠다. 생겨도 되는건지 모르겠다.

다음단계는 프로젝트를 실행하는건데, 

docker run -p <입력포트>:<출력포트> -d <프로젝트이름>

docker ps -a 명령어를 입력해 실행중인 모든 컨테이너를 볼 수 있다.

오우예 석세스! 실행중인걸 확인할 수 있다.

오늘은 기분이 좋아서 여기까지 하겠다. 룰루랄라

다음편에 계속~

 

 

 

 

참고한 블로그

https://chb2005.tistory.com/189

 

[AWS] EC2 인스턴스에 Docker 설치 및 프로젝트 배포 + 배포 중지

개념 정리 Docker 란? Docker : 컨테이너 기반의 오픈소스 가상화 플랫폼 Container 란? 컨테이너는 독립된 가상 공간에서 프로세스가 동작하는 기술 하나의 서버에 여러개의 컨테이너를 띄울 수 있음

chb2005.tistory.com

 

'프로젝트 > 낙낙(KnockKnock)' 카테고리의 다른 글

배포를 해볼까-6  (0) 2023.07.24
배포를 해볼까-5  (0) 2023.07.21
배포를 해볼까-3  (0) 2023.07.17
배포를 해볼까-2  (0) 2023.07.14
배포를 해볼까-1  (0) 2023.07.14