본문 바로가기

카카오테크 부트캠프

[KTB]Dockerfile만들기(2) : SpringBoot와 도커를 활용해 배포

이슈는 바로 빌드가 되지 않는 거였습니다. 원래 빌드가 된 후에 만들어진 jar파일로 배포를 하는 것인데 이전 도커파일은 미리 만들어져있는 도커파일을 배포하는 거였어요.

#바꾸기 전 코드
FROM openjdk:21
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

보시면 ARG이게 변수 선언이랑 비슷한 것인데 미리 Jar파일 경로를 적어주었죠! 근데 이 경로를 찾을 수 없어 오류가 자꾸 났어요. 도커 이미지에서 빌드하는 부분까지 넣어줘야 직접 IDE에서 실행시키고 도커 run하는 번거로움을 막을 수 있겠죠? 이러면 바로 docker run 하면 빌드부터 실행까지 가능하거덩요

#바꾼 후
# 1. Build stage
FROM gradle:jdk21 AS build
WORKDIR /app
COPY . .
RUN gradle build --no-daemon

# 2. Run stage
FROM openjdk:21
WORKDIR /app
COPY --from=build /app/build/libs/*.jar app.jar
ENTRYPOINT ["java","-jar","/app/app.jar"]

이렇게 하면 위에 AS build가 미리 빌드를 해준다는 뜻인데 컨테이너의 /app 에 코드 불러와서 빌드해주고? 그다음에 실행을 해주는 것입니다. 이게 로컬 IDE에선 볼 수 없어요 컨테이너 안에서 하는거라 거기로 들어가줘볼게요.

이미 실행되어있기 때문에 exec를 통해 들어가주고 저기 보이는 app 으로 들어가면?

짜라란~~ app.jar을 볼 수 있습니다.

 

 

 

 

일단 로컬에서 했는데 저희는 원격 서버에 해야하잖아요? 도커가 안깔려잇어서 일단 깔아줍니다.

https://docs.docker.com/engine/install/ubuntu/

 

Install Docker Engine on Ubuntu

Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.

docs.docker.com

참고!

sudo apt-get update
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt install docker.io

이렇게 설치해줬습니다.

git clone --branch feature/dockerfile [깃 주소]

저는 혹시 오류가 날 까봐 브랜치로 가져와줘서 이 명령어를 통해 깃 코드를 클론해줬어요.

 

로컬에선 잘 됐느데 

DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
            Install the buildx component to build images with BuildKit:
            https://docs.docker.com/go/buildx/

Sending build context to Docker daemon  195.1kB
Step 1/8 : FROM gradle:jdk21 AS build
 ---> 6879120d1841
Step 2/8 : WORKDIR /app
 ---> Using cache
 ---> 2c053914a7f4
Step 3/8 : COPY . .
 ---> e321b65351e0
Step 4/8 : RUN gradle build --no-daemon
 ---> Running in c01204525c4a
To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to https://docs.gradle.org/8.9/userguide/gradle_daemon.html#sec:disabling_the_daemon in the Gradle documentation.
Daemon will be stopped at the end of the build
> Task :compileJava
> Task :processResources
> Task :classes
> Task :resolveMainClassName
> Task :bootJar
> Task :jar
> Task :assemble
> Task :compileTestJava
> Task :processTestResources NO-SOURCE
> Task :testClasses
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
2024-08-14T08:25:37.978Z  INFO 117 --- [back] [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'

우분투 서버에서는 이런 오류가 나면서 안되더라고요.... 왜그런지 알아보는 중입니다.

그래서 이미지 이름도 안떳요

요딴 식으루... 그래서 알아봤더니 도커파일에서 디렉토리를 정확히 명시하지 않아 그렇다고 하네요

근데 바꿔도 그래요 짜증나 아직도 그래요......

드디어~!!!!!!!!!!!!!!!!!!!!1

진짜 화나는게 바로 도커 버전이 24버전이라 그런거엿습니다 27버전으로 새로 설치했더니 되네요!!!!!!!!!!1

 

ㅠㅠㅠ

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

docker --version
sudo systemctl start docker
sudo systemctl enable docker

이 명령어를 입력해주ㅇ었어요... 도커 겁나 예민하네요ㅡㅡ 이거ㄸ문에 몇시간을 썼는지ㅡㅡㅡ

 

어쨌든 잘 완성 되었습니다 ~~