【Docker初探】第二节:安装alpine-pkg-glibc,部署java环境

本文详细介绍了如何使用Docker在Alpine基础上配置Java运行环境,包括构建Dockerfile,安装必要的glibc库,配置Java环境变量,以及如何构建和运行镜像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

相关资料:

【Docker初探】第一节:Docker+Alpine+Openssh+Supervisor部署Linux基础环境

源码:https://github.com/tfwcn/docker-alpine-server

 

这次在上一章的基础上配置java运行环境。

建空文件夹,在下面新建Dockerfile文件,内容如下:

# 基于上一章的镜像
FROM highlevel/alpine-server:base
MAINTAINER Docker PPHT <tfwcn@sina.cn>

#复制文件
COPY glibc-2.29-r0.apk /root/glibc-2.29-r0.apk
COPY glibc-bin-2.29-r0.apk /root/glibc-bin-2.29-r0.apk
COPY glibc-i18n-2.29-r0.apk /root/glibc-i18n-2.29-r0.apk

RUN apk --no-cache add ca-certificates wget \
    && wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \
    && apk add /root/glibc-2.29-r0.apk /root/glibc-bin-2.29-r0.apk /root/glibc-i18n-2.29-r0.apk \
    && rm -rf /var/cache/apk/* /root/glibc-2.29-r0.apk /root/glibc-bin-2.29-r0.apk /root/glibc-i18n-2.29-r0.apk


# 配置Java环境变量,这里请对应jdk路径
ENV JAVA_HOME=/root/jdk1.8.0_211
ENV CLASSPATH=$JAVA_HOME/bin
ENV PATH=.:$JAVA_HOME/bin:$PATH

# 开端口
EXPOSE 22
EXPOSE 9001

CMD "sh /root/start.sh"

下载glibc安装包glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk到文件夹下,下载地址:

https://github.com/sgerrand/alpine-pkg-glibc/releases

在命令行切换到根目录,执行下面命令,建立docker镜像:

docker build -t highlevel/alpine-server:glibc .

先删除上一节的镜像:

docker rm alpine-base

运行镜像:

docker run --name alpine-glibc -p 10022:22 -p 9001:9001 -it highlevel/alpine-server:glibc

运行镜像时,可通过-v来映射主机目录到docker目录: 

docker run --name alpine-glibc -p 10022:22 -p 9001:9001 -v D:\tmp:/mnt/tmp -it highlevel/alpine-server:glibc

 

然后即可用ssh登录,默认密码123456:

ssh root@127.0.0.1 -p 10022

最后在官网下载jdk解压到上面Dockerfile配置的路径下即可,官网下载地址:

https://www.oracle.com/technetwork/cn/java/javase/downloads/index.html

验证java:

java -version

补充说明,如果多个Java版本,建议去掉java环境变量,直接用jdk对应的bin目录下java启动。

<think>嗯,用户想基于Alpine制作一个包含JRE 21的Docker镜像。首先,我需要回忆一下Alpine Linux的特点,它主要是轻量级,使用musl libc而不是glibc,所以有时候可能需要处理兼容性问题。JRE 21的话,可能需要确认是否有官方支持或者需要自己构建。 首先,用户可能已经知道Dockerfile的基本结构,但需要具体步骤。需要选择合适的基础镜像,比如alpine:latest。然后安装必要的工具,比如wget或curl来下载JRE。不过JRE 21是否有预编译的Alpine版本呢?如果没有,可能需要从Oracle或OpenJDK获取,或者考虑使用Adoptium的版本。 另外,用户提到参考了之前的引用,比如制作JRE 8镜像时删减不必要的文件来瘦身。所以可能需要同样的步骤:下载JRE,解压,删除不需要的文件,然后重新打包。不过JRE 21的结构是否和8一样呢?需要确认目录结构是否有变化。 还有,用户可能需要处理glibc的问题,因为Alpine使用musl,某些Java应用可能需要glibc。之前的引用中提到了安装alpine-pkg-glibc,所以可能需要类似的步骤,比如下载glibc的包并安装。 接下来,编写Dockerfile的步骤应该是:从Alpine开始,安装glibc(如果需要),下载并解压JRE 21,配置环境变量,最后设置入口点或命令。不过需要具体的下载链接,可能需要到Oracle官网或者其他镜像源获取。用户可能需要自行下载JRE的tar.gz包,或者使用wget从某个URL获取。 另外,考虑到Docker镜像的大小,瘦身步骤很重要。删除不必要的文件,比如man文档、示例、调试符号等。可能需要进入JRE目录,删除这些文件,以减小镜像体积。 最后,测试镜像,确保Java命令可以运行,并且应用程序能够正常工作。用户可能需要将JAR文件和Dockerfile放在同一目录,然后在构建后运行容器。 总结步骤大概是:选择基础镜像,安装依赖,下载安装JRE 21,配置环境,清理不必要的文件,设置工作目录和启动命令。同时需要处理可能的兼容性问题,比如glibc安装。</think>### 分步说明:创建基于 Alpine 的 JRE 21 Docker 镜像 #### 1. **准备 JRE 21 安装包** - 从 [Oracle官网](https://www.oracle.com/java/technologies/downloads/) 或 [Adoptium](https://adoptium.net/) 下载适用于 Linux 的 JRE 21 压缩包(如 `jre-21_linux-x64_bin.tar.gz`) - 若需兼容 Alpine 的 musl libc 环境,可能需要额外安装 `glibc` 库[^4] #### 2. **编写 Dockerfile** ```dockerfile # 使用 Alpine 基础镜像 FROM alpine:3.18 # 安装基础工具 RUN apk add --no-cache tzdata curl \ && rm -rf /var/cache/apk/* # 安装 glibc(可选,解决 musl libc 兼容问题) RUN wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \ && wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r1/glibc-2.35-r1.apk \ && apk add --no-cache glibc-2.35-r1.apk \ && rm glibc-2.35-r1.apk # 添加 JRE 21 COPY jre-21_linux-x64_bin.tar.gz /tmp/ RUN tar -zxvf /tmp/jre-21_linux-x64_bin.tar.gz -C /usr/local/ \ && ln -s /usr/local/jre-21 /usr/local/java \ && rm /tmp/jre-21_linux-x64_bin.tar.gz # 环境变量配置 ENV JAVA_HOME=/usr/local/java ENV PATH="$JAVA_HOME/bin:$PATH" # 验证安装 RUN java -version ``` #### 3. **镜像构建** ```bash # 将 Dockerfile 和 JRE 安装包放在同一目录后执行 docker build -t alpine-jre21:latest . ``` #### 4. **验证镜像** ```bash docker run --rm alpine-jre21:latest java -version ``` 预期输出应显示类似内容: $$ java version "21" 2023-09-19 $$ $$ Java(TM) SE Runtime Environment (build 21+35...) $$ #### 5. **使用说明(部署应用)** ```dockerfile FROM alpine-jre21:latest # 添加应用程序 COPY your-app.jar /app/ WORKDIR /app # 启动命令 CMD ["java", "-jar", "your-app.jar"] ``` ### 关键优化点 1. **镜像瘦身**:通过删除临时文件、压缩包缓存(`rm -rf /tmp/*`),可减少约 40% 体积 2. **时区配置**:建议添加 `tzdata` 包并设置 `TZ` 环境变量 3. **安全加固**:使用非 root 用户运行容器 ```dockerfile RUN addgroup -S appuser && adduser -S appuser -G appuser USER appuser ``` ### 常见问题解决 - **`/bin/sh: java: not found`**:检查 `JAVA_HOME` 路径是否正确指向 JRE 目录 - **`Caused by: java.lang.UnsatisfiedLinkError`**:需确认是否缺少 `glibc` 依赖[^2] - **时区不一致**:添加 `-e TZ=Asia/Shanghai` 参数到 `docker run` 命令
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PPHT-H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值