目录
1、简述
2、镜像制作(基于centos7)
2.1 前期准备
java8包
需要用到的字体
2.2 配置Dockerfile文件
2.3 打包镜像
2.4 验证
3、镜像制作(基于openjdk)
3.1 配置Dockerfile文件
3.2 打包镜像
3.3 验证
4、镜像包大小比较
1、简述
一般官方的java镜像都没有中文语言包,不支持中文字体,而有时因项目需求,java程序会调用系统的字体,需要镜像支持自定义中文字体,此时就需要手动将需要的字体打包放进镜像中。以下内容将介绍如何快速制作一个添加自定义字体的java初始环境镜像,介绍方法包含两种制作方式:一种是基于centos的官方镜像进行添加java环境和自定义字体打包java镜像;另外一种方式是通过openjdk的官方java镜像直接添加自定义字体进行打包
2、镜像制作(基于centos7)
2.1 前期准备
此镜像是由centos7为初始镜像制作,因此前期需要准备所需的java8安装包及需要用到的字体(此例是使用windows自带的楷体)
java8包
java官网下载地址:https://www.oracle.com/java/technologies/downloads/
选择linux的x64版本,此处需要登陆才能下载,最后将下载的包上传到服务器上
需要用到的字体
此例以windows自带的楷体楷体为例
打开目录:C:\Windows\Fonts,找到楷体,上传到服务器
2.2 配置Dockerfile文件
先下载需要用到的centos镜像,此处使用的是centos7.9版本,拉去镜像命令如下:
docker pull centos:7.9.2009
创建Dockerfile文件:
FROM centos:7.9.2009
#配置中文语言
RUN yum install kde-l10n-Chinese -y && yum reinstall glibc-common -y && localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
ENV LC_ALL zh_CN.UTF-8
#安装字体管理及新增字体
RUN yum install fontconfig -y
COPY chinese/ /usr/share/fonts/chinese/
RUN chmod -R 755 /usr/share/fonts/chinese && fc-cache -fv
#配置JAVA
ADD jdk-8u331-linux-x64.tar.gz /opt/
ENV JAVA_HOME /opt/jdk1.8.0_331
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib:$JRE_HOME/lib
ENV PATH $PATH:$JAVA_HOME/bin
2.3 打包镜像
进入Dockerfile文件所在目录,查询当前的目录结构如下:
镜像打包命令:
docker build -t java_chinese:jdk-8u331 .打包完成日志如下:
2.4 验证
镜像制作完成后,可以通过创建临时测试容器的方式来验证java服务及字体语言环境是否配置成功
首先创建测试容器,命令如下:
docker run -it --name test java_chinese:jdk-8u331
注意:容器创建完成后会直接进入容器内部,如果退出容器,容器是会自动停止的,因为打包容器镜像时,没有要求执行任何操作
创建容器后,在容器中查询系统语言环境是否配置生效(中文编码:zh_CN.UTF8):
locale
查询自定义字体(此处为楷体)是否拷贝成功:
fc-list
查询java环境是否配置成功:
java -version
3、镜像制作(基于openjdk)
此方法是基于openjdk镜像制作,因此原始镜像中已经存在了java环境,只需要将需要用到的字体打包进镜像中即可,此例是使用windows自带的楷体,将字体上传到服务器的Dockerfile相同目录下即可
3.1 配置Dockerfile文件
提前下载需要用到的openjdk镜像:docker pull openjdk:8u332-jre
创建Dockerfile文件,将字体放入镜像中,文件内容如下:
FROM openjdk:8u332-jre
#配置deb源
RUN echo "a deb http://mirrors.ustc.edu.cn/debian buster main contrib non-free" >> /etc/apt/sources.list \
&& echo "a deb http://mirrors.ustc.edu.cn/debian buster-backports main contrib non-free" >> /etc/apt/sources.list \
&& echo "a deb http://mirrors.ustc.edu.cn/debian buster-proposed-updates main contrib non-free" >> /etc/apt/sources.list \
&& echo "a deb http://mirrors.ustc.edu.cn/debian-security buster/updates main contrib non-free" >> /etc/apt/sources.list \
&& apt-get clean \
&& apt-get update
#配置中文语言
RUN apt-get install locales -y
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
ENV LANG zh_CN.utf8
#安装字体管理及新增字体
COPY chinese/ /usr/share/fonts/chinese/
RUN chmod -R 755 /usr/share/fonts/chinese && fc-cache -fv
3.2 打包镜像
打包镜像前,查询Dockerfile所处目录的目录结构:
打包镜像命令:
docker build -t java_chinese:openjdk-8u332 .
3.3 验证
同之前一样,创建测试容器验证镜像环境是否配置成功,启动容器命令如下:
docker run -it --name test1 java_chinese:openjdk-8u332
查询系统语言环境是否配置为中文(中文编码:zh_CN.utf8):
locale
查询字体是否拷贝成功:
fc-list
java环境验证:
4、镜像包大小比较
打包过程相差不大,最后查询一下镜像大小,大小有一定的差距,明显使用openjdk的镜像要比使用centos7的镜像小,这个主要是java使用的包不同导致的,对java没有特殊需求的,建议使用openjdk的打包方式
说明:因为centos上传的java包是官方的java环境,而openjdk使用的java环境是进行了一定的阉割。因此,使用openjdk制作的镜像包可能会导致有些java程序无法运行,此时可以使用官方的java环境进行自定义打包,或者使用openjdk镜像将运行java程序所却少的依赖包安装上去,重新进行镜像制作即可