内容简介:本文介绍使用AdoptOpenJDK的Alpine JDK 11版本,能够将一个SpringBoot应用大小最大化到48M,DockerHub镜像地址:Dockerfile配置如下:
本文介绍使用AdoptOpenJDK的Alpine JDK 11版本,能够将一个SpringBoot应用大小最大化到48M,DockerHub镜像地址: https://hub.docker.com/r/shoutstar/spring-boot-jre-min-11
Dockerfile配置如下:
###########################################################
# spring-boot-jre-min-11
# Custom JRE from AdobtOpenJDK11 <b>for</b> spring-boot
#
###########################################################
FROM adoptopenjdk/openjdk11:alpine AS builder
# create custom jre
RUN jlink \
--module-path=<font>"${JAVA_HOME}/jmods"</font><font> \
--compress=2 \
--add-modules=java.base,java.logging,java.xml,jdk.unsupported,java.sql,java.naming,java.desktop,java.management,java.security.jgss,java.instrument,jdk.charsets \
--no-header-files \
--no-man-pages \
--verbose \
--output=/opt/jre-min
# pull plane alpine
FROM alpine:3.8
ENV JAVA_HOME=</font><font>"/opt/jre-min"</font><font>
ENV PATH=</font><font>"$PATH:/opt/jre-min/bin"</font><font>
ENV JAVA_VERSION=</font><font>"jdk-11.0.1+13"</font><font>
ENV JAVA_TOOL_OPTIONS=</font><font>"-XX:+UseContainerSupport"</font><font>
# add glibc-compat
RUN apk --update add --no-cache ca-certificates curl openssl binutils xz \
&& GLIBC_VER=</font><font>"2.28-r0"</font><font> \
&& ALPINE_GLIBC_REPO=</font><font>"https://github.com/sgerrand/alpine-pkg-glibc/releases/download"</font><font> \
&& GCC_LIBS_URL=</font><font>"https://archive.archlinux.org/packages/g/gcc-libs/gcc-libs-8.2.1%2B20180831-1-x86_64.pkg.tar.xz"</font><font> \
&& GCC_LIBS_SHA256=e4b39fb1f5957c5aab5c2ce0c46e03d30426f3b94b9992b009d417ff2d56af4d \
&& ZLIB_URL=</font><font>"https://archive.archlinux.org/packages/z/zlib/zlib-1%3A1.2.9-1-x86_64.pkg.tar.xz"</font><font> \
&& ZLIB_SHA256=bb0959c08c1735de27abf01440a6f8a17c5c51e61c3b4c707e988c906d3b7f67 \
&& curl -Ls https:</font><font><i>//alpine-pkgs.sgerrand.com/sgerrand.rsa.pub -o /etc/apk/keys/sgerrand.rsa.pub \</i></font><font>
&& curl -Ls ${ALPINE_GLIBC_REPO}/${GLIBC_VER}/glibc-${GLIBC_VER}.apk > /tmp/${GLIBC_VER}.apk \
&& apk add /tmp/${GLIBC_VER}.apk \
&& curl -Ls ${GCC_LIBS_URL} -o /tmp/gcc-libs.tar.xz \
&& echo </font><font>"${GCC_LIBS_SHA256} /tmp/gcc-libs.tar.xz"</font><font> | sha256sum -c - \
&& mkdir /tmp/gcc \
&& tar -xf /tmp/gcc-libs.tar.xz -C /tmp/gcc \
&& mv /tmp/gcc/usr/lib/libgcc* /tmp/gcc/usr/lib/libstdc++* /usr/glibc-compat/lib \
&& strip /usr/glibc-compat/lib/libgcc_s.so.* /usr/glibc-compat/lib/libstdc++.so* \
&& curl -Ls ${ZLIB_URL} -o /tmp/libz.tar.xz \
&& echo </font><font>"${ZLIB_SHA256} /tmp/libz.tar.xz"</font><font> | sha256sum -c - \
&& mkdir /tmp/libz \
&& tar -xf /tmp/libz.tar.xz -C /tmp/libz \
&& mv /tmp/libz/usr/lib/libz.so* /usr/glibc-compat/lib \
&& apk del binutils \
&& rm -rf /tmp/${GLIBC_VER}.apk /tmp/gcc /tmp/gcc-libs.tar.xz /tmp/libz /tmp/libz.tar.xz /<b>var</b>/cache/apk</font><font><i>/*
COPY --from=builder /opt/jre-min /opt/jre-min
</i></font>
使用专门为 Java 应用构建镜像工具:Jib
Jib是Google今年7月发布OSS工具,帮助Java应用程序在使用Maven / Gradle时输出为 Docker 镜像,甚至在注册表中注册。
Jib提供了一种机制,不仅可以自动推送DockerHub,还可以自动推送GCR的GCR和AWS的ECR。这是一个巨大的好处,你可以自动化它而无需编写docker命令,也无需编写Dockerfile 。
在Jib中,您可以在配置中指定from镜像,但无法通过在此镜像上运行上面的jlink来自定义它。因此,如果您希望jlink与自定义JRE一起运行,则需要先创建基本镜像并将其发布到注册表中。
在Jib中,除了PUSH到注册表之外,还支持向本地Docker守护进程注册,创建tar等。
# 推到注册表 $ mvn compile jib:build # 注册到当地Docker守护进程 $ mvn compile jib:dockerBuild # 创建tar $ mvn compile jib:buildTar
设置使用Jav的Maven插件:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>0.10.0</version>
<configuration>
<!-- 方便使用 -->
<allowInsecureRegistries>true</allowInsecureRegistries>
<from>
<!-- 拉轻量级镜像,这是仅在从DockerHub定制JRE -->
<image>shoutstar/spring-boot-jre-min-11</image>
</from>
<to>
<!-- 在构建期间通过-Djib.to.image取代 -->
<image>future/sprinb-boot-app</image>
<!-- 构建时- Djib.to.替换为credHelpr
<credHelper>ecr-login</credHelper>
-->
</to>
<container>
<jvmFlags>
<jvmFlag>-Dadd-opens=java.base/java.lang=ALL-UNNAMED</jvmFlag>
<jvmFlag>-Dadd-opens=java.base/java.lang.invoke=ALL-UNNAMED</jvmFlag>
<jvmFlag>-Dspring.profiles.active=${spring.profiles.active}</jvmFlag>
</jvmFlags>
<!-- 构建时创建镜像的时间 -->
<useCurrentTimestamp>true</useCurrentTimestamp>
</container>
</configuration>
</plugin>
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 八、【Docker笔记】使用Dockerfile创建镜像
- 【自定义】通过Dockerfile创建httpd镜像
- 使用Jib快速简便地创建Docker镜像
- Docker创建MySQL镜像并成功进行远程连接
- docker利用Dockerfile创建镜像,上传docker hub
- 创建优化的 Go 镜像文件以及踩过的坑
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
大数据时代的算法:机器学习、人工智能及其典型实例
刘凡平 / 电子工业出版社 / 2017-1 / 49
《大数据时代的算法:机器学习、人工智能及其典型实例》介绍在互联网行业中经常涉及的算法,包括排序算法、查找算法、资源分配算法、路径分析算法、相似度分析算法,以及与机器学习相关的算法,包括数据分类算法、聚类算法、预测与估算算法、决策算法、关联规则分析算法及推荐算法。《大数据时代的算法:机器学习、人工智能及其典型实例》涉及的相关算法均为解决实际问题中的主流算法,对于工作和学习都有实际参考意义。 《......一起来看看 《大数据时代的算法:机器学习、人工智能及其典型实例》 这本书的介绍吧!