【Java】Vert.x使用Maven构建Docker镜像并上传私库

当初为了学习Docker和自动化运维方面的知识,在家里的机器中也部署了一整套运维工具。不得不说这Docker镜像几乎就是磁盘杀手,就一个完整的openj9 jdk镜像就已经差不多500MB了。还好不搞Nightly Build,不然一下子空间就全没了。

随着后面做的尝试越来越多,整套环境运行起来越来越臃肿(加了Nexus、加了Gitlab、加了Jenkins、加了Portainer…),这时我不得不考虑更加轻量化的解决方案。直到我发现原来可以通过Maven的Pom配置打包成Docker镜像时,我决定大刀阔斧做了以下修改:

  1. 砍掉Gitlab,自己本机开发本机部署搞什么Gitlab,没多大意义磁盘一坏该没的还是没了;
  2. 砍掉Nexus,代码版本库都没有了还要代码包管理库干什么;
  3. 砍掉Jenkins,都可以用Maven直接命令打包完成,就不需要Jenkins做持续集成了;
  4. 砍掉Portainer,这个可砍可不砍,纯粹是因为资源不够了所以砍掉了而已;

一套操作下来发现,居然还能战几年。果然是“穷”则变变则通。

要实现Maven构建Docker镜像关键还在于Pom文件,我这边的Pom文件是这样写的:

<properties>
	...
	
	<!-- docker参数 -->
    <!-- 这里是maven docker组件的版本号 -->
	<docker-maven.version>0.36.0</docker-maven.version>
    <!-- 这里是镜像仓库的仓库名称 -->
	<docker.image.registry>vtx</docker.image.registry>
    <!-- 这里是目标仓库的ip和端口地址 -->
	<target-ip.repo>192.168.100.152:5000</target-ip.repo>
	<!-- docker私有仓库机器的tcp2375端口指向 -->
	<docker-host.name>tcp://192.168.100.152:2375</docker-host.name>
    <!-- 这里是私有仓库用户名 -->
	<docker.username>yzh</docker.username>
    <!-- 这里是私有仓库密码 -->
	<docker.password>Pwd</docker.password>
    ...
</properties>
...

<build> 
  <plugins>
    ... 
    <plugin> 
      <groupId>io.fabric8</groupId>  
      <artifactId>docker-maven-plugin</artifactId>  
      <version>${docker-maven.version}</version>  
      <configuration> 
        <!-- 远程docker守护进程url -->  
        <dockerHost>${docker-host.name}</dockerHost>  
        <!-- 远程push权限 -->  
        <authConfig> 
          <push> 
            <username>${docker.username}</username>  
            <password>${docker.password}</password> 
          </push> 
        </authConfig>  
        <images> 
          <image> 
            <!-- 镜像名称(这里注意要包含远程目标仓库的访问前缀) --> 
            <!-- 例子中的是192.168.100.152:5000,不然它会找docker.io上面的 --> 
            <name>${target-ip.repo}/${docker.image.registry}/${project.artifactId}:${project.version}</name>  
            <!-- 构建内容 -->  
            <build> 
              <!-- 基础镜像(采用了jdk11 openj9版本) -->  
              <from>adoptopenjdk:11-openj9</from>  
              <!-- 作者名称 -->  
              <maintainer>yzh0623@outlook.com</maintainer>  
              <!-- 镜像开放端口 -->  
              <ports> 
                <port>8197</port> 
              </ports>  
              <!-- 镜像内挂载目录 -->  
              <volumes> 
                <volume>/tmp</volume> 
              </volumes>  
              <!-- 镜像内工作目录 -->  
              <workdir>/usr/local/share</workdir>  
              <!-- dockerfile中jar包启动参数 -->  
              <entryPoint> 
                <exec> 
                  <arg>java</arg>  
                  <arg>-jar</arg>  
                  <arg>${project.artifactId}-${project.version}.jar</arg>  
                  <arg>-XX:MaxGCPauseMillis=200</arg>  
                  <arg>-Xloggc:/tmp/${project.artifactId}/gc.log</arg>  
                  <arg>-XX:+PrintGCDetails</arg>  
                  <arg>-XX:+PrintGCDateStamps</arg>  
                  <arg>-XX:+UnlockExperimentalVMOptions</arg>  
                  <arg>-XX:+UseG1GC</arg>  
                  <arg>-Djava.security.egd=file:/dev/./urandom</arg>  
                  <arg>-XX:+UseCGroupMemoryLimitForHeap</arg>  
                  <arg>-XX:MaxRAMFraction=1</arg>  
                  <arg>-XX:+HeapDumpOnOutOfMemoryError</arg>  
                  <arg>-cluster</arg> 
                </exec> 
              </entryPoint>  
              <!-- 原始包位置与镜像的前期准备 -->  
              <assembly> 
                <!-- 上传模式 -->  
                <mode>dir</mode>  
                <!-- 上传目录 -->  
                <targetDir>/usr/local/share</targetDir>  
                <!-- jar包描述 -->  
                <descriptorRef>artifact</descriptorRef> 
              </assembly> 
            </build> 
          </image> 
        </images> 
      </configuration>  
      <!-- docker操作执行 -->  
      <executions> 
        <!-- 镜像打包(本地产生镜像) -->  
        <execution> 
          <id>push-image</id>  
          <!-- 对应maven指令package -->  
          <phase>package</phase>  
          <!-- 执行docker命令build\push -->  
          <goals> 
            <!-- 先build,后push -->  
            <goal>build</goal>  
            <goal>push</goal> 
          </goals>  
          <configuration>  
            <imageName>${target-ip.repo}/${docker.image.registry}/${project.artifactId}:${project.version}</imageName> 
          </configuration> 
        </execution> 
      </executions> 
    </plugin> 
  </plugins> 
</build>

(这里我是针对Vert.x应用进行直接Docker构建,如果是Springboot项目还需要进行一些调整。)

在一开始的时候可能各位还会报出以下这个问题,如下图:

Failed to execute goal io.fabric8:docker-maven-plugin:0.33.0:build (build-image) on project phw2-bi-vtx: Cannot create docker access object: Connect to 127.0.0.1:2375 [/127.0.0.1] failed: Connection refused (Connection refused) -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal io.fabric8:docker-maven-plugin:0.33.0:build (build-image) on project phw2-bi-vtx: Cannot create docker access object

这个问题有可能是因为2375端口(Docker对外开发端口)没有开启导致的,通过一下语句查看一下2375端口是否有打开:

# 查看2375端口是否开启
nc -vz -w 2 localhost 2375

nc: connectx to localhost port 2375 (tcp) failed: Connection refused
nc: connectx to localhost port 2375 (tcp) failed: Connection refused

这个时候需要通过启动特殊镜像进行端口开启,如下图:

docker run -it -d \
--name=socat \
-p 2375:2375 \
-v /var/run/docker.sock:/var/run/docker.sock \
--restart=always \
bobrik/socat:latest \
TCP4-LISTEN:2375,fork,reuseaddr \
UNIX-CONNECT:/var/run/docker.sock

接下来就能够正常使用Maven进行构建并上传私库了。

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

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

相关文章

三月份跳槽了,历经字节测开岗4轮面试,不出意外,被刷了...

大多数情况下&#xff0c;测试员的个人技能成长速度&#xff0c;远远大于公司规模或业务的成长速度。所以&#xff0c;跳槽成为了这个行业里最常见的一个词汇。 前几天&#xff0c;我看到有朋友留言说&#xff0c;他在面试字节的测试开发工程师的时候&#xff0c;灵魂拷问三小…

【Shell】脚本

Shell脚本脚本格式第一个Shell脚本&#xff1a;hello.sh脚本常用执行方式1. bash或sh脚本的相对路径或绝对路径2. 输入脚本的绝对路径或相对路径3. 在脚本的路径前加上.或者source脚本格式 脚本以#!/bin/bash开头&#xff08;指定解析器&#xff09; #! 是一个约定的标记&…

让 new bing 使用 GPT-4 编写一个令人满意的程序全过程赏析

让 new bing 使用 GPT-4 编写一个令人满意的程序全过程赏析 标签&#xff1a;new bing、GPT-4 文章目录让 new bing 使用 GPT-4 编写一个令人满意的程序全过程赏析前言1 让 bing 编写一个画螺旋线的程序1.1 我的要求&#xff08;1&#xff09;1.2 bing 的回答全文&#xff08;…

p81 红蓝对抗-AWD 监控不死马垃圾包资源库

数据来源 注意&#xff1a;一下写的东西是在p80 红蓝对抗-AWD 模式&准备&攻防&监控&批量这篇文章的基础上进行的 演示案例&#xff1a; 防守-流量监控-实时获取访问数据包流量 攻击-权限维持-不死脚本后门生成及查杀 其他-恶意操作-搅屎棍发包回首掏共权限…

WPF 认识WPF

什么是WPF?WPF是Windows Presentation Foundation(Windows展示基础)简称&#xff0c;顾名思义是专门编写表示层的技术。WPF绚丽界面如下&#xff1a;GUI发展及WPF历史&#xff1f;Windows系统平台上从事图形用户界面GUI(Graphic User Interface)已经经历了多次换代&#xff0c…

web前端开发和后端开发哪个难度大?

前言 因为涉及到的具体的应用的领域不同&#xff0c;所以说不能简单地说哪一个难&#xff0c;对于前端而言你会感觉到入门会非常的简单&#xff0c;这也是会给许多人一种错觉&#xff0c;前端很简单&#xff0c;但是只能说是在入门理解上是有利于新手的&#xff0c;前端在主要…

二叉树系统刷题1

文章目录**BM26** **求二叉树的层序遍历****BM27** **按之字形顺序打印二叉树****BM28** **二叉树的最大深度****BM29** **二叉树中和为某一值的路径(一)****BM30** **二叉搜索树与双向链表****BM31** **对称的二叉树****BM32** **合并二叉树****BM34** **判断是不是二叉搜索树…

【数据结构】KMP算法细节详解

KMP算法细节详解前言一、字符串匹配问题1.BF算法2.KMP算法二、next数组三、手写nex思想四、机算next思想五、next数组细节理解六、nextVal数组七、KMP算法代码实现八、nextVal数组代码实现完结前言 KMP算法是为了字符串匹配问题而被研究出来的&#xff0c;字符串匹配问题就是查…

真实的软件测试日常工作是咋样的?

最近很多粉丝问我&#xff0c;小姐姐&#xff0c;现在大环境不景气&#xff0c;传统行业不好做了&#xff0c;想转行软件测试&#xff0c;想知道软件测试日常工作是咋样的&#xff1f;平常的工作内容是什么&#xff1f; 别急&#xff0c;今天跟大家细细说一下一个合格的软件测…

【LeetCode每日一题】——面试题17.21.直方图的水量

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【时间频度】八【代码实现】九【提交结果】一【题目类别】 双指针 二【题目难度】 困难 三【题目编号】 面试题17.21.直方图的水量 四【题目描述】 给定一个直方图(也称…

Android Studio 中使用 Gradle 配置多渠道打包 配置不同的渠道名称 配置不同的App名称 配置不同的Logo

废话三种操作都是可以混合一起用的&#xff0c;本来也不是很难的事情&#xff0c;为了方便分别理解&#xff0c;这里我就分开处理了。如果需要将打包出来的apk的名称自动命名成指定格式&#xff0c;也可以进行配置&#xff0c;我这里没这个需求&#xff0c;所以这里就不讨论了。…

晶晨S905D3切换到外部phy方法

文章目录 前言一、s905d3的以太网驱动的理解二、修改设备树注意前言 随着芯片的国产化推荐,越来越多的国产芯片被大家重视起来,但是国产的一些稍微高性能的芯片资料太少,这里把调实phy的流程记录一下,不做太多的理论分析 一、s905d3的以太网驱动的理解 如果拿到sdk后,默…

ESP32设备驱动-ADXL335加速计驱动

ADXL335加速计驱动 文章目录 ADXL335加速计驱动1、ADXL335介绍2、硬件准备3、软件准备4、驱动实现1、ADXL335介绍 ADXL335 是一款小型、薄型、低功耗、完整的 3 轴加速度计,具有信号调理电压输出。 该产品以 3 g 的最小满量程测量加速度。它可以测量倾斜传感应用中的静态重力…

JAVASE/封装、继承、多态

博客制作不易&#xff0c;欢迎各位点赞&#x1f44d;收藏⭐关注前言在学习面向对象编程语言时&#xff0c;封装、继承、多态则是我们必须学习和使用的三大特征。本文通过举例&#xff0c;说明了该三大特征的基本权限特点。一、访问限定符范围private默认权限protectedpublic同一…

springcloud3 nacos,sentinel,ribbon,openfegin等整合案例4[fallback+blockhandler完美整合]

一 说明 1.1 结论 SentinelResource(value "fb",fallback "handlerFallback") //fallback只负责业务异常 SentinelResource(value "fb",blockHandler "blockHandler") //blockHandler只负责sentinel控制台配置违规 假设fallbac…

国内版的ChatGPT弯道超车的机会在哪里?

前言 从去年11月最后一天ChatGPT诞生&#xff0c;截至目前&#xff0c;ChatGPT的热度可谓是爆了。众所周知&#xff0c;ChatGPT是美国“开放人工智能研究中心”研发的聊天机器人程序&#xff0c;它是一个人工智能技术驱动的自然语言处理工具&#xff0c;它能够通过学习和理解人…

Android性能优化的底层逻辑

前言 性能优化仿佛成了每个程序员开发的必经之路&#xff0c;要想出人头地&#xff0c;与众不同&#xff0c;你还真需要下点功夫去研究Android的性能优化&#xff0c;比如说&#xff0c;从优化应用启动、UI加载、再到内存、CPU、GPU、IO、还有耗电等等&#xff0c;当你展开一个…

Docker部署springcloud项目(清晰明了)

概述 最近在想做个cloud项目,gitee上找了个模板项目&#xff0c;后端使用到 Nacos、Gateway、Security等技术&#xff0c;需要到 Docker 容器部署&#xff0c;在此总结一下&#xff0c;若有不足之处&#xff0c;望大佬们可以指出。 什么是 Docker Docker 使用 Google 公司推…

【8】核心易中期刊推荐——人工智能与机器人

🚀🚀🚀NEW!!!核心易中期刊推荐栏目来啦 ~ 📚🍀 核心期刊在国内的应用范围非常广,核心期刊发表论文是国内很多作者晋升的硬性要求,并且在国内属于顶尖论文发表,具有很高的学术价值。在中文核心目录体系中,权威代表有CSSCI、CSCD和北大核心。其中,中文期刊的数…

【C++】Google编码风格学习

Google规范线上地址&#xff1a;https://zh-google-styleguide.readthedocs.io/en/latest/ 文章目录1. 头文件2. 作用域3. 类4. 函数5. 其他C特性6. 命名约定7. 注释8. 格式1. 头文件 每个cpp/cc文件都对应一个h头文件&#xff0c;除单元测试代码和只包含main()的文件外。 所…
最新文章