alpine+jre10/jre8 (非openjdk)成功构建

1 篇文章 0 订阅
1 篇文章 0 订阅

-------------------------------------------------2018.11.11日更新:-------------------------------------------------------

如果构建过程中在运行run那一堆安装的时候总是失败,可以先把copy java的部分去掉,并且Dockfile文件所在文件夹下其他文件全部移出去,先构建一个基础的java运行环境镜像会快一些,然后再以此为基础构建java镜像

-------------------------------------------------------------------------------------------------------------------------------

jre10 百度云盘:https://pan.baidu.com/s/1859U0DMvtZaV4fngPyp9zQ  

jre8百度云盘:https://pan.baidu.com/s/1pTj97VXlTFu6e7rW9yPj1g 

个人构建过程如下,最后都成功了。

alpine + java 8

docker file 如下

FROM alpine
#构建人联系方式*************************************************
MAINTAINER ** ***@qq.com

#定义工作目录,个人理解就是用来存放自己资源的文件夹******************
#WORKDIR /usr/local

#COPY复制当前文件夹到镜像中的特定位置
#COPY语法:
#COPY ["<src>",... "<dest>"]  (推荐)特别适合路径中带有空格的情况
#COPY <src>... <dest>
#ADD 还支持通过URL从远程服务器读取资源并复制到镜像中
#语法
#ADD ["<src>",... "<dest>"],特别适合路径中带有空格的情况
#ADD <src>... <dest>,特别适合路径中带有空格的情况
#COPY指令和ADD指令的用法非常相似,具体注意事项如下:
#源路径可以有多个
#源路径是相对于执行build的相对路径
#源路径如果是本地路径,必须是build上下文中的路径
#源路径如果是一个目录,则该目录下的所有内容都将被加入到容器,但是该目录本身不会
#目标路径必须是绝对路径,或相对于WORKDIR的相对路径
#目标路径如果不存在,则会创建相应的完整路径
#目标路径如果不是一个文件,则必须使用/结束
#路径中可以使用通配符
#满足同等功能的情况下,推荐使用COPY指令。ADD指令更擅长读取本地tar文件并解压缩
#无论是COPY还是ADD,源如果时候文件夹,则文件夹下面的所有内容都被加入到容器
#注意是文件夹下面的内容,不包括文件夹

#把当前的jre1.8.0_192(解压后) 加入到/app文件夹下*******************************
COPY ["jre1.8.0_192","/usr/local/jre1.8.0_192"]

#****************** 安装gclib ;解决时区问题 ***********************
#RUN在镜像中运行命令,必须是基础镜像识别的命令
#Java是基于GUN Standard C library(glibc),Alpine是基于MUSL libc(mini libc)  ,需要安装gclib库
#截止到目前最稳定的版本是2.28

RUN apk --no-cache add ca-certificates wget && \
    wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && \
    wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.28-r0/glibc-2.28-r0.apk && \
    apk add glibc-2.28-r0.apk && \
  
#解决时区错乱的问题*******************************************************    
    apk update && \
    apk add --no-cache ca-certificates && \
    apk add --no-cache curl bash tree tzdata && \
    cp -rf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime


#******************设置JAVA变量环境**********************************
ENV JAVA_HOME /usr/local/jre1.8.0_192
ENV PATH ${JAVA_HOME}/bin:${PATH}

#****************** 运行命令 ***************************************
#执行docker run的时候会执行CMD指令描述的命令 
#一个Dockerfile仅仅最后一个CMD起作用
CMD ["java","-version"] 





构建:docker build -t alpine-jre8 .

执行:docker run <imageId> 

就会看到java版本下信息输出了

------------------------------------------------------以下构建jre10镜像------------------------------------------------------

构建alpine+jre10  (成功)

实际构建产生一个问题

只是安装glibc还不行,运行还是会报错:java: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory

百度上一个做的也没有,google看到这篇 https://github.com/AdoptOpenJDK/openjdk-docker 

最后看结果:

dockfile如下

FROM alpine
#构建人联系方式*************************************************
MAINTAINER art 305343159@qq.com

#定义工作目录,个人理解就是用来存放自己资源的文件夹******************
#WORKDIR /usr/local

#COPY复制当前文件夹到镜像中的特定位置
#COPY语法:
#COPY ["<src>",... "<dest>"]  (推荐)特别适合路径中带有空格的情况
#COPY <src>... <dest>
#ADD 还支持通过URL从远程服务器读取资源并复制到镜像中
#语法
#ADD ["<src>",... "<dest>"],特别适合路径中带有空格的情况
#ADD <src>... <dest>,特别适合路径中带有空格的情况
#COPY指令和ADD指令的用法非常相似,具体注意事项如下:
#源路径可以有多个
#源路径是相对于执行build的相对路径
#源路径如果是本地路径,必须是build上下文中的路径
#源路径如果是一个目录,则该目录下的所有内容都将被加入到容器,但是该目录本身不会
#目标路径必须是绝对路径,或相对于WORKDIR的相对路径
#目标路径如果不存在,则会创建相应的完整路径
#目标路径如果不是一个文件,则必须使用/结束
#路径中可以使用通配符
#满足同等功能的情况下,推荐使用COPY指令。ADD指令更擅长读取本地tar文件并解压缩
#无论是COPY还是ADD,源如果时候文件夹,则文件夹下面的所有内容都被加入到容器
#注意是文件夹下面的内容,不包括文件夹

#把当前的jre-10.0.1加入到/app文件夹下*******************************
COPY ["jre-10.0.1","/usr/local/jre-10.0.1"]

#****************** 安装gclib ;解决时区问题 ***********************
#RUN在镜像中运行命令,必须是基础镜像识别的命令
#例:安装  requirements.txt 中列出来的需要的软件
# RUN pip install --trusted-host pypi.python.org -r requirements.txt
#Java是基于GUN Standard C library(glibc),Alpine是基于MUSL libc(mini libc)  ,需要安装gclib库
#安装java基本依赖库
RUN apk --update add --no-cache ca-certificates curl openssl binutils xz \
    && GLIBC_VER="2.28-r0" \
    && ALPINE_GLIBC_REPO="https://github.com/sgerrand/alpine-pkg-glibc/releases/download" \
    && GCC_LIBS_URL="https://archive.archlinux.org/packages/g/gcc-libs/gcc-libs-8.2.1%2B20180831-1-x86_64.pkg.tar.xz" \
    && GCC_LIBS_SHA256=e4b39fb1f5957c5aab5c2ce0c46e03d30426f3b94b9992b009d417ff2d56af4d \
    && ZLIB_URL="https://archive.archlinux.org/packages/z/zlib/zlib-1%3A1.2.9-1-x86_64.pkg.tar.xz" \
    && ZLIB_SHA256=bb0959c08c1735de27abf01440a6f8a17c5c51e61c3b4c707e988c906d3b7f67 \
    && curl -Ls https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub -o /etc/apk/keys/sgerrand.rsa.pub \
    && 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 "${GCC_LIBS_SHA256}  /tmp/gcc-libs.tar.xz" | 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 "${ZLIB_SHA256}  /tmp/libz.tar.xz" | 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 /var/cache/apk/* && \    
#设置镜像中时区为Shanghai*******************************************************    
    apk update && \
    apk add --no-cache ca-certificates && \
    apk add --no-cache curl bash tree tzdata && \
    cp -rf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#******************设置JAVA变量环境**********************************
ENV JAVA_HOME /usr/local/jre-10.0.1
ENV PATH ${JAVA_HOME}/bin:${PATH}

#****************** 运行命令 ***************************************
#执行docker run的时候会执行CMD指令描述的命令 
#一个Dockerfile仅仅最后一个CMD起作用
CMD ["java","-version"] 





docker run 97b0593e70cf

 

至于瘦身之类的做法自己在研究吧,交流qq:305343159

建议:尽量搞定梯子,不然很多问题搞死你也找不到解决方法,靠百度只能呵呵

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值