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

通用的将jar制作成docker镜像sh脚本

通用的将jar制作成docker镜像sh脚本

为了在将 JAR 制作成 Docker 镜像的过程中创建日志目录,可以对之前的脚本进行扩展。以下是改进后的脚本,会在镜像构建时在容器内创建日志目录,并将日志文件挂载到该目录下。

  1. 在生成的 Dockerfile 中添加创建日志目录的命令。
  2. 在启动 JAR 应用时,将日志输出到该日志目录。

脚本代码

#!/bin/bash# 检查参数数量
if [ $# -ne 4 ]; thenecho "用法: $0 <jar文件路径> <镜像名称> <镜像版本> <日志文件名>"exit 1
fi# 获取输入参数
JAR_FILE=$1
IMAGE_NAME=$2
IMAGE_VERSION=$3
LOG_FILE_NAME=$4# 检查 JAR 文件是否存在
if [ ! -f "$JAR_FILE" ]; thenecho "错误: 指定的 JAR 文件 $JAR_FILE 不存在。"exit 1
fi# 获取 JAR 文件名
JAR_FILENAME=$(basename "$JAR_FILE")# 日志目录名
LOG_DIR="/app/logs"# 生成 Dockerfile
cat << EOF > Dockerfile
# 使用官方的 OpenJDK 基础镜像
FROM openjdk:17-jdk-slim# 设置工作目录
WORKDIR /app# 创建日志目录
RUN mkdir -p $LOG_DIR# 将 JAR 文件复制到工作目录
COPY $JAR_FILE /app/# 暴露应用程序使用的端口,可根据实际情况修改
EXPOSE 8080# 定义启动命令,将日志输出到指定日志文件
CMD ["sh", "-c", "java -jar $JAR_FILENAME > $LOG_DIR/$LOG_FILE_NAME 2>&1"]
EOF# 构建 Docker 镜像
docker build -t $IMAGE_NAME:$IMAGE_VERSION .# 检查构建是否成功
if [ $? -eq 0 ]; thenecho "Docker 镜像 $IMAGE_NAME:$IMAGE_VERSION 构建成功。"
elseecho "Docker 镜像构建失败。"
fi# 删除生成的 Dockerfile
rm Dockerfile

代码解释

  1. 日志目录定义LOG_DIR="/app/logs" 定义了容器内的日志目录路径。
  2. 在 Dockerfile 中创建日志目录RUN mkdir -p $LOG_DIR 在容器构建时创建日志目录,-p 选项确保即使父目录不存在也会一并创建。
  3. 日志输出重定向CMD ["sh", "-c", "java -jar $JAR_FILENAME > $LOG_DIR/自定义.log 2>&1"] 将 JAR 应用的标准输出和标准错误输出都重定向到 $LOG_DIR/自定义.log 文件中。

使用方法

  1. 保存脚本为 build_jar_image.sh
  2. 赋予执行权限:
chmod +x build_jar_image.sh
  1. 运行脚本,替换相应参数:
./build_jar_image.sh <jar文件路径> <镜像名称> <镜像版本> <日志文件名>

示例

假设你的 JAR 文件路径为 /path/to/your/app.jar,镜像名称为 myapp-image,镜像版本为 1.0,日志文件名为 app.log,则可以使用以下命令构建镜像:

./build_jar_image.sh /path/to/your/app.jar myapp-image 1.0 app.log

这样,在基于该脚本构建的 Docker 镜像运行时,JAR 应用产生的日志就会被记录到容器内的 /app/logs/app.log 文件中。

http://www.lryc.cn/news/535041.html

相关文章:

  • AUTOGPT:基于GPT模型开发的实验性开源应用程序; 目标设定与分解 ;;自主思考与决策 ;;信息交互与执行
  • 异步线程中使用RestTemplate注入空指针解决
  • 2024BaseCTF_week4_web上
  • 说一下 jvm 有哪些垃圾回收器?
  • react国际化配置react-i18next详解
  • Java并发编程——上下文切换、死锁、资源限制
  • MS08067练武场--WP
  • ubuntu文件同步
  • C++23 新特性解析
  • 算法05-堆排序
  • Arrays工具类详解
  • 无人机图像拼接数据的可视化与制图技术:以植被监测为例
  • 在 debian 12 上安装 mysqlclient 报错
  • python基础入门:7.1迭代器与生成器
  • Docker 容器 Elasticsearch 启动失败完整排查记录
  • 达梦数据使用笔记
  • 操作系统中的任务调度算法
  • Linux 虚拟服务器(LVS)技术详解
  • AIoT时代来临,物联网技术如何颠覆未来生活?
  • C++17 新特性解析
  • 嵌入式软件C语言面试常见问题及答案解析(四)
  • 在 C# 中,处理 Excel 和 PDF 文件的库有很多。以下是一些比较常用的选择
  • 绩效归因概述
  • Spring Boot 中加载多个 YAML 配置文件
  • 厚植创新实力、聚焦生物科技:柏强制药的责任与机遇
  • Linux中getifaddrs函数
  • 【HarmonyOS Next 自定义可拖拽image】
  • 解决No module named ‘llama_index.llms.huggingface‘
  • SearchBar组件的功能与用法
  • 13.推荐系统的性能优化