https://spring.io/guides/gs/spring-boot-docker/ 에 따르면 하드 코딩 된 이름과 애플리케이션 버전을 사용하여 SpringBoot 애플리케이션 용 Docker 이미지를 만들 수 있습니다. 예를 들면 :
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD gs-spring-boot-docker-0.1.0.jar app.jar
RUN sh -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
그러나 앱의 이름이나 버전을 변경하면 build.gradle 작업에 배치하는 Docker Build 명령이 중단됩니다.
task buildDocker(type: Docker, dependsOn: build) {
push = true
applicationName = jar.baseName
dockerfile = file('src/main/docker/Dockerfile')
doFirst {
copy {
from jar
into stageDir
}
}
}
gradle buildDocker 명령은 앱에서 Dockerfile 및 실행 가능한 Jar를 스테이징하고 "docker build"를 실행하여 이미지를 빌드합니다.
Dockerfile에서 이름이 정적 인 것을 고려할 때 버전을 변경하면 빌드가 손상되지 않도록이 설정을 변경하거나 Docker 이미지를 빌드 할 때 SpringBoot 애플리케이션의 이름을 어떻게 변경할 수 있습니까?
Maven
. 유사한 접근 방식을 Gradle
.docker build -t tests --target builder .
mvn -s settings.xml -Dtest="!*IT,!*IntegrationTest" -P jacoco test
.JAVA_PARAMS
및 JAVA_OPTS
디버깅 아무것도 필요
아래 빌드는 다음을 수행합니다.
#
# Build stage to for building the Jar
#
FROM maven:3.2.5-jdk-8 as builder
MAINTAINER [email protected]
# Only copy the necessary to pull only the dependencies from Intuit's registry
ADD ./pom.xml /opt/server/pom.xml
# As some entries in pom.xml refers to the settings, let's keep it same
ADD ./settings.xml /opt/server/settings.xml
WORKDIR /opt/server/
# Prepare by downloading dependencies
RUN mvn -s settings.xml -B -e -C -T 1C org.apache.maven.plugins:maven-dependency-plugin:3.0.2:go-offline
# Run the full packaging after copying the source
ADD ./src /opt/server/src
RUN mvn -s settings.xml install -P embedded -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -B -e -o -T 1C verify
# Building only this stage can be done with the --target builder switch
# 1. Build: docker build -t config-builder --target builder .
# When running this first stage image, just verify the unit tests
# Overriden them by removing the "!" for integration tests
# 2. docker run --rm -ti config-builder mvn -s settings.xml -Dtest="*IT,*IntegrationTest" test
CMD mvn -s settings.xml -Dtest="!*IT,!*IntegrationTest" -P jacoco test
#
# Build stage with the runtime jar and resources
#
FROM openjdk:8-jre-slim
# Copy from the previous stage
COPY --from=builder /opt/server/target/*.jar /tmp/
# Just rename the built version
RUN mkdir /runtime && \
find /tmp -name "*.jar" ! -name "*sources*" -exec cp -t /runtime {} + && \
mv /runtime/*.jar /runtime/server.jar && \
rm -f /tmp/*.jar
# Port used by the server
EXPOSE 8888
# This is to support HTTPS calls to
RUN apt-get update && apt-get install -y curl ca-certificates
RUN update-ca-certificates && \
mkdir -p /usr/share/ssl/certs && \
chmod 755 /usr/share/ssl/certs
# What to execute on docker run
ENTRYPOINT sh -c "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom \
$JAVA_PARAMS -jar /runtime/server.jar --server.port=8888 $SPRING_BOOT_APP_OPTS"
따라서 테스트 빌드는 다음과 같이 수행 할 수 있습니다.
$ docker build -t generic-dockerfile:tests --target builder .
Sending build context to Docker daemon 16.82MB
Step 1/9 : FROM maven:3.2.5-jdk-8 as builder
---> 95dd59c15f5d
Step 2/9 : MAINTAINER [email protected]
---> Using cache
---> e4edaeb48381
Step 3/9 : ADD ./pom.xml /opt/server/pom.xml
---> Using cache
---> b2d6d834b411
Step 4/9 : ADD ./settings.xml /opt/server/settings.xml
---> Using cache
---> 9b0964db2c9f
Step 5/9 : WORKDIR /opt/server/
---> Using cache
---> 542d0bd9d12f
Step 6/9 : RUN mvn -s settings.xml -B -e -C -T 1C org.apache.maven.plugins:maven-dependency-plugin:3.0.2:go-offline
---> Using cache
---> 3c2d8df6b52e
Step 7/9 : ADD ./src /opt/server/src
---> Using cache
---> 6d48dd3f9f85
Step 8/9 : RUN mvn -s settings.xml install -P embedded -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -B -e -o -T 1C verify
---> Using cache
---> 1c109d2026c4
Step 9/9 : CMD mvn -s settings.xml -Dtest="!*IT,!*IntegrationTest" -P jacoco test
---> Using cache
---> 45eac3094ea4
Successfully built 45eac3094ea4
Successfully tagged generic-dockerfile:tests
그런 다음 테스트를 실행할 수 있습니다.
$ docker run -ti generic-dockerfile:tests
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building spring-cloud-config-server 1.1.6-SNAPSHOT
[INFO] ------------------------------------------------------------------------
평소대로 런타임 이미지를 빌드 할 수 있습니다.
$ docker build -t generic-dockerfile .
done.
done.
Removing intermediate container e632d7c310f7
---> e9391a0ca21d
Step 16/16 : ENTRYPOINT sh -c "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom $JAVA_PARAMS -jar /runtime/server.jar --server.port=8888 $SPRING_BOOT_APP_OPTS"
---> Running in 849ba7ad3212
Removing intermediate container 849ba7ad3212
---> 909354984264
Successfully built 909354984264
Successfully tagged generic-dockerfile:latest
애플리케이션 실행은 다음과 같이 간단합니다.
$ docker run -ti generic-dockerfile
ThisHost: getLocalHost says localHost="c34b2cedbebf/172.17.0.2" isLoopbackAddress=false
2018-04-19T19:15:41,180 3166 | INFO | internal.util.Version.<clinit>#30 ["background-preinit" {}] HV000001: Hibernate Validator 5.2.5.Final
2018-04-19T19:15:41,470 3456 | INFO | factory.annotation.AutowiredAnnotationBeanPostProcessor.<init>#155 ["main" {svr=c34b2cedbebf}] JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다