Docker笔记(七)使用Docker部署Spring Boot项目

本文介绍如何使用Docker打包并部署Spring Boot多模块项目。

其中本文涉及的Docker的私库是用Nexus3搭建的。

使用Docker部署Spring Boot项目有三种方式

(1)使用 spring-boot-maven-plugin内置的build-image.
(2)使用 Google 的 jib-maven-plugin。
(3)使用 docker-maven-plugin。

以下是三种方式总结

方式需要启动docker需要Dockerfilefat jar
spring boot
jib(Google)
docker-maven

这3个里面最方便的是 SpringBoot 原生的方式,什么都不需要自己做,直接就能用。缺点是需要本地安装并启动Docker,并且下载依赖用Google的,要翻墙,不然会打包失败。另外只能打fat jar,依赖和配置分离的不支持。

最有特点的是Jib,不需要本地安装 Docker和Dockerfile,可以直接推送到指定的仓库,而且使用起来也很简单。需要在pom.xml中配置。

看起来最麻烦的就是 docker-maven-plugin 这个插件了,需要写 Dockerfile和本地安装并启动Docker,还得添加配置,但是,实际上他是最好用的,因为前2个与网络环境有关系,即使你配置了 Docker 镜像,也会报错。

1、使用docker-maven-plugin

1.1 打包时同时打镜像

在pom.xml添加插件docker-maven-plugin依赖,docker要开放2375端口

<build>
    <finalName>demo-center</finalName>
    <plugins>
       <!--docker 插件-->
       <plugin>
           <groupId>io.fabric8</groupId>
           <artifactId>docker-maven-plugin</artifactId>
           <version>0.44.0</version>
           <!--将插件绑定在某个phase执行-->
           <executions>
               <execution>
                   <id>build-image</id>
                   <!--将插件绑定在package阶段,换言之,只要执行mvn package ,就会自动执行mvn docker:build-->
                   <!--等同于命令:mvn clean package docker:build -Dmaven.test.skip=true	-->
                   <phase>package</phase>
                   <goals>
                       <goal>build</goal>
                   </goals>
               </execution>
           </executions>
           <configuration>
               <!-- Docker远程管理地址-->
               <dockerHost>tcp://172.28.168.223:2375</dockerHost>
               <!--私服地址不使用可以不配置-->
               <!--<registry>私服地址</registry>-->
               <images>
                   <image>
                       <!--格式:<harbor_host>/<harbor_project_name>/<image_name>:<tag>-->
                       <name>172.28.168.223:5180/library/${project.artifactId}:${project.version}</name>
                       <build>
                           <args>
                               <!--为Dockerfile中提供参数-->
                               <TAR_FILE>target/${project.build.finalName}-release.tar.gz</TAR_FILE>
                               <APP_NAME>${project.build.finalName}</APP_NAME>
                           </args>
                           <!--dockerFile位置-->
                           <dockerFileDir>${project.basedir}</dockerFileDir>
                       </build>
                   </image>
               </images>
           </configuration>
       </plugin>
   </plugins>
</build>

编写Dockerfile(放在插件所在pom的目录)

FROM openjdk:8-jdk-alpine

# 指定时区
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo Asia/Shanghai > /etc/timezone

# 创建目录
RUN mkdir /app

# 添加阿里的arthas
# ADD arthas /app/arthas

# 插件变量
ARG TAR_FILE
ARG APP_NAME

# 复制tar包
COPY ${TAR_FILE} /app/${APP_NAME}.tar.gz

WORKDIR /app

# 解压tar
RUN tar -xvf ${APP_NAME}.tar.gz

# 标明开放端口,并不做真实映射
EXPOSE 9080

# 执行启动脚本
WORKDIR /app/${APP_NAME}/bin
ENTRYPOINT ["sh", "startup.sh"]

运行打包命令mvn package
在这里插入图片描述
到docker服务查看docker images,发现项目的镜像已打包成功
在这里插入图片描述

1.2 maven deploy时推送镜像到harbor

在上面的插件配置中增加以下内容
在这里插入图片描述
完整的插件配置如下:

<build>
    <finalName>auth-center</finalName>
    <plugins>
        <!--docker 插件-->
        <plugin>
            <groupId>io.fabric8</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.44.0</version>
            <!--将插件绑定在某个phase执行-->
            <executions>
                <execution>
                    <id>build-image</id>
                    <!--将插件绑定在package阶段,换言之,只要执行mvn package ,就会自动执行mvn docker:build-->
                    <!--等同于命令:mvn clean package docker:build -Dmaven.test.skip=true	-->
                    <phase>package</phase>
                    <goals>
                        <goal>build</goal>
                    </goals>
                </execution>
                <execution>
                    <id>push-image</id>
                    <!--将插件绑定在package阶段,换言之,只要执行mvn deploy ,就会自动执行mvn docker:push-->
                    <!--等同于命令:mvn clean deploy docker:push -Dmaven.test.skip=true	-->
                    <phase>deploy</phase>
                    <goals>
                        <goal>push</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <!-- Docker远程管理地址-->
                <dockerHost>tcp://172.28.168.223:2375</dockerHost>
                <!-- Docker推送镜像仓库harbor地址 -->
                <pushRegistry>http://172.28.168.223:5180</pushRegistry>
                <!--harbor私有仓库的用户名与密码-->
                <authConfig>
                    <username>admin</username>
                    <password>Harbor12345</password>
                </authConfig>
                <images>
                    <image>
                        <!--格式:<harbor_host>/<harbor_project_name>/<image_name>:<tag>-->
                        <name>172.28.168.223:5180/library/${project.artifactId}:${project.version}</name>
                        <build>
                            <args>
                                <!--为Dockerfile中提供参数-->
                                <TAR_FILE>target/${project.build.finalName}-release.tar.gz</TAR_FILE>
                                <APP_NAME>${project.build.finalName}</APP_NAME>
                            </args>
                            <!--dockerFile位置-->
                            <dockerFileDir>${project.basedir}</dockerFileDir>
                        </build>
                    </image>
                </images>
            </configuration>
        </plugin>
    </plugins>
</build>

运行mvn clean deploy会同时把包上传到maven仓库、镜像上传到harbor
在这里插入图片描述
登录Harbor可以看到上传的镜像
在这里插入图片描述

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

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

相关文章

STM32CubeMX软件使用(超详细)

1、Cube启动页介绍 2、芯片选择页面介绍 3、输入自己的芯片型号&#xff0c;这里以STM32U575RIT6举例 4、芯片配置页码介绍 5、芯片外设配置栏详细说明 6、点击ClockConfiguration进行时钟树的配置&#xff0c;选择时钟树后可以选择自己想使用的时钟源&#xff0c;也可以直接输…

MySQL数据库——基础事务操作-BEGIN-COMMIT-ROLLBACK

DDL CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT COMMENT 学号,createDate datetime DEFAULT NULL,userName varchar(20) DEFAULT NULL,pwd varchar(36) DEFAULT NULL,phone varchar(11) DEFAULT NULL,age tinyint(3) unsigned DEFAULT NULL,sex char(2) DEFAU…

MySQL企业级开发重点之事物和索引

事物 -- 解散学工部 delete from tb_dept where id 1;-- 删除部门下的员工 delete from tb_emp where dept_id 1; 介绍和操作 我们应该将两个语句写成一个语句 -- 开启事物 start transaction ;-- 解散学工部 delete from tb_dept where id 3;-- 删除部门下的员工 delete fr…

Word页脚设置“第X页共X页”的方法【域实现】

Word页脚设置“第X页共X页”的方法【域实现】 在设置Word页码格式的要求中&#xff0c;有时需要设置为“第X页共X页”这种格式&#xff0c;使用Word中的域功能可实现&#xff0c;同时&#xff0c;在某些情况下&#xff0c;可能还需要减去封面的页码&#xff0c;接下来为具体步…

传感器—超声波雷达

声波技术 在讲述超声波雷达之前&#xff0c;先了解一下声波的概念以及超声波和声波之间的关系 什么是声波&#xff1f; 声波是物体机械振动状态&#xff08;或能量&#xff09;的传播形式。所谓振动是指物质的质点在其平衡位置附近进行的往返运动形式&#xff0c;这种振动状…

JAVA文件的简单操作

文件IO&#xff08;Input和Output&#xff09; 文件的输入和输出是人为规定的&#xff0c;那么什么是输入&#xff1f;什么是输出捏&#xff1f;在这里统一已CPU为基准 例如&#xff1a;将文件由内存写入硬盘就是输出&#xff0c;有硬盘写入内存就是输入。可以总结为&#xff…

C语言—深入理解指针(3)

1.字符指针变量 一般使用&#xff1a; 另一种使用方法&#xff1a; “hello world”是一个常量字符串&#xff0c;不能被修改。 上述代码是将字符串中的首字符‘h’赋值给指针pstr&#xff0c;用%s打印字符串的时候&#xff0c;只需要提供首字符的地址就行。&#xff08;如果…

LoadRunner性能测试基本步骤

前言 本文旨在指导初学者使用LoadRunner进行基础的性能测试。 我们在接到一个性能测试任务的时候&#xff0c;需要从以下几点考虑&#xff1a;我们的测试对象是什么&#xff0c;测试要求是什么&#xff0c;测试环境怎么部署的&#xff0c;业务规模如何&#xff0c;哪些业务点是…

这是一关于DSC相关的文档

这是一关于DSC相关的文档 上面这幅图清晰的展示了somewhat flat的像素图示

CRMEB 开源/标准版商城系统客服配置教程

管理后台/设置/系统设置/商城配置/客服端配置 有系统客服/拨打电话/跳转链接可选&#xff0c;系统客服为系统自带的客服系统&#xff0c;拨打电话为用户点击联系客服为拨打客服电话的方式&#xff0c;跳转链接为可以跳转自己开发的客服系统或者第三方的客服系统或者企业微信的…

etcd单机部署和集群部署

1、etcd单实例部署 对于平常的学习&#xff0c;其实搭建一个单机节点是够了的。接下来就讲讲怎么搭建单机节点。 本次部署是在 centos7 系统&#xff0c;cpu 为amd64 上面进行的。 部署是直接使用官方编译好的二进制文件&#xff0c;大家也可以直接看 ectd-releases 界面选择…

开源交互审计系统:功能强大、安全好用【送源码】

在当今信息化时代&#xff0c;网络安全越来越受到重视。传统的远程控制工具&#xff0c;如RDP、SSH、VNC等&#xff0c;虽然方便易用&#xff0c;但存在安全隐患&#xff0c;容易被黑客利用。很多时候我们都需要做一些防护的处理来来保障网络安全。 今天了不起来分享一款开源好…

OSPF链路状态数据库

原理概述 OSPF是一种基于链路状态的动态路由协议&#xff0c;每台OSPF路由器都会生成相关的LSA&#xff0c;并将这些LSA通告出去。路由器收到LSA后&#xff0c;会将它们存放在链路状态数据库LSDB中。 LSA有多种不同的类型&#xff0c;不同类型的LSA的功能和作用是不同的&…

LearnOpenGL(十一)之光源

一、投光物 将光投射(Cast)到物体的光源叫做投光物(Light Caster)。 二、平行光 当一个光源处于很远的地方时&#xff0c;来自光源的每条光线就会近似于互相平行&#xff0c;我们可以称这些光为平行光。当我们使用一个假设光源处于无限远处的模型时&#xff0c;它就被称为定向…

django显示网页步骤

显示网页步骤 小白的django学习笔记 2024/5/6 8:30 文章目录 显示网页步骤创建输入框&#xff08;文本、单选、多选&#xff09;效果如何在django中显示网页写函数配置地址运行&#xff0c;要选择这个工程名的&#xff0c;使用socket复制ip&#xff0c;后面在加上名字,成功&…

Final Draft 12 for Mac:高效专业剧本创作软件

对于剧本创作者来说&#xff0c;一款高效、专业的写作工具是不可或缺的。Final Draft 12 for Mac就是这样一款完美的选择。这款专为Mac用户设计的剧本创作软件&#xff0c;凭借其卓越的性能和丰富的功能&#xff0c;让您的剧本创作更加得心应手。 Final Draft 12支持多种剧本格…

react+antd --- 日期选择器,动态生成日期表格表头

先看一下效果---有当前月的日期 技术: 1: react 2:antd-UI库 -- table 3:moment--时间处理库 代码效果: import { Button, DatePicker, Table } from antd; import { useEffect, useState } from react; import moment from moment;function Club() {const [selecte…

Vue3自定义封装音频播放组件(带拖拽进度条)

Vue3自定义封装音频播放组件&#xff08;带拖拽进度条&#xff09; 描述 该款自定义组件可作为音频、视频播放的进度条&#xff0c;用于控制音频、视频的播放进度、暂停开始、拖拽进度条拓展性极高。 实现效果 具体效果可以根据自定义内容进行位置调整 项目需求 有播放暂停…

特征融合篇 | YOLOv8改进之利用ASF-YOLO重构特征融合层 | 助力小目标检测

前言:Hello大家好,我是小哥谈。ASF-YOLO是一个目标检测模型,它基于YOLOv3算法,并引入了ASF(Anchor-Free Spatial Attention)模块。ASF模块可以自适应地学习特征图上每个位置的不同感受野,提高了模型对于小目标的检测能力。相比于YOLOv3,ASF-YOLO在保持准确率的同时大大…

3d里如何做螺旋状模型?---模大狮模型网

螺旋状模型在3D设计中常常被运用&#xff0c;不仅可以用于创造独特的装饰品和艺术品&#xff0c;还可以用于建筑设计、工程模拟等领域。然而&#xff0c;对于初学者而言&#xff0c;如何在3D软件中创建螺旋状模型可能是一个挑战。在本文中&#xff0c;我们将分享几种简单而有效…
最新文章