• 基于Linux Alpine 制作 Java 8、11 镜像并支持中文


    Linux Alpine

    1、关于linux alpine 楼主就不多介绍了,在容器化背景下, alpine 非常适合做容器基础镜像 。
    2、有兴趣的同学可以转至官网查看 https://www.alpinelinux.org

    制作Java镜像

    1、楼主这里展示了基于 JDK1.8 和 JDK 11 的镜像制作方式 , 如下为 Dockerfile 文件
    2、楼主这里增加了 glibc 库, 主要是为了解决中文乱码及部分Java工程可能使用的依赖

    FROM alpine:3.15
    CMD ["/bin/sh"]
    MAINTAINER 871364441@qq.com
    # 创建工作目录
    WORKDIR /root
    RUN apk update upgrade
    RUN apk add --no-cache ca-certificates tzdata tree curl tini
    # 安装 glibc 库,主要为了解决中文乱码, 但是有部分java工程可能会依赖. 比如: aws kinesis 等
    COPY locale.md locale.md
    COPY glibc-2.35-r0.apk glibc-2.35-r0.apk
    COPY glibc-bin-2.35-r0.apk glibc-bin-2.35-r0.apk
    COPY glibc-i18n-2.35-r0.apk glibc-i18n-2.35-r0.apk
    COPY sgerrand.rsa.pub /etc/apk/keys/sgerrand.rsa.pub
    RUN apk add glibc-2.35-r0.apk glibc-bin-2.35-r0.apk glibc-i18n-2.35-r0.apk
    RUN cat locale.md | xargs -i /usr/glibc-compat/bin/localedef -i {} -f UTF-8 {}.UTF-8 && \
    rm -rf *.apk && \
    rm -rf /var/cache/apk/* && \
    rm -rf locale.md
    # tzdata 是可以配置时区,这里默认使用上海时区
    RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
    RUN { echo '#!/bin/sh'; echo 'set -e'; echo; echo 'dirname "$(dirname "$(readlink -f "$(which javac || which java)")")"'; } > /usr/local/bin/docker-java-home
    RUN chmod +x /usr/local/bin/docker-java-home
    # 支持使用中文
    ENV LANG=zh_CN.UTF-8
    ENV LANGUAGE=zh_CN.UTF-8
    
    
    # 以下为安装jdk 11 的命令 , 目前alpine:3.15 里面软件包最新版本 jdk版本 11.0.15
    ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk
    ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-11-openjdk/jre/bin:/usr/lib/java-11-openjdk/bin
    RUN apk add --no-cache openjdk11 && [ "$JAVA_HOME" = "$(docker-java-home)" ]
    
    
    # 以下为安装jdk 1.8 的命令 , 目前alpine:3.15 里面软件包最新版本 jdk版本 1.8.0_322
    # ENV JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk
    # ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin
    # RUN apk add --no-cache openjdk8 && [ "$JAVA_HOME" = "$(docker-java-home)" ]
    
    CMD ["java","-version"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    关于 glibc 的几个文件和locale文件

    1、glibc 文件 下载方式及地址 (楼主网络不稳定,所以提前下载好使用)

    wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r0/glibc-2.35-r0.apk
    wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r0/glibc-bin-2.35-r0.apk
    wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r0/glibc-i18n-2.35-r0.apk
    wget https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub
    
    • 1
    • 2
    • 3
    • 4

    2、locale 文件及其 内容

    1、创建文件 
    touch locale.md
    
    2、写入文件内容
    en_US
    zh_CN
    zh_HK
    zh_SG
    zu_ZA
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    关于容器启动 Java 服务

    1、启动Java服务时,在 dockerfile 末尾里面增加

    ENTRYPOINT ["tini","java","-Dfile.encoding=utf-8","-jar","/demo.jar"]
    
    • 1

    2、切记一定要 增加 tini 命令,是为了容器启动后可以正常使用 jstack jmap 两个命令的

  • 相关阅读:
    osg学习-1《绘制基本单元》
    云计算基础(一)
    降温了好冷,总结下11月
    TypeScript基础
    Redisson 限流器源码分析
    【数据挖掘】学习笔记
    山东健博会|2023第五届中国(济南)国际大健康产业博览会
    【小月电子】FPGA开发板(XLOGIC_V1)系统学习教程-LESSON1点亮LED灯
    基于Springboot社区疫情防控系统设计与实现 毕业设计开题报告
    速盾网络:CDN用几天关了可以吗?安全吗?
  • 原文地址:https://blog.csdn.net/u010025294/article/details/125911398