• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Spring Boot Docker打包工具小结

    最近公司的应用准备容器化,因为几十个应用从测试到发布太麻烦了,而且还会因为环境的因素导致部署中出现各种问题。为了在开发、测试、生产都能保持一致的环境,就引进了容器技术,先拿边缘的项目试试水,积累下经验,今天对几种常见的Spring Boot Docker打包工具进行了简单总结。

    Spring Boot Docker

    在Spring Boot应用中,我们可以约定不同的标识来定义不同的环境。例如 dev 表示开发环境、test表示测试环境,对应的配置文件为apppcation-dev.yaml、apppcation-test.yaml。我们通过声明spring.profiles.active来激活对应的环境配置,例如激活dev环境时spring.profiles.active=dev。完整的启动命令为:

    java -Djava.security.egd=file:/dev/./urandom  -Dspring.profiles.active=dev -jar spring-boot-app.jar  

    根据上面的命令编写一个能够适应多环境的Dockerfile:

    # 引入 openjdk 镜像 
    FROM adoptopenjdk/openjdk8 
    # 声明作者 
    LABEL AUTHOR=felord OG=felord.cn 
    # 挂载几个有用的文件夹 比如日志 
    VOLUME ["/tmp","/logs"] 
    # 声明一个环境参数用来动态启用配置文件 默认dev 
    ENV ACTIVE=dev 
    # 暴露端口 
    EXPOSE 8080 
    # 复制并修改应用打包后的jar文件名称 
    ADD /target/flyway-spring-boot-1.0.0.jar app.jar 
    # 容器启动时第一个运行的命令 用来启动应用 
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=${ACTIVE}","-jar","app.jar"] 

    这样打包的Docker镜像就可以通过docker run添加额外的--env ACTIVE=test 来动态的改变环境。单纯的编写Dockerfile不方便我们DevOps。

    docker 镜像生命周期

    我们需要能够自动地构建、推送到仓库、拉取镜像、运行一系列流水线操作。好在市面上有很多工具来帮助我们实现这一过程。

    spring-boot-maven-plugin

    这个是Spring Boot官方的插件,在2.x的某个版本提供了Docker镜像构建能力。

    <project> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-maven-plugin</artifactId> 
        <configuration> 
         <image> 
         <name>docker.repo.com/library/${project.artifactId}:${project.version}</name> 
          <publish>true</publish> 
         </image> 
         <docker> 
          <publishRegistry> 
           <username>user</username> 
           <password>secret</password> 
           <url>https://docker.repo.com/v1/</url> 
           <email>user@example.com</email> 
          </publishRegistry> 
         </docker> 
        </configuration> 
       </plugin> 
      </plugins> 
     </build> 
    </project>

    配置好Docker私仓后就可以通过mvn clean spring-boot:build-image 进行构建镜像了。

    这种方式好处就是无额外依赖,缺点就是需要从github下载构建元件,网络如果不好就容易失败。

    Spotify Maven Plugin

    Spotify Maven 插件是一个目前比较普遍的选择。它要求应用程序开发人员编写Dockerfile,并把Dockerfile放在项目src/main/docker目录下。然后你就可以通过引入:

    <plugin> 
              <groupId>com.spotify</groupId> 
              <artifactId>dockerfile-maven-plugin</artifactId> 
              <version>1.4.8</version> 
              <configuration> 
                  <repository>repo.com/${project.artifactId}</repository> 
              </configuration> 
          </plugin> 

    这个插件提供了mvn dockerfile:build、mvn dockerfile:tag、mvn dockerfile:push三个命令分别用来构建、打标签、发布到远端私有仓库,非常简单。

    这个是一个非常容易上手的插件,唯一的要求就是需要会编写Dockerfile,对定制化要求高的可以使用这个。

    Jib Maven Plugin

    这个曾经我在早些时候的一篇文章中已经介绍过了,可以详细了解一下。它是谷歌开源的OCI镜像打包工具,可以用来打包Docker镜像,大部分情况下已经满足需要。但是如果你要定制化的话还是不容易的,需要阅读官方给的文档。最开始的Dockerfile如果使用JIb的话需要这样配置:

    <plugin> 
        <groupId>com.google.cloud.tools</groupId> 
        <artifactId>jib-maven-plugin</artifactId> 
        <version>3.0.0</version> 
        <configuration> 
            <from> 
                <image>adoptopenjdk/openjdk8</image> 
            </from> 
            <to> 
                <image>docker.repo.com/library/${project.artifactId}</image> 
                <auth> 
                    <username>felord</username> 
                    <password>xxxxxx</password> 
                </auth> 
                <tags> 
                    <tag>${project.version}</tag> 
                </tags> 
            </to> 
            <extraDirectories> 
                <paths> 
                    <path> 
                        <from>target/${project.artifactId}-${project.version}.jar</from> 
                        <includes>*.jar</includes> 
                        <into>/app.jar</into> 
                    </path> 
                </paths> 
            </extraDirectories> 
            <containerizingMode>packaged</containerizingMode> 
            <container> 
                <volumes>/tmp,/logs</volumes> 
                <ports> 
                    <port>8080</port> 
                </ports> 
                <environment> 
                    <active>dev</active> 
                </environment> 
                <entrypoint> 
                    java,-Djava.security.egd=file:/dev/./urandom,-Dspring.profiles.active=${active},-jar,/app.jar 
                </entrypoint> 
                <creationTime>USE_CURRENT_TIMESTAMP</creationTime> 
            </container> 
        </configuration> 
    </plugin> 

    优点是不需要本地Docker环境,而且支持分层构建、镜像瘦身,上手容易;缺点是定制化比较困难。

    到此这篇关于Spring Boot的 Docker打包插件哪个好用的文章就介绍到这了,更多相关Spring Boot Docker打包插件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    上一篇:使用 Azure Container Registry 储存镜像的问题
    下一篇:Tomcat源码解析之Web请求与处理
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Spring Boot Docker打包工具小结 Spring,Boot,Docker,打包,工具,