Docker容器构建最小JDK基础镜像及中文乱码和时区问题解决

一、准备

  1. 基础镜像使用的是alpine-glibc,因为java依赖glibc
  2. 下载jre,下载地址是https://www.java.com/en/download/manual.jsp,
  3. 上传jre-8u231-linux-x64.tar.gz至服务器

二、制作jre

1、解压jre

   tar -zxvf jre-8u231-linux-x64.tar.gz

2、进入目录

   cd jre1.8.0_231

3、删除文本文件

rm -rf COPYRIGHT LICENSE README release THIRDPARTYLICENSEREADME-JAVAFX.txtTHIRDPARTYLICENSEREADME.txt Welcome.html

4、删除其他无用文件

rm -rf     lib/plugin.jar \
           lib/ext/jfxrt.jar \
           bin/javaws \
           lib/javaws.jar \
           lib/desktop \
           plugin \
           lib/deploy* \
           lib/*javafx* \
           lib/*jfx* \
           lib/amd64/libdecora_sse.so \
           lib/amd64/libprism_*.so \
           lib/amd64/libfxplugins.so \
           lib/amd64/libglass.so \
           lib/amd64/libgstreamer-lite.so \
           lib/amd64/libjavafx*.so \
           lib/amd64/libjfx*.so

 

5、重新打包所有文件

   

tar zcvf ../jre8.tar.gz *

三、创建镜像

1、创建Dockerfile文件

FROM jeanblanchard/alpine-glibc:latest

ADD jre8.tar.gz /usr/local/jdk/

ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8

ENV JAVA_HOME /usr/local/jdk

#ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin

2、构建镜像

docker build -t jre/java8:1.2 .

3、运行

root@hhit-Virtual-Machine:/home/docker_jre1# docker run -it jre/java8:1.2
/ # java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)

四、乱码问题

上面创建的镜像是有问题的,在运用到java项目运行时,日志等中文会乱码的,所以我想把法解决一下。

下载locale-archive文件,下载地址:http://download.csdn.net/download/zhuchuanwan/11970328

locale-archive放在和Dockerfile同一个目录下

修改Dockerfile文件,加入locale-archive,如下:

FROM jeanblanchard/alpine-glibc:latest

ADD locale-archive /usr/glibc-compat/lib/locale/

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone

ADD jre8.tar.gz /usr/local/jdk/

ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8

ENV JAVA_HOME /usr/local/jdk

#ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin

 

五、时区问题

在Dockerfile文件中加入

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ 
    && echo "Asia/Shanghai" > /etc/timezone

最终Dockerfile文件如下:

FROM jeanblanchard/alpine-glibc:latest

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone

ADD jre8.tar.gz /usr/local/jdk/

ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8

ENV JAVA_HOME /usr/local/jdk

#ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin

 

这是我构建的java8镜像,可以直接拿来用

registry.cn-hangzhou.aliyuncs.com/hhit/java8:min

你可能感兴趣的:(linux,ubuntu,docker)