Docker 发布一个springboot项目

news2025/1/20 1:59:18

文章目录

  • 1、新建SpringBootDemo项目并打包
  • 2、使用Dockerfile打包(基础用法)
    • 进一步maven源码打包法
  • 3、更进一步(maven插件打包)
    • docker-maven-plugin
    • spring-boot-maven-plugin
      • 前提条件
      • 本地环境配置
      • 项目环境配置maven插件
      • 打包运行
      • 校验镜像仓库结果
  • 4、总结

1、新建SpringBootDemo项目并打包

一般情况下,我们通过执行:

maven clean
maven compile
maven package

项目在本地会产生target目录,下生成了一个项目jar包。
拿一个很简单的demo作为例子:
在这里插入图片描述
页面:
在这里插入图片描述

2、使用Dockerfile打包(基础用法)

在与target同级,也就是项目根目录下新建一个文件file命名为: Dockerfile
以下基本参数:

FROM openjdk:8
# 指定可以被宿主机文件挂载目录
VOLUME /opt/demo/
# 指定路径
WORKDIR /opt/demo/
# 添加 springboot-web-demo-0.0.1-SNAPSHOT.jar 包到workdir 以 web.jar保存
ADD ["springboot-web-demo-0.0.1-SNAPSHOT.jar", "web.jar"]
EXPOSE 8090
ENTRYPOINT ["java", "-jar", "/web.jar"]

然后使用远程工具(我用的Xftp7),将jar包和Dockerfile文件拖到Linux服务器新建的目录下:
在这里插入图片描述
命令行进入该目录下执行镜像制作:

docker build -t web:test .  # 镜像名:tag   当下目录

查看镜像:

docker images

在这里插入图片描述
然后启动运行:

docker run -d -p 8090:8090 --name test web

映射端口到外界;
容器命名为test,镜像为生成的web
在这里插入图片描述
浏览器访问:
失败。
(我项目端口是8080,暴露8090,不对应)
这里注意端口的映射问题!

  • 项目application.yml 中端口 要和 EXPOSE 端口保持一致;
  • 启动容器时 -p 宿主机端口 : 容器端口,宿主机端口可以任意指定,容器端口即EXPOSE的端口。

否则容器可以正常启动,但是端口未暴露,访问时仍然访问项目自己的端口(在linux下,外界访问不到)

重新修改dockerfile并打包镜像运行后:

curl  ip:port

在这里插入图片描述
浏览器访问:
在这里插入图片描述

总结:

1、本地maven 打包 + 创建Dockerfile文件
2、上传到服务器下Docker环境
3、制作镜像
4、运行

可以看出,貌似并没有为我们的项目部署带来什么便利?仅仅这样,无法体现docker的优势。

进一步maven源码打包法

在Linux docker环境下,可以安装好git、maven,利用:
① git拉取仓库代码;
② mvn打包命令就可以去掉步骤一、二;
③ 制作镜像
④ run运行容器

但是仍然不够简单。


如果环境中没有安装maven,请手动安装,脚本如下:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo
# yum-config-manager --enable epel-apache-maven
// 安装maven
# yum install -y apache-maven

1、上传原码到docker环境中(一般是git/svn直接拉取源码)
在这里插入图片描述

2、maven打包
mvn clean package
在这里插入图片描述

生成的jar在同级target目录下
在这里插入图片描述

3、执行docker命令生成镜像
dockerfile文件内容
在这里插入图片描述

命令创建镜像
在这里插入图片描述

3、更进一步(maven插件打包)

即适用于生产环境下,IDEA代码开发完毕,利用docker-maven插件直接一行命令编译打包生成镜像并推送到Docker主机环境下。
之后只需要Docker下运行 run命令即可运行项目。

docker-maven-plugin

里面集成了Docker客户端,通过docker的api接口发送docker命令。

spring-boot-maven-plugin

这个是Spring Boot官方的插件,在2.x的某个版本(2.3.x)提供了Docker镜像构建能力。


下面,演示一个maven插件:docker-maven-plugin用法,来实现。

前提条件

1、需要我们windows上安装docker服务
2、需要docker服务配置http仓库接口,windows上docker服务配置如下(传统配置模式无权限修改文件)

本地环境配置

1、windows上安装docker-toolbox,傻瓜安装即可。
2、打开Docker Quickstart Terminal终端,等待初始始化完成后。
3、输入docker-machine env命令,返回docker服务的api接口和证书位置,如下:
在这里插入图片描述
4、输入docker-machine ssh命令,进入sh环境中,配置http仓库路径:
在这里插入图片描述
修改文件配置(当前用户是docker不是root,要sudo提升至root):
sudo vi /var/lib/boot2docker/profile
在这里插入图片描述
5、修改完成,保存。重启docker服务
sudo /etc/init.d/docker restart

在这里插入图片描述

项目环境配置maven插件

在我们的工程pom中加入docker-maven-plugin插件的配置,如下:
在这里插入图片描述
1、其中,imageName配置镜像的全路径名,即指定私库的名称
2、dockerHost和dockerCertPath对应配置上一步中docker的api和证书值
在这里插入图片描述

打包运行

以idea为例,整个项目装配完成,只需要操作maven的一二三步骤,即直接镜像进入仓库,整个过程极为便利。
在这里插入图片描述

还可以省去多次点击,直接一句mvn命令完成打包上传:

mvn clean package docker:build -DpushImage

在这里插入图片描述
在这里插入图片描述

校验镜像仓库结果

在这里插入图片描述
至此,我们的服务器环境,已经可以直接运行docker run 镜像启动容器了。

4、总结

写完这篇,逛着逛着发现已经有博主文章将这几种方式都总结过了,我这里放上链接,感兴趣的去看一下:
使用docker部署项目到linux(超详细)


另外,还可参考如下文章(随意,可看可不看):
1、使用docker-maven-plugin插件将项目编译为docker镜像到远程linux服务器
2、idea docker插件打包上传maven项目
3、maven进行docker打包与推送

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

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

相关文章

一文让你了解网络安全和云安全的区别与联系

相信大家对于网络安全和云安全的关系不是很了解,今天小编就和大家来一起聊聊网络安全和云安全的区别与联系,仅供参考哦! 网络安全和云安全的区别 1、两者定义不同。网络安全通常指计算机网络的安全,实际上也可以指计算机通信网络…

同源策略简单解释

浏览器同源策略 什么时同源策略 协议、域名(IP)、端口相同即为同源。浏览器的同源策略是一种约定,是浏览器最核心也是最基本的安全功能,如果浏览器少了同源策略,则浏览器的正常功能可能都会受到影响。 http://192.168.200.131/user/1 https…

全景图!最近20年,自然语言处理领域的发展

夕小瑶科技说 原创 作者 | 小戏、Python 最近这几年,大家一起共同经历了 NLP(写一下全称,Natural Language Processing) 这一领域井喷式的发展,从 Word2Vec 到大量使用 RNN、LSTM,从 seq2seq 再到 Attenti…

【产品经理】高阶产品如何提出有效解决方案?(1方法论+2案例+1清单)

每一件事情总有它的解决方案,在工作中亦是如此,而有效的解决方案,一定是具有系统性的。 有效的解决方案,一定是系统性的解决方案。 什么是系统性解决方案? 从系统结构(或连接关系)入手&#x…

生成2×2 或3*3 混淆矩阵(confusion matrix)的python代码

该代码可以生成22的混淆矩阵。每个矩阵对应的数值可以自行改变。 代码如下: import numpy as np import matplotlib.pyplot as plt# 随机生成值 import numpy as np import matplotlib.pyplot as plt# 创建一个2x2的二分类数据矩阵。这里可以手动改变值 data np…

拨开迷雾:利用全链路消息跟踪揭示系统奥秘

在分布式系统,一次外部请求往往需要内部多个模块,多个中间件,多台机器的相互调用才能完成。在这一系列的调用中,可能有些是串行的,而有些是并行的,排查定位非常困难。 全链路消息分析及全链路消息跟踪可以帮…

C# 简单模拟 程序内部 消息订阅发布功能

文章目录 前言模拟消息订阅发布使用注意事项 前言 我想做个简单的消息发布订阅功能,但是发现好像没有现成的工具类。要么就是Mqtt这种消息订阅发布。但是我只想程序内部进行消息订阅发布,进行程序的解耦。那没办法了,只能自己上了 模拟消息…

yolo-v5学习(使用yolo-v5进行安全帽检测错误记录)

常见错误 跑YOLOv5遇到的问题_runtimeerror: a view of a leaf variable that requi_Pysonmi的博客-CSDN博客 python train.py --img 640 --batch 16 --epochs 10 --data ./data/custom_data.yaml --cfg ./models/custom_yolov5.yaml --weights ./weights/yolov5s.pt 1、梯度…

实例032 动画显示窗体

实例说明 当用户启动程序后,普通的程序窗口都是瞬间显示到屏幕上,这样未免有些生硬。如果窗口能够慢慢的展现在用户面前,将会是什么样的效果?本例设计的是一个动画显示的窗体,该程序运行后,窗体是慢慢的以…

小黑子—JavaWeb:第六章 - Filter、Listener、AJAX与JSON

JavaWeb入门6.0 1. Filter1.1 Filter快速入门1.2 Filter执行流程1.3 Filter拦截路径配置1.4 Filter过滤器链1.5 案例登录验证 2. Listener2.1 ServletContextListener使用 3. AJAX3.1 AJAX 快速入门3.2 案例 验证用户名是否存在3.3 Axios 异步框架3.3.1 Axios 快速入门3.3.2 Ax…

自动驾驶新方法登Nature封面:让黑夜如白昼般清晰,浙大博士一作

摘要: 通过克服传统解决方案中的“重影”问题,这种方法在基准测试中一显巨大优势,不仅能像白天一样看清环境的纹理和深度,还能感知到RGB、热视觉以外的各种物理信息,可谓相当利好机器感知尤其是自动驾驶行业。 利用AI…

Flink多流处理之connect拼接流

Flink中的拼接流connect的使用其实非常简单,就是leftStream.connect(rightStream)的方式,但是有一点我们需要清楚,使用connect后并不是将两个流给串联起来了,而是将左流和右流建立一个联系,作为一个大的流,并且这个大的流可以使用相同的逻辑处理leftStream和rightStream,也可以…

【Leetcode】(自食用)删除链表中倒数第k个结点

step by step. 题目: 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1], n 1 输出&a…

Golang之路---04 并发编程——互斥锁和读写锁

互斥锁和读写锁 面对并发问题,我们始终应该优先考虑使用信道,如果通过信道解决不了的,不得不使用共享内存来实现并发编程的,那 Golang 中的锁机制,就是你绕不过的知识点了。 在 Golang 里有专门的方法来实现锁&#x…

【C++】哈希闭散列

一.哈希的概念 在前面学习了二叉搜索树、AVL树、红黑树之后,我们得知顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须经过关键码的多次比较。顺序查找的时间复杂度为 O(N)&#xff0c…

0.CLIP

目录 前言背景缘起/摘要数据集拟解决问题 精读IntroductionModel2.1自然语言监督2.2 创建一个有效的大数据集选择一个有效的预训练方法2.4 选择模型(选择Encoder)2.5训练小结 实验 复现(略) 前言 本课程来自深度之眼《多模态》训…

找免费商用的图片素材就上这6个网站。

分享6个免费商用的高清图片素材库,你想要找到这里都能找到,赶紧收藏起来吧~ 菜鸟图库 https://www.sucai999.com/pic.html?vNTYwNDUx 网站主要是为新手设计师提供免费素材的,素材的质量都很高,类别也很多,像平面、UI…

Zhang-Suen骨架提取算法

前言 本专栏针对的目标物体为物体裂缝量化,提取裂缝的骨架有助于裂缝长度的求解,故这一篇也是本专栏的开篇。 细化算法选择与分析 裂缝骨架的提取是十分有必要,如果我们能够得到裂缝的骨架图那么就很容易获得整条裂缝的长度。在当前经典的…

机器学习深度学习——序列模型(NLP启动!)

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——卷积神经网络(LeNet) 📚订阅专栏:机器学习&&深度…

地理信息系统空间分析实验教程 第三版 第八章示例与练习 学校选址

学校选址 背景 合理的学校空间位置布局有利于学生的上课与生活。学校的选址问题需要考虑地理 E八位置、学生娱乐场所配套设施、与现有学校的距离等因素,从总体上把握这些国素能够确定出适宜性比较好的学校选址区 目的 通过练习,熟悉 ArcGIS 栅格数据…