目录

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/

docker环境 vscode docker环境下增加字体_docker


选择linux的x64版本,此处需要登陆才能下载,最后将下载的包上传到服务器上

docker环境 vscode docker环境下增加字体_java_02

需要用到的字体

此例以windows自带的楷体楷体为例

打开目录:C:\Windows\Fonts,找到楷体,上传到服务器

docker环境 vscode docker环境下增加字体_docker环境 vscode_03

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环境 vscode docker环境下增加字体_docker环境 vscode_04


镜像打包命令:

docker build -t java_chinese:jdk-8u331 .打包完成日志如下:

docker环境 vscode docker环境下增加字体_java_05

2.4 验证

镜像制作完成后,可以通过创建临时测试容器的方式来验证java服务及字体语言环境是否配置成功

首先创建测试容器,命令如下:

docker run -it --name test java_chinese:jdk-8u331

注意:容器创建完成后会直接进入容器内部,如果退出容器,容器是会自动停止的,因为打包容器镜像时,没有要求执行任何操作

创建容器后,在容器中查询系统语言环境是否配置生效(中文编码:zh_CN.UTF8):

locale

docker环境 vscode docker环境下增加字体_运维_06

查询自定义字体(此处为楷体)是否拷贝成功:

fc-list

docker环境 vscode docker环境下增加字体_docker_07

查询java环境是否配置成功:

java -version

docker环境 vscode docker环境下增加字体_docker_08

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环境 vscode docker环境下增加字体_运维_09

打包镜像命令:

docker build -t java_chinese:openjdk-8u332 .

docker环境 vscode docker环境下增加字体_docker_10

3.3 验证

同之前一样,创建测试容器验证镜像环境是否配置成功,启动容器命令如下:

docker run -it --name test1 java_chinese:openjdk-8u332

查询系统语言环境是否配置为中文(中文编码:zh_CN.utf8):

locale

docker环境 vscode docker环境下增加字体_docker_11

查询字体是否拷贝成功:

fc-list

docker环境 vscode docker环境下增加字体_linux_12

java环境验证:

docker环境 vscode docker环境下增加字体_docker环境 vscode_13

4、镜像包大小比较

 打包过程相差不大,最后查询一下镜像大小,大小有一定的差距,明显使用openjdk的镜像要比使用centos7的镜像小,这个主要是java使用的包不同导致的,对java没有特殊需求的,建议使用openjdk的打包方式

docker环境 vscode docker环境下增加字体_linux_14

说明:因为centos上传的java包是官方的java环境,而openjdk使用的java环境是进行了一定的阉割。因此,使用openjdk制作的镜像包可能会导致有些java程序无法运行,此时可以使用官方的java环境进行自定义打包,或者使用openjdk镜像将运行java程序所却少的依赖包安装上去,重新进行镜像制作即可