首页 > 编程语言 >如何使用Docker中构建Java jar包,并且实现开启自启

如何使用Docker中构建Java jar包,并且实现开启自启

时间:2024-04-03 17:58:05浏览次数:27  
标签:容器 Java app jar your 自启 8080 Docker docker

Docker中构建Java JAR包

要在Docker容器中构建Java应用程序的JAR包,你可以遵循以下步骤:

  1. 创建一个Dockerfile:在你的项目根目录下创建一个名为 Dockerfile 的文件,用来定义Docker镜像的构建过程。
# 使用官方的 Java 11 镜像作为基础镜像
FROM openjdk:11

# 设置工作目录
WORKDIR /app

# 将本地的 JAR 文件复制到容器中的工作目录
COPY target/your-application.jar /app/your-application.jar

# 定义容器启动时执行的命令
CMD ["java", "-jar", "your-application.jar"]
  1. 构建Docker镜像:使用 docker build 命令来构建Docker镜像。确保在你的项目根目录下执行此命令。
docker build -t your-image-name .

其中,your-image-name 是你希望给你的Docker镜像起的名称。

  1. 运行Docker容器:使用 docker run 命令来运行你的Docker容器。
docker run -p 8080:8080 your-image-name

这里假设你的应用程序将在容器内部的8080端口运行,并且你希望将容器的8080端口映射到主机的8080端口。

这样就可以在Docker容器中成功构建和运行你的Java应用程序的JAR包了。确保在运行 docker build 命令之前已经构建了你的Java应用程序的JAR包,并将其放置在适当的位置。

后台运行并且可以开机自启

要在后台运行Docker容器,并且在开机时自动启动,你可以使用以下步骤:

  1. 在后台运行Docker容器:要在后台运行Docker容器,可以使用 -d 参数。
docker run -d -p 8080:8080 your-image-name

这将使容器在后台以守护进程模式运行。

  1. 为了在开机时自动启动容器,你可以使用Docker的restart选项。首先,为容器添加 --restart 选项:
docker run -d --restart always -p 8080:8080 your-image-name

这样,容器会在启动时自动启动,并且如果容器因任何原因停止,Docker也会自动重新启动它。

  1. 在Docker守护程序启动时自动启动容器:如果你想在Docker守护程序启动时自动启动容器,你可以使用系统级的工具(如 systemd)来管理Docker容器。以下是一个使用 systemd 的示例配置:

首先,创建一个名为 your-container-name.service 的文件,例如 my-java-app.service,内容如下:

[Unit]
Description=My Java App
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker run -d --name my-java-app -p 8080:8080 your-image-name
ExecStop=/usr/bin/docker stop -t 2 my-java-app
ExecStopPost=/usr/bin/docker rm -f my-java-app

[Install]
WantedBy=default.target

然后将该文件移动到 /etc/systemd/system/ 目录下,并执行以下命令启用该服务并启动它:

sudo systemctl daemon-reload
sudo systemctl enable my-java-app.service
sudo systemctl start my-java-app.service

这样,当你的系统启动时,Docker服务会自动启动,并且在Docker服务启动后,my-java-app 容器也会自动启动。

标签:容器,Java,app,jar,your,自启,8080,Docker,docker
From: https://blog.csdn.net/weixin_43025343/article/details/137353683

相关文章

  • 在 Java 中对List进行分区
    1.概述在本文中,我们将说明如何将一个列表拆分为多个给定大小的子列表。对于这个相对简单的操作,标准Java集合API竟然不支持它。幸运的是,Guava和Apache-Commons都提供了对应的API。2.使用Guava对List进行分区Guava通过Lists.partition操作将List划分为指定......
  • zookeeper监听集群节点的实现zkclient组件实现方案(Java版)
    ZooKeeperWatcher机制client向zookeeper注册监听client注册的同时会存储一个WatchManager对象向zookeeper发生改变则notificationclient并发送一个WatchManager对象,然后client再更新该对象packagecom.jacky.zk.demo;importorg.I0Itec.zkclient.IZkChildListen......
  • java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ 可定制化
    工程项目管理软件是现代项目管理中不可或缺的工具,它能够帮助项目团队更高效地组织和协调工作。本文将介绍一款功能强大的工程项目管理软件,该软件采用先进的Vue、Uniapp、Layui等技术框架,涵盖了项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营等全过程。通过该......
  • java 读取excel文件
    POI-Excel写1、首先可以创建一个普通的maven项目<!--导入poi依赖,对excel2003的支持依赖(xls)--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.0.0</version></dependency><......
  • JavaScript变量对象详解
    正文在JavaScript中,变量对象是执行上下文中的一个重要概念,它负责存储函数中的变量、函数声明和形参。了解变量对象对于理解JavaScript的作用域、作用域链以及变量的声明和提升至关重要。1.变量对象的定义变量对象是在执行上下文创建阶段被创建的,用于存储该上下文中的变......
  • 《Java 热点:探索高效编程的新境界》
    前言在当今的数字时代,Java作为一种广泛使用的编程语言,一直处于技术领域的前沿。它的强大功能和广泛应用使得它成为了众多开发者的首选。本文将深入探讨一些最新的Java热点话题,带您领略Java编程的魅力和高效性。一、Java的发展与优势Java具有以下显著优势:跨平台性......
  • java 将文件夹进行压缩,按指定大小进行分卷压缩
    使用方法:SplitZipsplitZip=newSplitZip();splitZip.start(file.getPath(),file.getPath());packageext.xxx.util;importjava.io.*;importjava.util.zip.*;importstaticorg.apache.commons.lang3.StringUtils.isBlank;/***分卷压缩工具*/publicclassSp......
  • Java开发工具:IDEA
    学习,开发编程都离不开开发工具,常见之一的开发工具IDEA:一般学习使用的话使用免费的社区版本就够用了;https://www.jetbrains.com.cn/idea/download/download-thanks.html?platform=windows&code=IIC下载下来傻瓜式点点点安装就好了,使用开发工具让让我们在学习和开发的时候更好,......
  • C#-JavaScript-base64加密解码
    C#//base64加密//调用方式:Helper.EncodeToBase64(需要加密字符串)publicstaticstringEncodeToBase64(stringdata){byte[]byteData=Encoding.UTF8.GetBytes(data);returnConvert.ToBase64String(byteData);......
  • Java基础核心Map
    在Java中,Map是一种用于存储键值对(key-valuepairs)的集合类型。它提供了一种将键映射到值的方式,其中每个键在Map中都是唯一的。Map接口是java.util包中的一部分。常用实现类:HashMap:基于哈希表实现的Map,它提供了平均时间复杂度为O(1)的插入、删除和查找操作。但它不保证元......