Dokcer JDK 基础镜像

2022-12-20 146点热度 1人点赞 0条评论

最近在项目上遇到了一个奇怪的问题,使用之前的jdk镜像时总数莫名其妙的出现问题,索性自己编译一个生产用的基础镜像。

创建镜像

创建的镜像本着最小化的原则,那当然是选择Alpine了,再者就是选择相应的JDK了,以前一直使用的是adoptopenjdk的包,但今天看到这个组织已经换到了新的地方。新的名字居然是eclipse-temurin

DEPRECATION NOTICE

This image is officially deprecated in favor of the eclipse-temurin image, and will receive no further updates after 2021-08-01 (Aug 01, 2021). Please adjust your usage accordingly.

本着简单高效的方式,这里就直接From了eclipse-temurin的jdk8版本,更多的版本可以在这里去寻找:eclipse-temurin local

错误

使用eclipse-temurin的JDK导致字体一直报错,索性用回adoptopenjdk/openjdk8-openj9

FROM adoptopenjdk/openjdk8-openj9:alpine-slim

LABEL maintainer="Jalena jalena@bcsytv.com"

RUN mv /usr/glibc-compat/lib/ld-linux-x86-64.so.2 /usr/glibc-compat/lib/ld-linux-x86-64.so && \
    ln -s /usr/glibc-compat/lib/ld-linux-x86-64.so /usr/glibc-compat/lib/ld-linux-x86-64.so.2

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
    apk --no-cache --update add tzdata fontconfig ttf-dejavu && \
    fc-cache --force && \
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone

COPY ./font /usr/share/fonts/win/

这里只是安装了部分可能在运维时需要的包,同时拷贝了Windows 10下的宋体、新宋体以及微软雅黑字体到容器中。若需要更多的字体可以在C:\Windows\Fonts目录下寻找并Copy进容器。

包含的字体:

  • /usr/local/share/fonts/win/simsun.ttc: NSimSun,新宋体:style=Regular,常规
  • /usr/local/share/fonts/win/simhei.ttf: SimHei,黑体:style=Regular,Normal...
  • /usr/local/share/fonts/win/simsun.ttc: SimSun,宋体:style=Regular,常规
  • /usr/local/share/fonts/win/msyh.ttc: Microsoft YaHei,微软雅黑:style=Regular,Norma...
  • /usr/local/share/fonts/win/msyhbd.ttc: Microsoft YaHei,微软雅黑:style=Bold...
  • /usr/local/share/fonts/win/msyhl.ttc: Microsoft YaHei UI:style=Light,Regular
  • /usr/local/share/fonts/win/msyhbd.ttc: Microsoft YaHei UI:style=Bold
  • /usr/local/share/fonts/win/msyhl.ttc: Microsoft YaHei,微软雅黑Light:style=Light,Regular
  • /usr/local/share/fonts/win/msyh.ttc: Microsoft YaHei UI:style=Regular,Normal

编译镜像

docker build --no-cache -t 8-jdk-alpine-cn .

测试

# 测试容器字体是否安装成功
docker run --rm -it 8-jdk-alpine-cn fc-list

# 查看容器内中文字体
docker run --rm -it 8-jdk-alpine-cn fc-list :lang=zh

推送hub

# 登录
docker login

# 为镜像打tag
docker tag 8-jdk-alpine-cn:latest jalena/8-jdk-alpine-cn

# 推送
docker push jalena/8-jdk-alpine-cn

使用镜像

镜像已经推送到中央仓库,可以直接拉取s使用。

docker pull jalena/8-jdk-alpine-cn:latest

这里给一个我在项目中的示例

FROM jalena/8-jdk-alpine-cn:latest

LABEL maintainer="Jalena jalena@bcsytv.com"

RUN mkdir -p /blade/pda
WORKDIR /blade/pda

EXPOSE 8200

ADD ./target/blade-pda.jar ./app.jar

ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]

CMD ["--spring.profiles.active=test"]

Jalena

原创内容,转载请注明出处! 部分内容来自网络,请遵守法律适用!

文章评论