• 基于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 两个命令的

  • 相关阅读:
    JAVA:实现PageRank算法(附完整源码)
    Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单
    VR步进式漫游,轻松构建三维模型,带来展示新形式!
    爬虫的两大重要文件:robots.txt和sitemap.xml
    长春市OLED透明拼接屏:高清晰度和透明度的双重优势
    讲讲项目里的仪表盘编辑器(三)布局组件
    《五》表格
    Go-变量& 常量
    IT计算机编程:到底是学前端开发好?还是后端(Java、Python 和 PHP 等)好?
    ThingsBoard处理设备上报的属性并转换为可读属性
  • 原文地址:https://blog.csdn.net/u010025294/article/details/125911398