Spring Boot 2.4 新特性之一键构建Docker镜像的过程详解_docker

来源:脚本之家  责任编辑:小易  

背景

在我们开发过程中为了支持 Docker 容器化,一般使用 Maven 编译打包然后生成镜像,能够大大提供上线效率,同时能够快速动态扩容,快速回滚,着实很方便。docker-maven-plugin 插件就是为了帮助我们在 Maven 工程中,通过简单的配置,自动生成镜像并推送到仓库中。

spotify 、fabric8

这里主要使用的主要是如下两种插件 spotify 、fabric8 , … -配置通过 xml 定义出 Dockerfile 或者挂载外部 Dockerfile 通过调用 Docker remote api 构建出镜像

pig 微服务平台所有的容器化都是基于此构建

<plugin>
 <groupId>com.spotify</groupId>
 <artifactId>docker-maven-plugin</artifactId>
 ... -配置通过 xml 定义出 Dockerfile 或者挂载外部 Dockerfile
</plugin>

<plugin>
 <groupId>io.fabric8</groupId>
 <artifactId>docker-maven-plugin</artifactId>
  ... -配置通过 xml 定义出 Dockerfile 或者挂载外部 Dockerfile
</plugin>

执行相应的插件周期即可 mvn docker:build && mvn docker:push

jib

项目每次发布实际上变更的代码量不大,尤其依赖的 jar 变动的可能性较小,如果使用前两种插件构建镜像,会导致每次都全量构建,会导致存储和带宽资源浪费。

jib 是 Google 于 18 年 7 月发布的一个针对 Java 应用的构建镜像的工具(支持 Maven 和 Gradle) ,好处是能够复用构建缓存,能够加快构建,减小传输体积

<!--配置通过 xml 定义出 Dockerfile ,本质上和外挂 Dockerfile 并无区别-->
<plugin>
  <groupId>com.google.cloud.tools</groupId>
  <artifactId>jib-maven-plugin</artifactId>
</plugin>

mvn jib:dockerBuild

以上三种方案的问题

在实际开发过程中,大部分的 spring boot 项目构建 Dockerfile 都是相同,不需要通过的 XML 或者通过外挂 Dockerfile 来重新定义

以上插件需要对 Dockerfile 的定义知识有相对的了 对开发并不友好

没充分理由 Spring Boot 2.3 以后的 Jar 分层技术。

解决方案

Spring Boot 2.4 推出了自己的 docker 构建工具 整合在原有的 spring-boot-maven-plugin 中,只需要配置对应目标仓库和主机信息即可完成镜像构建。

在这里插入图片描述

如下配置即可完成上图中 通过开发机器在不安装 Docker 的同时,通过 192.168.0.10 的 Docker Remote API 完成镜像构建并发布到 192.168.0.20 的镜像仓库

 <plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
    <image>
      <name>192.168.0.20/pig4cloud/${project.artifactId}</name>
      <!-- 执行完build 自动push -->
      <publish>true</publish>
    </image>
    <!--配置构建宿主机信息,本机不用配置-->
    <docker>
			<host>http://192.168.0.10:2375</host>
      <tlsVerify>false</tlsVerify>
      <publishRegistry>
        <username>username</username>
        <password>password</password>
        <url>192.168.0.20</url>
      </publishRegistry>
    </docker>
  </configuration>
</plugin>

执行以下命令即可完成 镜像的构建和自动发布

mvn spring-boot:build-image

其他说明

docker host 配置不生效

如下图 ① 处配置 节点,但是 ② 报错提示 host 不一致

在这里插入图片描述

检查本地是否配置 $DOCKER_HOST 环境变量,经过阅读源码后发现优先读取此变量。

⋊> ~ echo $DOCKER_HOST                         11:07:51
tcp://172.17.0.111:2375

网络支持

截取部分构建过程中的日志,如下需要从 github 下载相关的依赖 约 100M ,这个过程大概率会失败。建议通过配置代理或者使用国外 ECS 来解决。

 :: Spring Boot ::        (v2.4.0)
[INFO] > Running creator
[INFO]   [creator]     Downloading from https://github.com/bell-sw/Liberica/releases/download/8u275+1/bellsoft-jre8u275+1-linux-amd64.tar.gz
[INFO]   [creator]    JVMKill Agent 1.16.0: Contributing to layer
[INFO]   [creator]     Downloading from https://github.com/cloudfoundry/jvmkill/releases/download/v1.16.0.RELEASE/jvmkill-1.16.0-RELEASE.so
[INFO]   [creator]     Downloading from https://repo.spring.io/release/org/springframework/cloud/spring-cloud-bindings/1.6.0/spring-cloud-bindings-1.6.0.jar
[INFO]   [creator]     Verifying checksum
[INFO]   [creator]      192.168.0.20/pig4cloud/demo:latest
[INFO]
[INFO] Successfully built image '192.168.0.20/pig4cloud/demo:latest'
[INFO] > Pushing image '192.168.0.20/pig4cloud/demo:latest' 100%
[INFO] > Pushed image '192.168.0.20/pig4cloud/demo:latest'
[INFO] BUILD SUCCESS

到此这篇关于Spring Boot 2.4 新特性之一键构建Docker镜像的文章就介绍到这了,更多相关Spring Boot 2.4 构建Docker镜像内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

您可能感兴趣的文章:浅谈SpringBoot2.4 配置文件加载机制大变化详解SpringBoot构建Docker镜像的3种方式springboot docker jenkins 自动化部署并上传镜像的步骤详解springboot整合docker部署实现两种构建Docker镜像方式Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数示例代码

  • 本文相关:
  • docker 容器指定自定义网段的固定ip/静态ip地址
  • 解决docker run时候启动两个占有不同端口的问题
  • 重启docker服务应用自启停命令(推荐)
  • docker快速入门教程
  • 使用docker搭建java环境的步骤方法
  • docker部署ngrinder性能测试平台过程解析
  • docker如何固定ip设置的方法
  • docker.service启动报错的一次排查详解
  • docker如何同时启动多个服务
  • docker volume 挂载卷的实现方法
  • 怎么把spring boot打包成镜像部署到docker
  • docker部署springboot是不是服务器要maven
  • 如何在docker中部署springboot的web应用
  • docker 启动springboot不能上传文件
  • 怎么把spring boot打包成镜像部署到docker
  • springboot使用docker怎么部署到服务器
  • springboot如何连接docker 搭建的redis 哨兵?
  • springboot docker 与dubbo zookeeper 的区别在哪
  • 怎么把spring boot打包成镜像部署到docker
  • 如何在docker中部署springboot的web应用
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全dockerhyper-vvmwarevirtualboxxenserverkvmqemuopenvzxencloudstackopenstack云计算技术云其它首页服务器云和虚拟化浅谈springboot2.4 配置文件加载机制大变化详解springboot构建docker镜像的3种方式springboot docker jenkins 自动化部署并上传镜像的步骤详解springboot整合docker部署实现两种构建docker镜像方式docker 部署 springboot 项目整合 redis 镜像做访问计数示例代码docker 容器指定自定义网段的固定ip/静态ip地址解决docker run时候启动两个占有不同端口的问题重启docker服务应用自启停命令(推荐)docker快速入门教程使用docker搭建java环境的步骤方法docker部署ngrinder性能测试平台过程解析docker如何固定ip设置的方法docker.service启动报错的一次排查详解docker如何同时启动多个服务docker volume 挂载卷的实现方法docker 给运行中的容器设置端口映docker获取镜像报错docker: errodocker 清理命令集锦docker.service启动失败:unit nubuntu14.04+docker的安装及使用浅谈docker-compose网络设置之nedocker容器如何优雅的终止详解docker容器访问宿主机网络的方法centos7 安装docker 解决启动不了详解docker国内镜像拉取和镜像加mac下部署springboot项目到docker中(demo基于docker的etcd分布式部署的方法步骤给debian的docker容器添加crontab定时任务详解使用docker快速部署elk环境(最新5.5docker nginx容器制作部署实现方法kubernetes对象volume用法详解docker创建镜像两种方法详解使用docker快速部署elasticsearch集群的方docker.service启动失败:unit not founddocker添加多网卡的方法
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved