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 sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
# 更新软件包
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 | tr -d '\r' | 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"]
关于 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
2、locale 文件及其 内容
1、创建文件
touch locale.md
2、写入文件内容
en_US
zh_CN
zh_HK
zh_SG
zu_ZA
关于容器启动 Java 服务
1、启动Java服务时,在 dockerfile 末尾里面增加
ENTRYPOINT ["tini","java","-Dfile.encoding=utf-8","-jar","/demo.jar"]
2、切记一定要 增加 tini
命令,是为了容器启动后可以正常使用 jstack
和jmap
两个命令的文章来源:https://www.toymoban.com/news/detail-706176.html
关于docker镜像
1、JDK 11
的镜像已经上传指docker官方镜像仓库, 欢迎下载: docker pull duxinglangzi/alpine-java11:latest
2、JDK 8
的镜像下载地址: docker pull duxinglangzi/alpine-java8:latest
文章来源地址https://www.toymoban.com/news/detail-706176.html
到了这里,关于基于Linux Alpine 制作 Java 8、11 Docker 镜像并支持中文的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!