Docker 发布一个springboot项目

文章目录

  • 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打包与推送

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pycharm出现python test运行报错(pytest模式)

pycharm出现python test运行报错 一、python test 执行代码报错二、删除运行配置三、修改pycharm默认配置为 unittests四、成功! 一、python test 执行代码报错 二、删除运行配置 三、修改pycharm默认配置为 unittests 四、成功!

多语言一键铺货跨境电商平台快速开发(java开源)

要搭建一个多语言一键铺货跨境电商平台,可以参考以下步骤: 1. 确定需求:首先,明确平台的功能需求,包括多语言支持、一键铺货功能、跨境支付等。 2. 选择适合的开源项目:选择一个适合的Java开源电商平台项…

C语言系列之原码、反码和补码

一.欢迎来到我的酒馆 讨论c语言中,原码、反码、补码。 目录 一.欢迎来到我的酒馆二.原码 二.原码 2.1在计算机中,所有数据都是以二进制存储的,但不是直接存储二进制数,而是存储二进制的补码。原码很好理解,就是对应的…

SpringBoot + Docker 实现一次构建到处运行~

一、容器化部署的好处 图片 Docker 作为一种新兴的虚拟化方式,它可以更高效的利用系统资源,不需要进行硬件虚拟以及运行完整操作系统等额外开销。 传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行…

vue项目实战-脑图编辑管理系统kitymind百度脑图

前言 项目为前端vue项目,把kitymind百度脑图整合到前端vue项目中,显示了脑图的绘制,编辑,到处为json,png,text等格式的功能 文章末尾有相关的代码链接,代码只包含前端项目,在原始的…

Stephen Wolfram:ChatGPT 的训练

The Training of ChatGPT ChatGPT 的训练 OK, so we’ve now given an outline of how ChatGPT works once it’s set up. But how did it get set up? How were all those 175 billion weights in its neural net determined? Basically they’re the result of very large…

opencv基础-38 形态学操作-闭运算(先膨胀,后腐蚀)cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

闭运算是先膨胀、后腐蚀的运算,它有助于关闭前景物体内部的小孔,或去除物体上的小黑点,还可以将不同的前景图像进行连接。 例如,在图 8-17 中,通过先膨胀后腐蚀的闭运算去除了原始图像内部的小孔(内部闭合的…

在Raspberry Pi 4上安装Ubuntu 20.04 + ROS noetic(不带显示器)

在Raspberry Pi 4上安装Ubuntu 20.04 ROS noetic(不带显示器) 1. 所需设备 所需设备: 树莓派 4 B 型 wifi microSD 卡:最小 32GB MicroSD 转 SD 适配器 (可选)显示器,鼠标等 2. 树莓派…

【山河送书第五期】:《码上行动:利用Python与ChatGPT高效搞定Excel数据分析》参与活动,送书三本!!

《码上行动:利用Python与ChatGPT高效搞定Excel数据分析》 前言内容提要本书亮点购买链接参与方式往期赠书回顾: 前言 在过去的 5 年里,Python 已经 3 次获得 TIOBE 指数年度大奖,这得益于数据科学和人工智能领域的发展&#xff0…

【转】金融行业JR/T0197-2020《金融数据安全 数据安全分级指南》解读

原文链接:金融行业JR/T0197-2020《金融数据安全 数据安全分级指南》解读 《金融数据安全 数据安全分级指南》 解 读 随着IT技术的发展,银行的基础业务、核心流程等众多事务和活动都运营在信息化基础之上,金融机构运行过程中产生了大量的数字…

GNSS基本原理

大家都知道,GNSS卫星之所以能够对地球上的终端(例如手机、汽车、轮船、飞机等)进行定位,依靠的是三维坐标系。 找至少4颗卫星,分别计算各个卫星与终端之间的距离△L(这个距离也被称为“伪距”)&…

RISC-V基础之函数调用(五)函数递归调用及函数参数数量溢出(超出现有寄存器个数)约定(包含实例)

首先先解释一下栈在函数调用中的作用,更详细的部分请参照考研复习之数据结构笔记(五)栈和队列(上)(包含栈的相关内容)_管二狗赶快去工作!的博客-CSDN博客 函数嵌套调用栈的作用是用…

深度学习常用的激活函数

深度学习的核心思想是通过多层次的神经网络结构,逐步抽取和表示数据中的高级特征,从而实现对复杂数据模式的学习和识别。 神经网络结构: 深度学习使用多层次的神经网络,包括输入层、隐藏层和输出层。这些网络结构允许模型自动学习…

手机上的照片怎么压缩?推荐这几种压缩方法

手机上的照片怎么压缩?如果你需要通过电子邮件或短信发送照片,则可能需要将其压缩为较小的文件大小以便于发送。另外,如果您你的手机存储空间有限,可以通过压缩照片来节省空间。下面就给大家介绍几种压缩手机照片的方法。 1、使用…

Leetcode-每日一题【剑指 Offer 21. 调整数组顺序使奇数位于偶数前面】

题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。 示例: 输入:nums [1,2,3,4]输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的…

07 Ubuntu中使用poetry工具管理python环境——巨详细!!!

由于conda和ros2的环境实在太容易冲突了。我真的不敢再使用conda,着实是有些搞不明白这解释器之间的关系。 conda的卸载和ros2的安装暂不赘述,下面着重来说如何在Ubuntu中使用poetry进行包管理及遇到的问题。 1 安装poetry 由于在有写入权限的限制&am…

【Linux初阶】基础IO - 动静态库 | 初识、生成、链接、加载

🌟hello,各位读者大大们你们好呀🌟 🍭🍭系列专栏:【Linux初阶】 ✒️✒️本篇内容:动静态库初识,库的含义,静态库的生成与链接,gcc/g默认链接方式&#xff0c…

配置两台数据库为主从数据库模式

一、主库配置 1、修改配置文件 /etc/my3306.cnf #mysql服务ID,保证整个集群环境中唯一,默认为1server-id1#是否只读,1代表只读,0代表读写read-only0#忽略的数据,指不需要同步的数据库#binlog-ignore-dbmysql#指定同步…

这应该是最全的,Fiddler手机App抓包详解,看完还不会来找我...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 什么是抓包&#…

项目出bug,找不到bug,如何拉回之前的版本

1.用gitee如何拉取代码 本文为转载于「闪耀太阳a」的原创文章原文链接:https://blog.csdn.net/Gufang617/article/details/119929145 怎么从gitee上拉取代码 1.首先找到gitee上想要拉取得代码URL地址 点击复制这里的https地址 1 ps:(另外一种方法&…