700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > jdk17运行环境docker镜像制作

jdk17运行环境docker镜像制作

时间:2019-09-14 02:58:00

相关推荐

jdk17运行环境docker镜像制作

在将java应用部署到docker环境的过程中,一个支持运行java程序的镜像是必不可少的。由于oracle授权方面的问题,docker hub 上一般只有基于openjdk的镜像,而且open jdk的镜像不支持字体管理,在使用一些验证码功能时会报错,比如生成验证码功能等。

而且openjdk 的镜像过于庞大,openjdk:17-slim的镜像大小就有407M。基于这些原因,我们可以选择定制一个java运行环境镜像。

jre制作

由于jdk的体积比较大,我们选择jre来作为运行环境,jdk1.8及以前的版本,都是有jre的,但是jdk9以后的版本不在提供jre需要自己制作。

jlink是通过按模块打包的,但是由于目前很多库还不是按模块打包的,所以我们无法知道项目里面都用了那些模块。只好将所有的模块进行打包。这样避免以后出现缺失模块导致应用报错的问题。

下面是windows平台的打包命令

bin\jlink.exe --module-path jmods --add-modules ALL-MODULE-PATH --compress=2 --strip-debug --output jre

linux下,需要将要打包的java配置到系统环境变量中,不然生成不了,会报jlink not find错误

bin/jlink --module-path jmods --add-modules ALL-MODULE-PATH --compress=2 --strip-debug --output jre17

–strip-debug 不打包调式信息 --compress=2 开启2级别压缩,这两项减小生成的文件体积

–add-modules ALL-MODULE-PATH表示所有模块

镜像制作

基于alpine镜像

拉取alpine镜像

docker pull alpine

alpine镜像非常小,只有5.59MB,可以通过docker run -it {iamgeId} sh 运行容器,运行一些简单的命令试试

D:\repo\docker\java>docker run -it c059bfaa849c sh/ # lsbin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var

编写dockerfile

FROM alpine:latestMAINTAINER lin#更换aline源RUN echo "/alpine/latest-stable/community" > /etc/apk/repositoriesRUN echo "/alpine/latest-stable/main" >> /etc/apk/repositories#update apkRUN apk update && apk upgradeRUN apk --no-cache add ca-certificates# bash vim wget curl net-toolsRUN apk add bash bash-doc bash-completionRUN apk add vim wget curl net-toolsRUN rm -rf /var/cache/apk/*RUN /bin/bash#setup glibcRUN wget /sgerrand/alpine-pkg-glibc/releases/download/2.32-r0/glibc-2.32-r0.apkRUN wget /sgerrand/alpine-pkg-glibc/releases/download/2.32-r0/glibc-bin-2.32-r0.apkRUN wget /sgerrand/alpine-pkg-glibc/releases/download/2.32-r0/glibc-i18n-2.32-r0.apkRUN wget /sgerrand/alpine-pkg-glibc/releases/download/2.32-r0/glibc-dev-2.32-r0.apkRUN wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-/sgerrand.rsa.pubRUN apk add glibc-2.32-r0.apkRUN apk add glibc-bin-2.32-r0.apkRUN apk add glibc-dev-2.32-r0.apkRUN apk add glibc-i18n-2.32-r0.apkRUN rm -rf *.apk#setup dateRUN apk add tzdatacp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime#setup language 解决中文乱码RUN /usr/glibc-compat/bin/localedef -i en_US -f UTF-8 en_US.UTF-8ENV LANG=en_US.UTF-8#copy jdk-8u251-linux-x64.tar.gzADD jdk-8u251-linux-x64.tar.gz /usr/local#setup java envENV JAVA_HOME=/usr/local/jdk1.8.0_251ENV PATH=$PATH:.:$JAVA_HOME/binENV CALSSPATH=$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

构建镜像

docker build -t jdk17-orcle-alpine .

总结:由于alpine缺少很多东西,比如glibc,需要安装后才能运行jvm,所以暂时放弃这条路

自己安装glibc比较麻烦,可以使用已经安装好glibc的镜像

#FROM alpine:latestFROM frolvlad/alpine-glibcMAINTAINER linCOPY ./jre17 /usr/local/jre17#setup java envENV JAVA_HOME=/usr/local/jre17ENV PATH=$PATH:$JAVA_HOME/binENV CALSSPATH=$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

该方法构建的镜像体积是比较小,但是启动java应用(基于spring boot)的时候jvm会崩溃,原因不明

基于ubuntu

ubuntu镜像相对来说也不是很大,才70多M

FROM ubuntu:latestMAINTAINER lin#更新软件源RUN apt-get update#安装字体支持RUN apt-get install fontconfig -y#清理缓存RUN apt-get clean#在windows环境下构建,将/usr/share/zoneinfo/Asia/Shanghai拷贝到本地目录COPY ./Shanghai /etc/localtime#setup language 解决中文乱码#设置中文支持ENV LANG C.UTF-8#解压jdk并删除lib目录下的源码COPY ./jre17 /usr/local/jre17#授执行权限RUN chmod -R 750 /usr/local/jre17/bin#setup java envENV JAVA_HOME=/usr/local/jre17ENV PATH=$PATH:$JAVA_HOME/binENV CALSSPATH=$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

构建

docker build -t mydockerhub:5000/jdk17-orcle-ubuntu:jre-17 .

总结:除了需要处理语言问题外,其他都比较顺利,而且结果镜像211MB,比官方提供的小了很多,暂时就这样吧,以后有时间再折腾

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。