Docker构建Java镜像并部署Java项目

news2024/11/17 7:31:00

文章目录

    • 1. 准备工作
    • 2. 创建Dockerfile
    • 3. 构建镜像
    • 4. 查看镜像是否构建成功
    • 5. 运行容器
    • 6. 访问Java服务
    • 7. 总结

本文介绍了如何使用Docker构建一个Java项目的镜像,并以后端项目为例进行演示。在这个例子中,我们将使用eclipse-temurin:8-jre作为基础镜像,并创建一个可以运行Java项目的Docker镜像。

1. 准备工作

在开始之前,我们需要做一些准备工作。首先,确保你已经安装了Docker,并具有构建和运行Docker镜像的权限。

接下来,我们需要准备Java项目的可执行JAR文件。假设我们的Java项目构建后的可执行JAR文件位于./wms-admin/target/code-safe.jar。我们将在Docker镜像中将该JAR文件复制到容器中,并在容器中运行它。

2. 创建Dockerfile

在项目根目录下创建一个名为Dockerfile的文件,并使用以下内容:

# 指定基础镜像
FROM eclipse-temurin:8-jre

# 在镜像中执行命令,创建目录,并使用它作为工作目录
RUN mkdir -p /project
# 设置工作目录,即后续命令的默认执行路径
WORKDIR /project
# 复制文件或目录到镜像中。可以将本地文件或目录复制到镜像的指定位置。
COPY ./code-safe.jar /project/code-safe.jar

# 设置环境变量
# 指定容器的时区
ENV TZ=Asia/Shanghai
# 用于配置 Java 虚拟机的选项,如初始堆大小、最大堆大小和随机数生成器,可通过 docker run -e "JAVA_OPTS=" 进行覆盖
ENV JAVA_OPTS="-Xms512m -Xmx1024m -Djava.security.egd=file:/dev/./urandom"
## 应用参数
ENV ARGS=""

# 定义容器启动后执行的命令,启动后端项目
CMD java ${JAVA_OPTS} -jar code-safe.jar $ARGS

# 声明要监听的端口
EXPOSE 16000

在这个Dockerfile中,我们使用eclipse-temurin:8-jre作为基础镜像。然后,我们创建一个工作目录/project,并将Java项目的可执行JAR文件复制到容器中的该目录下。

接下来,我们设置了一些环境变量,用于配置Java虚拟机的选项和应用参数。其中,JAVA_OPTS用于配置Java虚拟机的一些选项,如初始堆大小和最大堆大小。我们还定义了一个ARGS环境变量,用于传递应用程序的命令行参数。

最后,我们使用CMD指令定义容器启动后要执行的命令。在这个例子中,我们将以${JAVA_OPTS}${ARGS}为参数启动Java应用程序。

3. 构建镜像

  1. 准备好资源
  2. 将资源jar包,Dockerfile 放在同一个目录中
  3. 使用docker build命令来构建我们的Java镜像
docker build -t java .

其中,-t选项指定镜像的名称为java,.表示Dockerfile所在的当前目录。

在这里插入图片描述

在这里插入图片描述

4. 查看镜像是否构建成功

docker images

在这里插入图片描述

5. 运行容器

完成镜像的构建后,我们可以使用docker run命令来运行容器:

docker run -d -p 16000:16000 --name myjava java:latest

-d参数表示以后台方式运行容器
-p 16000:16000参数表示将容器的16000端口映射到主机的16000端口
–name myjava 参数表示为容器指定一个名字。

查看容器是否运行成功

docker ps -a

在这里插入图片描述

6. 访问Java服务

现在,我们已经成功运行了一个Java项目的Docker容器。我们可以通过访问http://localhost:16000来访问我们的Java应用程序。

7. 总结

本文介绍了如何使用Docker构建一个Java项目的镜像,并在容器中运行它。通过使用Docker,我们可以将Java应用程序打包为一个独立的容器,使得应用程序的部署和管理更加简单和灵活。希望本文对您有所帮助,谢谢阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/797801.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

光伏圈告别「看天吃饭」,塞浦路斯大学耗时 2 年,发现机器学习预测污染损失未来可期

内容一览:光伏系统是一种利用太阳能发电的可再生能源解决方案,具有减少温室气体排放、分散式发电、经济效益等优势,对于推动可持续能源发展和应对环境挑战具有重要作用。然而,许多具有最高太阳辐射的地点也存在地面干燥、多尘的缺…

Vue2基础九、路由

零、文章目录 Vue2基础九、路由 1、单页应用 (1)单页应用是什么 单页面应用(SPA:Single Page Application): 所有功能在 一个html页面 上实现具体示例: 网易云音乐 https://music.163.com/ (2)单页面应用VS多页面…

角色权限的设置

1.先在登录页把角色存起来 2.然后分成普通管理员路由和超级管理员路由的动态路由 3.在导航栏这边接收循环路由以及文字等 4.给路由加属性看是否展示在导航栏ismenu 5.在templat标签上面循环 <template><div class"asders"><el-aside width"200…

Mybatis-Flex

一、Mybatis-Flex是什么&#xff1f; Mybatis-Flex 是一个优雅的 Mybatis 增强框架&#xff0c;它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库&#xff0c;其内置的 QueryWrapper^亮点 帮助我们极大的减少了 SQL 编写的工作的同时…

mfc140.dll丢失的多种解决方法分享,最全面的mfc140.dll文件修复手法

其实想要修复丢失的mfc140.dll文件&#xff0c;还是非常的简单的&#xff0c;我们需要针对其丢失的原因&#xff0c;去做针对性的修复&#xff0c;并不是所有的修复手段都是有用的&#xff01;这点我们必须了解清楚&#xff0c;好了下面我们一起来了解一下mfc140.dll丢失的多种…

神码ai火车头伪原创插件怎么用【php源码】

大家好&#xff0c;本文将围绕python绘制烟花特定爆炸效果展开说明&#xff0c;如何用python画一朵花是一个很多人都想弄明白的事情&#xff0c;想搞清楚用python画烟花的代码需要先了解以下几个事情。 1、表白烟花代码 天天敲代码的朋友&#xff0c;有没有想过代码也可以变得…

SSH连接Windows「用户名与密码的坑」及解决方案

文章目录 问题方案 问题 当我们想要通过 SSH 连接 Windows 来进行一些远程办公的时候&#xff0c;通常需要进行以下准备工作&#xff1a; 在 Windows 上安装 OpenSSH 服务器 在系统的「设置>应用>可选功能」中搜索关键词「SSH」即可找到该应用并下载安装 确定 Windows…

java:匿名内部类

匿名内部类 匿名内部类一般作为一个参数传递给方法 首先不作为参数 同时可以让代码更简化&#xff0c;直接调用go方法&#xff0c;将S1替换&#xff0c;也就是将内部类直接作为参数&#xff0c;传递给方法 内部类不是主动去实现而是被动实现的

Zabbix下载安装过程中的报错问题与解决方案

目录 系统环境1. switch-to 指令错误2. 缺少的组或模块 : php:7.4 / perl:5.26&#xff0c;以及衍生出来的一系列依赖模块缺少的问题3. 初始化架构和数据时缺失server.sql.gz&#xff0c;无法正常导入4. 启动Zabbix server和agent进程时无法正常启动&#xff0c;但也没有其他问…

Date时间相关语句

SimpleDateFormat格式化 Date date new Date(); /*注意&#xff0c;dd需要小写&#xff0c;另外&#xff0c;需要注意的是&#xff0c;匹配符字母不能随意写*/ /*获取date*/ SimpleDateFormat sdf1 new SimpleDateFormat("YYYY年MM月dd日 "); SimpleDateFormat sd…

轻松构建数字孪生场景,限时有奖搜集用户体验活动

作为程序员或者技术开发者&#xff0c;无论是学习还是工作&#xff0c;前沿的技术的开发和学习是不可缺少的&#xff0c;在信息高速的发展越来越多的技术被发明和创造&#xff01; 我们应该与时俱进&#xff0c;去接触更多的科技技术&#xff0c;拓展自己的知识盲区&#xff0c…

C# Assembly 反射动态加载程序集(动态加载Dll)Demo

No1、本Demo 定义了一个接口IserviceToolFrame&#xff0c;接口中有一个方法Run。 No2、在另外两个工程中&#xff0c;分别定义两个类serviceToolCatComplete、serviceToolDogComplete实现接口IserviceToolFrame。 No3、控制台程序通过动态加载Dll的方式去调用IserviceToolFram…

消息队列的两种消费模式

第一种&#xff1a;点对点模式 消息发送者生产消息发送到消息队列中&#xff0c;然后消息接收者从消息队列中取出并且消费消息。消息被消费以后&#xff0c;消息队列中不再有存储&#xff0c;所以消息接收者不可能消费到已经被消费的消息。 点对点模式特点&#xff1a; 每个消息…

git的clone,上传与upstream同步

文章目录 clone同步 clone clone他人项目&#xff0c;git到自己的项目 rm -rf .git .git存放原始项目的日志信息&#xff0c;这里需要添加自己的日志信息&#xff0c;需要删除重写。也可手动删除 git init 初始化文件&#xff0c;依据本地日志信息生产.git文件 git add 目标文…

生物信息学_玉泉路_课堂笔记_03 第三章 多序列比对与系统发生树构建

&#x1f345; 课程&#xff1a;生物信息学_玉泉路_课堂笔记 中科院_2022秋季课 第一学期 &#x1f345; 个人笔记使用 &#x1f345; 2023/7/6 一、多序列比对简介 1.1 简介 1.2 多序列比对方法 1.2.1 启发式&#xff1a;渐进法 1.2.2 软件 ClustalW/X 1.2.3 启发式&…

安装git创建版本库

安装git 安装教程参考链接 https://blog.csdn.net/mukes/article/details/115693833 按照链接流程安装 安装完成后&#xff0c;还需要最后一步设置&#xff0c;在命令行输入&#xff1a; &#xff08;用户名和邮箱在账号中查找&#xff09; $ git config --global user.name “…

一套Java/.Net+Vue前后端分离的低代码快速开发框架

项目简介 这是一个基于Java Boot/.Net Core构建的简单、跨平台快速开发框架。前后端封装了上千个常用类&#xff0c;方便扩展&#xff1b;集成了代码生成器&#xff0c;支持前后端业务代码生成&#xff0c;实现快速开发&#xff0c;提升工作效率&#xff1b;框架集成了表单、报…

特定Adreno GPU的Android设备发生冻屏问题

1&#xff09;特定Adreno GPU的Android设备发生冻屏问题 ​2&#xff09;Unity版本升级后&#xff0c;iOS加载UnityFramework bundle闪退 3&#xff09;关于RectTransfrom.rect在屏幕空间中表示的相关问题 4&#xff09;Unity Mesh泄露问题 这是第345篇UWA技术知识分享的推送&a…

flex布局篇——justify-cont:center/space-between/space-around最后一行靠左

正常来说,用到 justify-cont:space-between时,最后一行元素是这样的 会向两端对齐。为了解决这个办法,可用gap与伪类进行纠正: <view class="box"><view class="bbox" wx:for="{{50}}" wx:key="this"><view class=…

CitHub Copilot 基于GPT的代码生成模型

CitHub Copilot 基于GPT的代码生成模型 介绍 GitHub Copilot X 是 GitHub 与 OpenAI 合作创建的&#xff0c;这是世界上第一个使用 OpenAI Codex 模型开发的大规模生成式人工智能开发工具&#xff0c;可以作为vscode 和jetbrains 插件安装 价格 试用30天免费&#xff0c;10…