将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 容器中运行。

相关推荐
oioihoii23 分钟前
深入解析 C++20 中的 std::bind_front:高效函数绑定与参数前置
java·算法·c++20
码递夫32 分钟前
[NO-WX179]基于springboot+微信小程序的在线选课系统
java·spring boot·后端·微信小程序
magic 24533 分钟前
Servlet-http协议、模版方法设计模式、HttpServlet源码分析
java·servlet·tomcat·html·intellij-idea
blammmp36 分钟前
Java EE 进阶:MyBatis-plus
java·java-ee·mybatis
程序员yt37 分钟前
双非一本Java方向,学完感觉Java技术含量不高,考研换方向如何选择?
java·开发语言·考研
凌冰_1 小时前
Java 集合中ArrayList与LinkedList的性能比较
java·开发语言
程序猿chen1 小时前
第二重·腾挪篇:云原生轻功身法要诀
java·git·后端·程序人生·云原生·java-ee·github
黎明晓月1 小时前
Docker容器的kafka在VM虚拟机挂起重新运行之后连接异常解决
docker·容器·kafka
快来卷java1 小时前
优化MyBatis-Plus批量插入策略
java·windows·spring·tomcat·maven·mybatis
徐小黑ACG1 小时前
Ubuntu下载docker、xshell
linux·ubuntu·docker