项目打包docker镜像 | 上传nexus | jenkins一键构建

文章目录

  • 前言
  • 准备
  • 实操
    • 1、打开docker的远程访问
    • 2、编写dockerfile文件
    • 3、指定nexus环境
    • 4、配置jenkins
    • 5、使用jenkins构建
  • 总结

前言

  Docker部署项目是指使用Docker容器化技术将应用程序及其依赖项打包成一个独立的、可移植的运行环境,并在各种操作系统和平台上进行部署和运行。

  使用Docker的主要原因是解决了应用程序在不同环境中部署和运行的问题。传统上,应用程序在部署时需要考虑操作系统、软件版本、依赖项等因素,不同环境之间存在差异,导致部署和运维变得复杂。

  Docker可以将应用程序及其所有依赖项打包成一个独立的容器,该容器包含了应用程序运行所需的所有组件,如操作系统、库、运行时环境等。这样,无论在哪个环境中部署,只需要安装Docker并运行容器,就可以保证应用程序在各个环境中的一致性和可移植性。


准备

  • maven项目(java)
  • nexus(镜像仓库)
  • gitLab(代码仓库)
  • jenkins构建工具
  • 安装了docker的服务器

实操

1、打开docker的远程访问

  Docker 安装成功之后,首先需要修改 Docker 配置来开启允许远程访问 Docker 的功能。

文件位置:/lib/systemd/system/docker.service

  修改内容: 加入如下内容:

DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"

  服务器开放2375端口

firewall-cmd --zone=public --add-port=2375/tcp --permanent
systemctl restart firewalld

  重启docker

systemctl daemon-reload
systemctl restart docker


2、编写dockerfile文件

  dockerfile文件用来生成docker镜像,镜像就像安装包,可以运行为一个个的容器。

  将dockerfile文件放到resource文件夹下。

FROM openjdk:11
# 将jar包添加到容器中,并命名为 demo.jar
COPY merit-excitation-*.jar /home/admin/merit-backend/merit-excitation-*.jar
#COPY agent /home/admin/agent
# 设置环境变量
ENV SPRING_NACOS_SERVERADDRESS='nacos.tfjy.tech:8848'
ENV SPRING_NACOS_NAMESPACE='merit-test'
# 设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
# 启动jar包命令
#CMD java -javaagent:/home/admin/agent/skywalking-agent.jar -DSW_AGENT_NAME=merit-excitation -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=skywalking.tfjy.tech:11800  -Xms228m -Xmx228m -Dspring.cloud.nacos.config.server-addr=${SPRING_NACOS_SERVERADDRESS} -Dspring.cloud.nacos.config.namespace=${SPRING_NACOS_NAMESPACE} -Dspring.cloud.nacos.config.username=merit -Dspring.cloud.nacos.config.password=merit -Dspring.cloud.nacos.discovery.server-addr=${SPRING_NACOS_SERVERADDRESS} -Dspring.cloud.nacos.discovery.namespace=${SPRING_NACOS_NAMESPACE} -Dspring.cloud.nacos.discovery.username=merit -Dspring.cloud.nacos.discovery.password=merit -jar /home/admin/merit-backend/merit-excitation-*.jar
CMD java -Xms228m -Xmx228m -Dspring.cloud.nacos.config.server-addr=${SPRING_NACOS_SERVERADDRESS} -Dspring.cloud.nacos.config.namespace=${SPRING_NACOS_NAMESPACE} -Dspring.cloud.nacos.config.username=merit -Dspring.cloud.nacos.config.password=merit -Dspring.cloud.nacos.discovery.server-addr=${SPRING_NACOS_SERVERADDRESS} -Dspring.cloud.nacos.discovery.namespace=${SPRING_NACOS_NAMESPACE} -Dspring.cloud.nacos.discovery.username=merit -Dspring.cloud.nacos.discovery.password=merit -jar /home/admin/merit-backend/merit-excitation-*.jar
# SpringBoot项目配置的端口号为9001,需要将9001暴露出去
EXPOSE 9071


3、指定nexus环境

  父pom:

    <profiles><profile><!--不同环境Profile的唯一id--><id>dev</id><properties><!--profiles.active是自定义的字段(名字随便起),自定义字段可以有多个--><profiles.active>dev</profiles.active></properties></profile><profile><id>prod</id><properties><profiles.active>prod</profiles.active><docker-url>http://192.168.0.100:2375</docker-url></properties></profile><profile><id>test</id><properties><profiles.active>test</profiles.active><docker-url>http://192.168.0.200:2375</docker-url></properties><activation><activeByDefault>true</activeByDefault></activation></profile></profiles>

  子pom

    <parent><artifactId>merit-backend</artifactId><groupId>com.xxx</groupId><version>1.0.15</version></parent><modelVersion>4.0.0</modelVersion><artifactId>merit-template</artifactId><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target><registry-url>192.168.0.xxx:8083</registry-url><skipTests>true</skipTests><!--编译打包跳过测试类--></properties><build><finalName>${project.artifactId}-${project.parent.version}</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.2.2</version><configuration><serverId>docker-local</serverId><dockerHost>${docker-url}</dockerHost><imageName>${registry-url}/${project.artifactId}-${profiles.active}:${project.parent.version}</imageName><!--nexus3 hosted 仓库地址--><registryUrl>${registry-url}</registryUrl><!-- 在生成图像后将其推入的标志。默认为false --><pushImage>true</pushImage><imageTags><!-- 指定镜像标签,可以排至多个标签 --><imageTag>${project.version}</imageTag></imageTags><!--是否强制覆盖已有镜像--><forceTags>true</forceTags><!--方式一:1、指定Dockerfile文件所在目录,通过文件执行打包上传nexus私服--><dockerDirectory>src/main/resources</dockerDirectory><!-- 指定docker镜像打包参数,即dockerfile中使用的参数,通过${参数名}取值 --><buildArgs><JAR_FILE>${project.build.finalName}.jar</JAR_FILE></buildArgs><resources><resource><targetPath>/</targetPath><!--指定需要复制的根目录,${project.build.directory}表示target目录--><directory>${project.build.directory}</directory><!--用于指定需要复制的文件,${project.build.finalName}.jar表示打包后的jar包文件--><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin></plugins></build>


4、配置jenkins

  新建一个maven项目的任务

在这里插入图片描述

  旧版本管理
在这里插入图片描述
  设置参数
在这里插入图片描述
  设置git,指定代码分支

在这里插入图片描述

在这里插入图片描述
  打包镜像的命令
在这里插入图片描述
在这里插入图片描述

#!/bin/bashecho admin | sudo -S docker stop merit-excitation
# 删除旧的容器
echo admin | sudo -S docker rm -f merit-excitation
# 删除旧版镜像
echo admin | sudo -S docker rmi 192.168.0.xxx:8083/merit-excitation-prod:${old_version}
#删除所有悬空镜像
echo admin | sudo -S docker rmi $(echo admin | sudo -S docker images -f "dangling=true" -q)
# 启动镜像
echo admin | sudo -S docker run --net=host --restart=always -d --name merit-excitation -p 9071:9071 -e SPRING_NACOS_NAMESPACE=merit-prod -v /home/admin/logs:/logs 192.168.0.xxx:8083/merit-excitation-prod:${new_version}exit


5、使用jenkins构建

  构建时要删除旧版镜像,根据版本号删除镜像,防止占用服务器空间。
在这里插入图片描述
在这里插入图片描述



总结

  配置好以后把镜像推到服务器上运行就很简单了。

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

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

相关文章

vue基于Echarts、百度地图MapVGL实现可视化大屏数据展示

一、布局 常见的大屏数据展示布局&#xff0c;一般会将地图作为整个屏幕的背景&#xff0c;在地图上以九宫格布局展示各类数据图表。实现这一效果可以使地图的z-index1,在地图上的图表等z-index>1,下面会详细描述这种设计该如何实现&#xff1a; <div style"width…

LabVIEW利用局部放电分析高压电气设备状态诊断

LabVIEW利用局部放电分析高压电气设备状态诊断 目前&#xff0c;高压电气设备状态的监控系统解决了早期故障检测的问题。局部放电起源于电力电气装置的绝缘。局部放电会导致绝缘层逐渐磨损和加速老化&#xff0c;因此可能导致绝缘完全击穿。因此&#xff0c;局部放电检测及其特…

2023年中秋节和国庆节放假几天?用待办软件记录放假安排并提醒

进入公历9月&#xff0c;我们都期待着下个长假的到来。那么2023年中秋节和国庆节放假几天呢&#xff1f;因为今年的中秋节是公历的9月29日&#xff0c;所以今年的中秋节和国庆节是连在一起放假的。放假时间安排是9月29日至10月6日&#xff0c;一共放假8天。而10月7日和8日则是调…

Python 之 numpy.unique函数的介绍以及使用

文章目录 介绍语法&#xff1a;返回值&#xff1a;示例&#xff1a;补充[1] 介绍 np.unique 是 NumPy 库中的一个函数&#xff0c;用于从数组中获取唯一的值&#xff0c;并且可以返回这些唯一值的一些相关信息。以下是对 np.unique 函数的详细介绍&#xff1a; 语法&#xff…

菜鸟教程《Python 3 教程》笔记(19):错误与异常

菜鸟教程《Python 3 教程》笔记&#xff08;19&#xff09; 19 错误和异常19.1 assert&#xff08;断言&#xff09;19.2 异常处理19.2.1 try/except19.2.2 try/except...else19.2.3 try-finally 语句 19.3 抛出异常19.4 用户自定义异常19.5 清理行为19.5.1 定义清理行为19.5.2…

Qt MinGW / MSVC

MinGW/MSVC的关系 MinGW / MSVC.dll / .lib / .a 的关系 MinGW / MSVC Qt 中有两种方式编译&#xff1a;一种是MinGW &#xff0c;另一种MSVC&#xff0c;是两种不同的编译器。 MinGW(Minimalist GNUfor Windows)&#xff0c;它是一个可自由使用和自由发布的Windows特定头文件…

KT142C-sop16语音芯片9600串口uart命令如何测试_详细说明

KT142C是一个提供串口的SOP16语音芯片&#xff0c;完美的集成了MP3的硬解码。内置330KByte的空间&#xff0c;最大支持330秒的语音长度&#xff0c;支持多段语音&#xff0c;支持直驱0.5W的扬声器无需外置功放 串口测试的软件截图如下&#xff1a; 7E 3F 00 02 00 04 EF--- 代…

【JavaSE】面试01

文章目录 1. JDK、JRE、JVM之间的关系2. 补充3. 面试题&#xff1a;重载和重写的区别&#xff1f;4. super和this5. &#xff08;重点&#xff01;&#xff01;&#xff09;若父类和子类均有静态代码块、实例代码块以及无参构造方法&#xff0c;则继承关系上的执行顺序&#xf…

opencv 基础(持续更新中)

1 前言 https://www.couragesteak.com/ 2 安装 3 基础属性demo 打开一张图片&#xff1a; import cv2img cv2.imread(./girl.jpg)print(img.shape) # (1536, 1024, 3) 数组形状 print(type(img)) # numpy 数组 print(img) # 三维数组&#xff08;彩色图片&am…

防火墙 FireWall

这里写自定义目录标题 一、概述二、防火墙分类三、防火墙性能四、硬件防火墙定义五、硬件防火墙作用&#xff08;拓扑图 ups&#xff09;六、硬件防火墙品牌七、软件防火墙八、iptables一、iptables是什么&#xff1f;二、netfilter/iptables功能三、iptables概念四、iptables中…

【容器vs虚拟机】

容器vs虚拟机 为什么用虚拟机什么是容器容器vs虚拟机 Docker被称为是轻量级的虚拟化。 首先&#xff0c;一般开发所需要的都是Linux环境&#xff0c;但我们大多数人的电脑都是Windows系统。所以要安装虚拟机&#xff0c;目的是为了在我们当前所使用的Windows上面安装上Linux环境…

kafka管理工具之kafka-ui的环境搭建笔记

由于项目需要kafka支持认证功能&#xff0c;就把kafka升级到3.2.0了。之前一直使用的kafka tools(现在叫Offset Explorer&#xff0c;个人使用免费&#xff0c;商用付费)&#xff0c;开了认证之后就不好用了&#xff0c;卡的很&#xff0c;一点也不丝滑了&#xff0c;于是只好重…