将jar制作成docker镜像运行

将jar制作成docker镜像运行

手动编写 Dockerfile 方式

1. 准备工作
  • 确保你已经安装了 Docker,并且 Docker 服务正在运行。

  • 有一个可运行的 JAR 文件,假设文件名为 your-application.jar

  • 修改springboot配置文件让日志输出到指定目录下文件中

    application.yml

    yaml 复制代码
    logging:
      file:
        name: logs/app.log

    这会让应用将日志输出到 logs 目录下的 app.log 文件中。

2. 创建 Dockerfile

在 JAR 文件所在的目录下创建一个名为 Dockerfile 的文件,内容如下:

Dockerfile 复制代码
# 使用基础的 Java 镜像,这里以 OpenJDK 17 为例
FROM openjdk:17-jdk-slim

# 设置工作目录
WORKDIR /app

# 将 JAR 文件复制到工作目录
COPY your-application.jar app.jar

# 创建日志目录 在工作目录下
RUN mkdir -p logs

# 暴露应用程序使用的端口,根据实际情况修改
EXPOSE 8080

# 定义容器启动时执行的命令
ENTRYPOINT ["java", "-jar", "app.jar"]
3. 构建 Docker 镜像

打开终端,进入包含 Dockerfile 和 JAR 文件的目录,执行以下命令构建 Docker 镜像:

bash 复制代码
docker build -t your-image-name:your-tag .
  • -t:用于指定镜像的名称和标签,你可以将 your-image-name 替换为你想要的镜像名称,your-tag 替换为版本号或其他标识,例如 my-app:1.0
  • .:表示使用当前目录下的 Dockerfile 进行构建。
4. 查看构建好的镜像

使用以下命令查看本地已构建的 Docker 镜像:

bash 复制代码
docker images

你应该能看到刚刚构建的镜像信息。

5. 运行 Docker 容器

使用以下命令运行 Docker 容器:

bash 复制代码
docker run -p 8080:8080 -d  --name your-container-name  your-image-name:your-tag

使用以下命令运行 Docker 容器并挂载日志目录(/host/logs 宿主机的日志存放位置 /app/logs 容器中日志存放位置 ):

bash 复制代码
docker run -p 8080:8080 -v /host/logs:/app/logs -d --name your-container-name your-image-name:your-tag

参数解释

  • -p 8080:8080:将容器内部的 8080 端口映射到宿主机的 8080 端口,这样可以通过宿主机的 IP 地址和 8080 端口访问容器内运行的应用程序。
  • -v /host/logs:/app/logs:将宿主机的 /host/logs 目录挂载到容器内的 /app/logs 目录,实现日志文件的映射,方便在宿主机上查看和管理容器内应用产生的日志。
  • -d:让容器以守护进程(后台)模式运行,即容器在后台持续运行,不会占用当前终端。
  • --name your-container-name:为容器指定一个自定义名称,你可以将 your-container-name 替换为你希望使用的名称,例如 my-spring-boot-app。使用自定义名称后,在后续操作中可以更方便地引用该容器,比如停止、重启、删除容器等操作。
  • your-image-name:your-tag:指定要运行的 Docker 镜像及其标签,your-image-name 是镜像的名称,your-tag 是镜像的版本标签,例如 my-java-app:1.0
6. 验证应用程序是否正常运行

打开浏览器,访问 http://localhost:8080(如果是在本地运行),如果看到应用程序的响应,说明应用已经成功在 Docker 容器中运行。

相关推荐
带刺的坐椅3 小时前
用 ChatModel 构建 LLM 驱动的 Java 应用
java·ai·llm·solon·rag·chatmodel
辉的技术笔记5 小时前
Dify 卡在入口?Gunicorn + Nginx 的正确打开方式
docker
用户3721574261355 小时前
Java 将 Word 文档转换为 Markdown:基础转换与导出选项详解
java
行者全栈架构师5 小时前
PolarDB + Spring Boot 实战:从自建MySQL到云原生数据库的零停机迁移
java·后端·架构
karry_k21 小时前
MyBatis批量insert-select踩坑:useGeneratedKeys=true 可能让PostgreSQL返回大量插入结果
java·后端
karry_k21 小时前
PostgreSQL 在 MyBatis 中执行正常 SQL 失效:一次 DELETE USING 踩坑记录
java·后端
辉的技术笔记1 天前
Dify 自部署为什么跑不动?6 层瓶颈诊断法教你定位
docker
SamDeepThinking1 天前
从源码到代码:MyBatis-Flex 与 MyBatis-Plus 的逐项对比
java·后端·程序员
她的男孩1 天前
Spring Boot 接 Flowable 工作流:用 3 个注解搭一个请假审批流程
java·后端·架构
荣码1 天前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python