当前位置: 首页 > news >正文

使用Docker将Java项目打包并部署到CentOS服务器的详细教程。

当然,让我们将上述步骤进一步细化,以便更好地理解整个过程。

前提条件

  • 一个Java项目
  • CentOS服务器,并且已安装Docker
  • Java项目可以正常在本地运行
  • 具有服务器访问权限
    ————————————————————————————————————————————

步骤 1: 准备Java项目

确保你的Java项目能够在本地环境中正常运行。这里我们假设你的项目是一个简单的Spring Boot应用,结构如下:

my-java-app/
|-- src/
|   |-- main/
|       |-- java/
|           |-- com/
|               |-- example/
|                   |-- App.java
|-- pom.xml

pom.xml 文件中,确保你有以下插件来构建可执行的jar包:

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

步骤 2: 编写Dockerfile

在你的项目根目录下创建一个名为 Dockerfile 的文件,内容如下:

# 指定基础镜像,这里使用OpenJDK 8
FROM openjdk:8-jdk-alpine
# 维护者信息
LABEL maintainer="yourname@example.com"
# 设置工作目录
WORKDIR /app
# 将当前目录下的pom.xml和src文件夹复制到工作目录下
COPY . /app
# 打包应用(这一步会构建项目)
RUN mvn clean package -DskipTests
# 删除不需要的源码文件,减少镜像大小
RUN rm -rf src pom.xml target/test-classes
# 暴露端口
EXPOSE 8080
# 运行jar包
CMD ["java", "-jar", "target/my-java-app-1.0-SNAPSHOT.jar"]

确保替换 my-java-app-1.0-SNAPSHOT.jar 为你的实际jar包名称。

步骤 3: 构建Java项目

在项目根目录下,使用Maven构建项目:

mvn clean package

构建完成后,会在 target 目录下生成可执行的jar包。

步骤 4: 将项目上传到服务器

将你的项目(包括 Dockerfilepom.xmlsrc 目录等)上传到CentOS服务器的某个目录下。

步骤 5: 构建Docker镜像

在服务器上,导航到项目目录,并执行以下命令构建Docker镜像:

docker build -t my-java-app .

这个命令会读取 Dockerfile 并构建一个名为 my-java-app 的镜像。

步骤 6: 运行Docker容器

使用以下命令运行容器:

docker run -d -p 8080:8080 --name my-java-app-container my-java-app

这里:

  • -d 表示在后台运行容器。
  • -p 8080:8080 表示将容器的8080端口映射到宿主机的8080端口。
  • --name my-java-app-container 为容器指定了一个名字。

步骤 7: 访问Java应用

现在,你的Java应用应该在Docker容器中运行了。你可以通过以下URL来测试应用:

http://<服务器IP地址>:8080

步骤 8: 管理容器

以下是一些管理容器的基本命令:

  • 查看所有容器(包括停止的):
    docker ps -a
    
  • 查看运行中的容器
    docker ps
    
  • 停止容器
    docker stop my-java-app-container
    
  • 启动容器
    docker start my-java-app-container
    
  • 重启容器
    docker restart my-java-app-container
    
  • 删除容器
    docker rm my-java-app-container
    
  • 查看容器日志
    docker logs my-java-app-container
    

步骤 9: 使用Docker Compose(可选)

如果你的应用需要多个服务,例如数据库或其他依赖服务,可以使用Docker Compose。创建一个 docker-compose.yml 文件:

version: '3'
services:my-java-app:build: .ports:- "8080:8080"

然后,使用以下命令启动服务:

docker-compose up -d

这样,Docker Compose会读取 docker-compose.yml 文件,构建镜像并启动容器。

总结

通过以上步骤,你已经学会了如何将Java项目打包成Docker镜像,并在CentOS服务器上运行。这只是一个开始,Docker还有很多高级功能等待你去探索,如数据持久化、网络配置、服务发现等。

相关文章:

使用Docker将Java项目打包并部署到CentOS服务器的详细教程。

当然&#xff0c;让我们将上述步骤进一步细化&#xff0c;以便更好地理解整个过程。 前提条件 一个Java项目CentOS服务器&#xff0c;并且已安装DockerJava项目可以正常在本地运行具有服务器访问权限 ———————————————————————————————————…...

嘉立创eda布线宽度

https://prodocs.lceda.cn/cn/pcb/route-routing-width/#%E5%B8%83%E7%BA%BF%E5%AE%BD%E5%BA%A6...

硬件面试经典 100 题(31~50 题)

31、多级放大电路的级间耦合方式有哪几种&#xff1f;哪种耦合方式的电路零点偏移最严重&#xff1f;哪种耦合方式可以实现阻抗变换&#xff1f; 有三种耦合方式&#xff1a;直接耦合、阻容耦合、变压器耦合。直接耦合的电路零点漂移最严重&#xff0c;变压器耦合的电路可以实现…...

5G:下一代无线通信技术的全面解析

随着科技的不断进步&#xff0c;移动通信技术也在飞速发展。从2G到4G&#xff0c;我们见证了无线网络的巨大变革&#xff0c;而现在&#xff0c;5G已经悄然来临。作为下一代无线通信技术&#xff0c;5G不仅将带来更快的速度和更低的延迟&#xff0c;还将开启全新的应用场景和商…...

关于refresh_token

前文介绍过jwt的一般使用场景&#xff0c;用户登录成功后获得jwt&#xff0c;其中包含用户相关信息&#xff0c;主要是在前端要用到的属性&#xff08;比如姓名、应用角色[这个前端后都用得着]等&#xff09;、在后端要用到的属性&#xff08;比如登录IP、终端唯一标识&#xf…...

Linux网络:基于OS的网络架构

Linux网络&#xff1a;OS视角下的网络架构 网络分层模型OSI 七层模型TCP/IP 五层模型 协议操作系统与网络网络相关命令ifconfigpingnetstat 本博客将基于操作系统&#xff0c;讲解计算机网络的设计理念&#xff0c;帮助大家理解操作系统与网络之间的关系。 网络分层模型 网络…...

UEC++学习(十六)变量添加中文注释、ui设置中文文本

&#xff08;一&#xff09;变量添加中文注释 在C 项目中创建变量&#xff0c;并在蓝图中显示变量的英文名同时附带中文注释&#xff0c;可以使用UPROPERTY 的 ToolTip 元数据属性来实现 UPROPERTY(EditAnywhere, meta (ToolTip "弹夹最大容量"))int32 MagCapacit…...

Redis延迟双删

1、何为延时双删 Redis延迟双删是一种在数据更新操作中确保缓存与数据库数据一致性的策略&#xff0c;通过两次缓存删除操作间隔一段延时来减少数据不一致的问题。 在并发环境下&#xff0c;多个请求同时对同一数据进行读写时&#xff0c;如果没有妥善处理&#xff0c;很容易…...

WO Mic 手机变身免费麦克风

目录 一、主要特点 1.支持多种连接方式 2.应用广泛 3.低延迟 4.简易配置 5.自动连接 6.音频格式 二、软件下载 三、软件安装 四、系统连接 五、测试 直播的时候,上课的时候,会议的时候……突然发现没有麦克风或者电脑麦克风有故障,这可怎么办呢?今天给大家介绍一…...

MQ死信对列

面试题&#xff1a;你们是如何保证消息不丢失的&#xff1f; 1、什么是死信 死信就是消息在特定场景下的一种表现形式&#xff0c;这些场景包括&#xff1a; 1. 消息被拒绝访问&#xff0c;即消费者返回 basicNack 的信号时 或者拒绝basicReject 2. 消费者发生异常&#xff0…...

springboot乡镇小区管理系统-计算机毕业设计源码73685

摘 要 过去使用手工的管理方式对乡镇小区进行管理&#xff0c;造成了管理繁琐、难以维护等问题&#xff0c;如今使用计算机对停车场停车的各项基本信息进行管理&#xff0c;比起手工管理来说既方便又简单&#xff0c;而且具有易于管理、搜索速度快、存储量大等多个优点。将其使…...

基于vue框架的4S店汽车维修保养管理系统28a7y(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;客户,技师,车辆信息,财务,客户维修,维修分配,维修订单,保养预约,保养分配,保养订单,维修费用,保养费用 开题报告内容 基于Vue框架的4S店汽车维修保养管理系统 开题报告 一、项目背景与意义 随着汽车产业的迅猛发展&#xff0c;4S店作…...

小米开放式耳机值得买吗?南卡、小米、漫步者一周横评

​大家好&#xff0c;最近对开放式耳机比较感兴趣&#xff0c;作为一名数码博主以及多年的耳机发烧友&#xff0c;今天想给大家测评一下开放式耳机&#xff0c;这类耳机目前在数码圈非常火热&#xff01;很多喜欢运动的小伙伴都选择了这款耳机&#xff0c;搭配运动场景听歌&…...

解决oracel锁表问题;SQL 错误 [54] [61000]: ORA-00054: 资源正忙

问题描述&#xff1b; SQL 错误 [54] [61000]: ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效 select session_id from v$locked_object;查看这些 session_id 对应的会话的详细信息&#xff0c;包括用户名、机器名、程序等&#xff0c;9596等是select se…...

Jfinal与hibernate-validator实现后台表单

一. pom.xml配置 jfianl maven项目基础上增加 <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>${hibernate-validator.version}</version></dependency><dependency…...

ansible playbook使用jinja2语法渲染inventory下的主机名和IP到/etc/hosts

1. ansible inventory 下面的 hosts内容如下&#xff1a; [all_host] app1 ansible_host10.2.162.147 app2 ansible_host10.2.162.148 app3 ansible_host10.2.162.149 app4 ansible_host10.2.162.150 app5 ansible_host10.2.162.151[nginx] app12. hosts.j2内容如下 127.0.0…...

张飞硬件1~9电阻篇笔记

电阻有标定值和实际值&#xff0c;关于误差的问题&#xff1a; 精密的电流、电压采样可能会用到1%的精度。如果只是做限流用途的话&#xff0c;用5%就足够。 电阻功率&#xff1a;标定值、额定值、瞬态值&#xff1a; 标定值由封装所决定&#xff0c;例如5W额定值由电路中平…...

探索Golang的微观世界:用net/trace包追踪网络操作

标题&#xff1a;探索Golang的微观世界&#xff1a;用net/trace包追踪网络操作 在Go语言的丰富生态系统中&#xff0c;net/trace包是一个强大的工具&#xff0c;它允许开发者深入网络请求的微观世界&#xff0c;洞察每一次数据的流动和操作的执行。本文将详细探讨如何使用net/…...

Unity开发抖音小游戏广告部分接入

Unity开发抖音小游戏广告部分接入 介绍环境确保开通流量主获取广告位广告部分代码测试如下总结 介绍 最近在使用Unity做抖音小游戏这块的内容&#xff0c;因为要接入广告&#xff0c;所以这里我把我接入广告的部分代码和经验分享一下。 环境确保 根据抖音官方的文档我们是先…...

World of Warcraft [CLASSIC] 80 WLK [Gundrak] BUG

World of Warcraft [CLASSIC] 80 WLK [Gundrak] BUG 魔兽世界怀旧版&#xff0c;80级&#xff0c;5人副本古达克&#xff0c;科技队伍&#xff08;BUG队伍&#xff09; 副本有两个门口 这样看&#xff0c;是不是觉得很怪。是的&#xff0c;和图1刚好相反的。 因此应该翻转180…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...