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

相关推荐
engchina4 小时前
WSL Ubuntu で Kubernetes v1.34.2 + Docker 環境を構築する
ubuntu·docker·kubernetes
JH30734 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
Coder_Boy_5 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
invicinble6 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
较真的菜鸟6 小时前
使用ASM和agent监控属性变化
java
黎雁·泠崖6 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
qq_12498707537 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
Coder_Boy_7 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Mr_sun.7 小时前
Day06——权限认证-项目集成
java
瑶山8 小时前
Spring Cloud微服务搭建四、集成RocketMQ消息队列
java·spring cloud·微服务·rocketmq·dashboard