SpringBoot 2.3.0.M1 으로 Docker 이미 지 를 만 드 는 방법 에 대한 자세 한 설명
7155 단어 SpringBootDocker이미지
SpringBoot 2.3.0.M1 이 방금 발표 되 었 습 니 다.재 미 있 는 새로운 기능 을 가 져 왔 습 니 다.SpringBoot 프로그램 을 Docker 이미지 에 포장 하 는 데 도움 을 줄 수 있 습 니 다.이 블 로그 글 에 서 는 Docker 이미 지 를 만 드 는 전형 적 인 방식 을 살 펴 보고 새로운 기능 을 사용 하여 미 러 를 개선 하 는 방법 을 보 여 줍 니 다.
2.설명
SpringBoot 2.3.0.M1 은 당분간 Windows 를 지원 하지 않 습 니 다.매우 취약 합 니 다.
잠시 Mac 과 Linux 에서 잘 작 동 합 니 다.
3.흔히 볼 수 있 는 Docker 실행 방식
일반적으로 docker 를 통 해 springboot 을 실행 하 는 것 은 이 렇 습 니 다.
FROM openjdk:8-jdk-alpine
EXPOSE 8080
ARG JAR_FILE=target/my-application.jar
ADD ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
4.일반적인 방식 으로 docker 를 통 해 springboot 를 실행 하 는 데 존재 하 는 문제점일반적인 방식 이 안 된다 는 것 이 아니 라,그 가 개선 할 수 있 는 부분 이 있다.
1.jar 를 실행 할 때 jar 를 압축 을 풀 지 않 고 직접 실행 합 니 다.이것 은 추가 비용 을 초래 할 수 있 습 니 다.그래서 압축 되 지 않 은 형식 으로 실행 하 는 것 이 좋 습 니 다.
2.코드 를 계속 바 꾸 고 다시 실행 해 야 하기 때문에 위의 코드 는 그다지 좋 지 않 습 니 다.의존 을 수정 하거나 업그레이드 에 의존 하 는 작업 을 하지 않 기 때문에 코드 를 바 꾸 고 업무 변화 에 적응 하 는 것 입 니 다.그래서 한 층 으로 나 누 는 것 이 좋 습 니 다.그러면 구축 속도 가 빨 라 집 니 다.
5.일반적인 방식 의 부족 을 어떻게 해결 합 니까?
spring 은 두 가지 기술 을 제공 합 니 다.
1、buildpack
2.레이 어 링 jar
만약 에 CloudFoundry 나 Heroku 와 같은 응용 프로그램 플랫폼 을 사용 한 적 이 있다 면 buildpack 을 사 용 했 을 수도 있 고 BuildPack 플랫폼 의 일부분 임 을 의식 하지 못 했 을 수도 있 습 니 다.응용 프로그램 을 플랫폼 에서 실제 실행 할 수 있 는 것 으로 바 꾸 었 을 수도 있 습 니 다.예 를 들 어 클 라 우 드 Foundry 의 자바 buildpack 은.jar 파일 을 만 들 고 있 는 것 을 알 고 JRE 를 자동 으로 추가 합 니 다.
최근 에는 spring 이 클 라 우 드 로 컬 구축 가방 의 속박 에서 벗 어 나 독립 적 으로 사용 할 수 없 는 이 물건 을 언제 어디서나 docker 와 호 환 되 는 docker 미 러 를 구축 할 수 있 게 되 었 습 니 다.
6,도대체 어떻게 구축
Maven 방식
1.가방 하 나 를 다운로드 한 후 압축 해제
$ curl https://start.spring.io/starter.zip -d bootVersion=2.3.0.M1 -d dependencies=web -o demo.zip
$ unzip demo.zip
2.그 다음 에 미 러 를 구축 하면 되 지만 로 컬 에 docker 가 설치 되 어 있 는 지 확인 해 야 합 니 다.
./mvnw spring-boot:build-image
3.당신 은 이런 일 지 를 볼 수 있 습 니 다.
[INFO] Building image 'docker.io/library/demo:0.0.1-SNAPSHOT'
[INFO]
[INFO] > Pulling builder image 'docker.io/cloudfoundry/cnb:0.0.43-bionic' 100%
[INFO] > Pulled builder image 'cloudfoundry/cnb@sha256:c983fb9602a7fb95b07d35ef432c04ad61ae8458263e7fb4ce62ca10de367c3b'
[INFO] > Pulling run image 'docker.io/cloudfoundry/run:base-cnb' 100%
[INFO] > Pulled run image 'cloudfoundry/run@sha256:ba9998ae4bb32ab43a7966c537aa1be153092ab0c7536eeef63bcd6336cbd0db'
[INFO] > Executing lifecycle version v0.5.0
[INFO] > Using build cache volume 'pack-cache-5cbe5692dbc4.build'
[INFO]
[INFO] > Running detector
[INFO] [detector] 6 of 13 buildpacks participating
...
[INFO]
[INFO] > Running restorer
[INFO] [restorer] Restoring cached layer 'org.cloudfoundry.openjdk:2f08c469c9a8adea1b6ee3444ba2a8242a7e99d87976a077faf037a9eb7f884b'
...
[INFO]
[INFO] > Running cacher
[INFO] [cacher] Reusing layer 'org.cloudfoundry.openjdk:2f08c469c9a8adea1b6ee3444ba2a8242a7e99d87976a077faf037a9eb7f884b'
[INFO] [cacher] Reusing layer 'org.cloudfoundry.jvmapplication:executable-jar'
[INFO] [cacher] Caching layer 'org.cloudfoundry.springboot:spring-boot'
[INFO] [cacher] Reusing layer 'org.cloudfoundry.springautoreconfiguration:46ab131165317d91fd4ad3186abf755222744e2d277dc413def06f3ad45ab150'
[INFO]
[INFO] Successfully built image 'docker.io/library/demo:0.0.1-SNAPSHOT'
4.docker 로 이 미 러 를 실행 합 니 다.
docker run -it -p8080:8080 demo:0.0.1-SNAPSHOT
7.층 을 나눈다SpringBoot 가 제공 하 는 내장 지원 은 내장 패 키 지 를 사용 하기 시작 하 는 데 좋 은 방법 을 제공 합 니 다.buildpack 플랫폼 규범 의 실현 이기 때문에 더욱 강력 한 buildpack 도구 로 쉽게 이전 할 수 있 습 니 다.
가장 기본 적 인 springboot 의 jar 파일 내부 형식
META-INF/
MANIFEST.MF
org/
springframework/
boot/
loader/
...
BOOT-INF/
classes/
...
lib/
...
3 층 으로 나 뉘 었 습 니 다.하 나 는 로 딩 파일 을 유도 하 는 것 입 니 다.하 나 는 class 실행 파일 이 고 하 나 는 의존 관계 입 니 다.하지만 분 층 구조의 jar 는 이런 구조 일 수 있 습 니 다.
META-INF/
MANIFEST.MF
org/
springframework/
boot/
loader/
...
BOOT-INF/
layers/
<name>/
classes/
...
lib/
...
<name>/
classes/
...
lib/
...
layers.idx
그 는 lib 를 분 리 된 독립 된 층 에 넣 지 않 고 함께 넣 은 후에 몇 층 으로 나 누 었 다.그리고 idx 파일 이 하나 더 생 겼 습 니 다.이 파일 에는 층 을 추가 하 는 순서 가 있 습 니 다.
처음에는 이렇게 층 이 나 뉘 어 모두 네 개 였 다.
1.dependencies(정기 적 으로 발표 하 는 의존 항목)
2.snapshot-dependencies(스냅 샷 의존 항목 에 사용)
3.resources(정적 자원 에 사용)
4.application(응용 프로그램 클래스 와 자원 에 적용)
이러한 층 을 나 누 는 것 은 근거 입 니 다.코드 의 가능 한 변경 에 따라 코드 를 분리 하 는 것 입 니 다.일반적으로 의존 항목 은 변경 할 수 없 기 때문에 그 는 독립 된 층 안에 두 었 습 니 다.
8.레이 어 링 형식의 dockerfile 을 씁 니 다.
우선 프로젝트 의 POM 파일 에 지원 을 추가 해 야 합 니 다.
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layout>LAYERED_JAR</layout>
</configuration>
</plugin>
</plugins>
</build>
jarmode 는 특수 한 시스템 속성 입 니 다.JAR 을 시작 할 때 설정 할 수 있 습 니 다.프로그램 과 전혀 다른 것 을 실행 하도록 유도 합 니 다.추출 층이렇게 하면 layertools 모드 를 실행 할 수 있 습 니 다.
java -Djarmode=layertools -jar my-app.jar
프로젝트 가 다 되 었 으 니 다시 컴 파일 하여 포장 하 세 요.
mvn clean package
포장 이 다 되 었 으 니 테스트 해 보 자.
java -Djarmode=layertools -jar target/demo-0.0.1-SNAPSHOT.jar list
그 가 몇 층 을 수출 한 것 을 볼 수 있다.
dependencies
snapshot-dependencies
resources
application
우 리 는 지금 dockerfile 을 써 서 이 몇 층 을 추출 하고 복사 해서 미 러 를 구축 합 니 다.
FROM adoptopenjdk:11-jre-hotspot as builder
WORKDIR application
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} application.jar
RUN java -Djarmode=layertools -jar application.jar extract
FROM adoptopenjdk:11-jre-hotspot
WORKDIR application
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/snapshot-dependencies/ ./
COPY --from=builder application/resources/ ./
COPY --from=builder application/application/ ./
ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]
이것 은 여러 단계 의 docker 파일 입 니 다.그 는 builder 에서 필요 한 파일 을 추출 했 습 니 다.바로 앞에서 우리 가 뜯 어 낸 네 개의 층 입 니 다.다 넣 어 줘.그리고 저희 가 구축 을 시작 하 겠 습 니 다.
docker build . --tag demo
구축 이 끝나 면 우 리 는 그 를 한 번 도망 갈 것 이다.
docker run -it -p8080:8080 demo:latest
SpringBoot 2.3.0.M1 로 Docker 이미 지 를 만 드 는 방법 에 대한 자세 한 설명 은 여기까지 입 니 다.SpringBoot 2.3.0.M1 로 Docker 이미 지 를 만 드 는 방법 에 대한 자세 한 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Java・SpringBoot・Thymeleaf】 에러 메세지를 구현(SpringBoot 어플리케이션 실천편 3)로그인하여 사용자 목록을 표시하는 응용 프로그램을 만들고, Spring에서의 개발에 대해 공부하겠습니다 🌟 마지막 데이터 바인딩에 계속 바인딩 실패 시 오류 메시지를 구현합니다. 마지막 기사🌟 src/main/res...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.