构建属于自己的 jre Docker 镜像

絕刀狂花

絕刀狂花

2025-07-12

765人浏览

原创

1. 概述

在实际项目中,有时官方提供的相关 docker 镜像不能满足企业对于镜像内部安全的要求;所以大型的企业都会构建属于企业内部的中间件的 docker 镜像。

2. 基于Alpine 制作 jre 镜像alpine Linux 简介

Alpine Linux 是一个轻型 Linux 发行版,它不同于通常的 Linux 发行版,Alpin e采用了musl libc 和 BusyBox 以减少系统的体积和运行时的资源消耗。alpine Linux 优点

小巧:基于Musl libc 和 Busybox,和 Busybox 一样小巧,最小的 Docker 镜像只有 5MB;安全:面向安全的轻量发行版;简单:提供 APK 包管理工具,软件的搜索、安装、删除、升级都非常方便;适合容器使用:由于小巧、功能完备,非常适合作为容器的基础镜像;代码语言:javascript代码运行次数:0运行复制
<code class="javascript">https://pkgs.alpinelinux.org/packages</code>

下面是一些常见 Linux 的官方镜像的容量对比图

构建属于自己的 jre Docker 镜像

先准备构建镜像所需的jre,下载 jre8

代码语言:javascript代码运行次数:0运行复制
<code class="javascript">https://www.oracle.com/java/technologies/downloads/https://www.oracle.com/java/technologies/downloads/#java8</code>
创建并编辑 Dockerfile代码语言:javascript代码运行次数:0运行复制
<code class="javascript">touch Dockerfilevi Dockerfile</code>
在 Dockerfile 文件中添加以下命令代码语言:javascript代码运行次数:0运行复制
<code class="javascript"># 1.指定基础镜像,并且必须是第一条指令FROM alpine:latest# 2.指明镜像的作者和电子邮件MAINTAINER huang "huangjinjin@qq.com"# 3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建该目录WORKDIR /servers# 4.将jre安装包复制到镜像中(ADD与COPY的区别:ADD复制并解压,COPY仅复制)ADD jre-8u321-linux-x64.tar.gz .# 5.更改 Alpine 的软件源为阿里云,默认从官方源拉取比较慢RUN echo http://mirrors.aliyun.com/alpine/v3.10/main/ > /etc/apk/repositories && \    echo http://mirrors.aliyun.com/alpine/v3.10/community/ >> /etc/apk/repositories# 6.运行指定的命令## Alpine linux 为了精简本身并没有安装太多的常用软件, apk类似于ubuntu的apt-get,## 用来安装一些常用软件,其语法如下:apk add bash wget curl git make vim docker## wget是linux下的ftp/http传输工具,没安装会报错“/bin/sh: wget: not found”## ca-certificates证书服务,是安装glibc前置依赖RUN apk update && apk upgradeRUN apk --no-cache add ca-certificates wget \    && 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.29-r0/glibc-2.29-r0.apk \    && wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-bin-2.29-r0.apk \    && wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-i18n-2.29-r0.apk \     && apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk \    && rm -rf /var/cache/apk/* glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk# 7.配置环境变量ENV JAVA_HOME=/servers/jre1.8.0_321ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV PATH=$JAVA_HOME/bin:$PATH# 容器启动时需要执行的命令# CMD ["java", "-version"]</code>

glibc 安装包如果直接从 github 下载可能比较慢,可以提前下载,然后通过以下命令直接复制到镜像中

ApiPost接口调试与文档生成工具
ApiPost接口调试与文档生成工具

ApiPost是一个支持团队协作,支持模拟POST、GET、PUT等常见请求,并可直接生成文档的API调试、管理工具,ApiPost是后台接口开发者或前端、接口测试人员的工作必备工具。快速生成、一键导出API文档。感兴趣的朋友快来下载吧。软件说明ApiPost官方版是一款十分出色的接口调试与文档生成工具,ApiPost官方版界面美观大方,功能强劲实用,支持团队协作,支持模拟POST、GET、PUT等常见请求,是后台接口开发者或前端、接口测试人员的工作必备工具。软件特色更方便支持接口调试的同时快速生成、一键

下载
代码语言:javascript代码运行次数:0运行复制
<code class="javascript">COPY glibc-2.29-r0.apk /serversCOPY glibc-bin-2.29-r0.apk /serversCOPY glibc-i18n-2.29-r0.apk /servers</code>
构建镜像代码语言:javascript代码运行次数:0运行复制
<code class="javascript">docker build -t alpine-jre8:v1.0 .</code>
构建属于自己的 jre Docker 镜像
创建并启动容器

使用命令docker run -it --name 容器名 镜像的id,创建并启动容器

代码语言:javascript代码运行次数:0运行复制
<code class="javascript">docker run -it --name jreV1 74d87e3a31e7</code>

或者

代码语言:javascript代码运行次数:0运行复制
<code class="javascript">docker create -it alpine-jre8:v2.0docker start 容器ID# 进入容器docker exec -it 容器ID /bin/sh</code>
构建属于自己的 jre Docker 镜像
3. 基于 CentOS 制作 jre镜像创建并编辑 Dockerfile代码语言:javascript代码运行次数:0运行复制
<code class="javascript">touch Dockerfilevi Dockerfile</code>
在 Dockerfile 文件中添加以下命令代码语言:javascript代码运行次数:0运行复制
<code class="javascript">FROM centos:7MAINTAINER huangjinjin "huangjinjin@qq.com"WORKDIR /servers/jdkADD jre-8u321-linux-x64.tar.gz /servers/jdkENV JAVA_HOME=/servers/jdk/jre1.8.0_321ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV PATH=$JAVA_HOME/bin:$PATHCMD ["java", "-version"]</code>

从 Dockerfile 看,基于 centos 构建镜像 Dockerfile 比较简单

构建镜像代码语言:javascript代码运行次数:0运行复制
<code class="javascript">docker build -t centos-jre8:v1.0 .</code>
构建属于自己的 jre Docker 镜像

可以看出基于 centos 构建的镜像要大不少

创建并启动容器代码语言:javascript代码运行次数:0运行复制
<code class="javascript">docker run -it --name jreV2 705360865867</code>

相关专题

更多
什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

2024.05.11

362

5

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

2025.12.18

420

18

ThinkPHP中间件机制与请求拦截处理实践
ThinkPHP中间件机制与请求拦截处理实践

本专题围绕 ThinkPHP 中间件体系展开,深入讲解中间件的定义、注册与执行流程。内容包括全局中间件与路由中间件的区别、请求前后处理逻辑、自定义中间件开发以及权限验证与日志处理应用。通过实际案例,帮助开发者掌握中间件在项目中的核心作用与最佳实践。

2026.03.31

298

17

github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

2026.01.21

7595

27

GitHub官网入口版本汇总
GitHub官网入口版本汇总

本专题整合了GitHub入口版本地址汇总,阅读专题下面的文章了解更多详细内容。

2026.04.02

454

19

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

2023.07.24

422

4

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

2004

6

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

2487

6

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

1005

7

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

Java 26官方文档
Java 26官方文档

共0课时 | 0人学习

SQL 教程
SQL 教程

共61课时 | 6.1万人学习