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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

知识付费系统开发:构建高效智能的付费内容平台

随着数字化时代的来临,知识付费正迅速崭露头角,为知识创作者和求知者带来了全新的商机。在这个背景下,开发一款高效智能的知识付费系统成为了一项重要的任务。本文将深入探讨如何基于Python编程语言和相关技术构建一个智能的知识付费内容平台…

芯片热处理设备 HTR-4立式4寸快速退火炉

HTR-4立式4寸快速退火炉 HTR-4立式4寸快速退火炉(芯片热处理设备)广泛应用在IC晶圆、LED晶圆、MEMS、化合物半导体和功率器件等多种芯片产品的生产,和欧姆接触快速合金、离子注入退火、氧化物生长、消除应力和致密化等工艺当中,通…

Jmeter响应中的乱码问题

文章目录 问题描述解决办法 问题描述 Jmeter在访问接口的时候,响应内容如果有中文可能会显示乱码 响应页面没有做编码处理,JMeter默认按照ISO-8859-1编码格式进行解析 解决办法 在线程组中添加BeanShell PostProcessor后置处理器 prev.setDataEnco…

kali常见字典目录

kali常见字典目录 Kali Linux 是一个流行的渗透测试和安全评估操作系统,它预装了许多用于渗透测试和安全研究的工具,包括各种字典文件。以下是一些 Kali Linux 中常见的字典目录: 当然可以!以下是 Kali Linux 中常见的一些字典目…

【云原生】kubernetes在Pod中init容器的作用和使用

目录 Pod 中 init 容器 1 init 容器特点 2 使用 init 容器 Pod 中 init 容器 Init 容器是一种特殊容器,在Pod 内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。 1 init 容器特点 init 容器与普通的容器非常像&#xf…

2020年09月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题 第1题 Python自带的编程环境是? A:PyScripter B:Spyder C:Notepad D:IDLE 正确的答案是:D Python自带的编程环境是IDLE(Integrated Development and Learning Environment&a…

web集群学习:源码安装nginx配置启动服务脚本、IP、端口、域名的虚拟主机

目录 1、源码安装nginx,并提供服务脚本。 2、配置基于ip地址的虚拟主机 3、配置基于端口的虚拟主机 4、配置基于域名的虚拟主机 1、源码安装nginx,并提供服务脚本。 1、源码安装会有一些软件依赖 (1)检查并安装 Nginx 基础依赖…

element表格+表单+表单验证结合运用

目录​​​​​​​ 一、结果展示 二、实现代码 一、结果展示 1、图片 2、描述 table中放form表单,放输入框或下拉框或多选框等; 点击添加按钮,首先验证表单,如果存在没填的就验证提醒,都填了就向下添加一行表单表…

电脑怎么备份文件?学会这4招!

“由于我是个比较粗心的人,平常很容易把一些文件弄不见。因此,我想把电脑中一些比较重要的文件进行备份,有没有朋友知道电脑怎么备份文件呢?求解答!” 在使用电脑时,可能经常会由于各种突然原因导致我们的文…

MONGODB ---- Austindatabases 历年文章合集

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…

【框架篇】MyBatis 介绍及使用(详细教程)

一,MyBatis 介绍 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff…

阿里云ssl免费数字证书快过期 如何更换

1.登陆阿里云 找到ssl 查看快过期的证书 数字证书管理服务-ssl证书 2.创建免费的证书,对应过期证书的域名 3.下载新证书 pem key放在本地 此处记录本地的下载路径 /Users/dorsey/Downloads/10791167_lzzabc.cn_nginx/lzzabc.cn.pem /Users/dorsey/Downloads/1…