当前位置: 首页 > news >正文

Java 项目 Dockerfile 示例:从基础镜像选择到环境变量配置的详细指南

Java 项目 Dockerfile 示例:从基础镜像选择到环境变量配置的详细指南

本文提供了一个 Java 项目的 Dockerfile 示例,展示了如何为 Java 应用创建高效的 Docker 镜像。Dockerfile 从 OpenJDK 8 的 Java 运行环境开始,配置了工作目录和 JVM 启动参数,使用卷来管理日志文件,并通过 ENTRYPOINT 命令启动应用。文中还使用了 LABEL 来替代过时的 MAINTAINER 指令,并提供了有关如何优化镜像大小和性能的建议。这个 Dockerfile 设计旨在确保容器内 Java 应用的高效运行,并使得数据持久化和镜像管理更加方便。

文章目录

  • Java 项目 Dockerfile 示例:从基础镜像选择到环境变量配置的详细指南
      • Dockerfile 示例
      • 解释说明
        • 一 基础镜像选择
        • 二 维护者信息
        • 三 工作目录设置
        • 四 环境变量配置
        • 五 文件复制
        • 六 定义卷
        • 七 容器启动命令

Dockerfile 示例

这段 Dockerfile 配置定义了如何构建一个具体的 Docker 镜像,用于运行 Java 应用。

# 使用更具体的标签以获取安全更新
FROM openjdk:8u212-jre
# slim 标签的镜像移除了不必要的文件,减小了镜像大小。
# FROM openjdk:8u212-jre-slim# 高版本已废弃 MAINTAINER
# MAINTAINER your <your@email.com>
# 使用LABEL替代MAINTAINER(已废弃)
LABEL maintainer="your@email.com"# 设置工作目录和环境变量
WORKDIR /app# 合并ENV命令以减少镜像层数
ENV LANG=C.UTF-8 \JAVA_OPTS="-server -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/app/logs/heapdump-your-proj.hprof -Djava.security.egd=file:/dev/./urandom -Dfile.encoding=UTF-8 -Dlog4j2.formatMsgNoLookups=true"# 复制单个jar文件到容器中
COPY target/your-proj.jar /app/app.jar# 定义卷来提供外部持久化的能力
VOLUME /tmp /app/logs# 指定容器启动时运行的命令
ENTRYPOINT ["java", "-jar", "/app/app.jar", "$JAVA_OPTS"]

解释说明

一 基础镜像选择
  • FROM openjdk:8u212-jre: 这行指定使用 OpenJDK 8 的 Java 运行环境版本 8u212 作为基础镜像。这是构建 Java 应用的镜像的起点,意味着容器内已经配置好了 Java 运行环境。
  • # FROM openjdk:8u212-jre-slim: 这是一个注释掉的备选镜像,使用 slim 标签,意味着这个版本的镜像已经去除了一些不必要的文件,减小了镜像的体积,适用于需要减少资源消耗的环境。
二 维护者信息
  • LABEL maintainer="your@email.com": 替代了已废弃的 MAINTAINER 指令,LABEL 用于添加元数据,这里指定了维护者的联系信息。
三 工作目录设置
  • WORKDIR /app: 设置容器内的工作目录为 /app。如果这个目录不存在,Docker 将会自动创建它。所有后续的操作(如 COPYRUN 命令)都将以这个位置为基础。
四 环境变量配置
  • ENV LANG=C.UTF-8 \: 设置容器的默认语言环境为 C.UTF-8,确保容器内程序的国际化和本地化设置正确。
  • JAVA_OPTS="...": 这一行定义了一组 Java 虚拟机(JVM)启动参数,用于优化运行性能和行为,例如使用 G1 垃圾收集器、在内存溢出时生成堆转储文件等。
五 文件复制
  • COPY target/your-proj.jar /app/app.jar: 将宿主机的 your-proj.jar 文件复制到容器的 /app 目录下,并命名为 app.jar
六 定义卷
  • VOLUME /tmp /app/logs: 这行命令定义了容器的两个卷,/tmp/app/logs。卷用于数据持久化和数据共享,尤其是日志文件的管理和访问。
七 容器启动命令
  • ENTRYPOINT ["java", "-jar", "/app/app.jar", "$JAVA_OPTS"]: 容器启动时执行的命令,用于启动 Java 应用。这里使用 ENTRYPOINT 来确保容器作为可执行程序运行,且 JAVA_OPTS 变量包含的 JVM 参数将被应用。
http://www.lryc.cn/news/466570.html

相关文章:

  • WebGL编程指南 - 高级变换与动画基础
  • 银行客户贷款行为数据挖掘与分析
  • 制程质量管理方案设计
  • uniapp移动端优惠券! 附源码!!!!
  • 【分布式技术】中间件-zookeeper安装配置
  • 高等数学 7.6高阶线性微分方程
  • LSP的建立
  • huggingface的数据集下载(linux下clone)
  • Java使用dom4j生成kml(xml)文件遇到No such namespace prefix: xxx is in scope on:问题解决
  • 深入探讨Java中的LongAdder:使用技巧与避坑指南
  • 【本科毕业设计】基于单片机的智能家居防火防盗报警系统
  • C语言 动态数据结构的C语言实现单向链表-2
  • Github 2024-10-23C开源项目日报 Top10
  • ubuntu20.04 opencv4.0 /usr/local/lib/libgflags.a(gflags.cc.o): relocation报错解决
  • android openGL ES详解——混合
  • 计网--物理层
  • 算法的学习笔记—数组中的逆序对(牛客JZ51)
  • Golang | Leetcode Golang题解之第498题对角线遍历
  • 什么是全局污染?怎么避免全局污染?
  • C# 串口通信教程
  • PHP编程基础
  • TwinCAT3下位机配置EAP通讯传递与接收变量
  • 近似推断 - 期望最大化(EM)篇
  • arp欺骗及其实验
  • HDU The Boss on Mars(容斥原理)
  • nnUnet 大模型学习笔记(续):训练网络(3d_fullres)以及数据集标签的处理
  • Java中的数据结构与集合源码
  • Java应用程序的测试覆盖率之设计与实现(三)-- jacoco cli 客户端
  • Deepin V23 / 统信UOS 下安装与配置 tftp
  • java基础学习:定时任务常见实现方式