【Spring boot 实战】使用Maven插件构建Docker镜像

Docker 同时被 2 个专栏收录
21 篇文章 0 订阅
67 篇文章 1 订阅

本文主要介绍如何使用Maven插件将SpringBoot应用打包为Docker镜像,并上传到私有镜像仓库Docker Registry的过程。

使用Maven构建本地Docker镜像

我们以项目spring-admin为例

在应用的pom.xml文件中添加dockerfile-maven-plugin的依赖

			<plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>${dockerfile-maven-version}</version>
                <executions>
                    <execution>
                        <id>build-image</id>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <repository>andanyoung/${project.artifactId}</repository>
                    <tag>${project.version}</tag>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
                </configuration>
            </plugin>

相关配置说明:

  • executions.execution.phase:此处配置了在maven打包应用时构建(build)docker镜像并执行Push;
  • repository:The repository to name the built image, p r o j e c t . a r t i f a c t I d 为 镜 像 名 称 , {project.artifactId}为镜像名称, project.artifactId{project.version}为镜像版本号;
  • tag:${project.version}为镜像版本号。默认latest;
  • buildArgs:编译参数

在项目根目录新建Dockerfile 文件

FROM openjdk:8-jdk-alpine

MAINTAINER 1218853253@qq.com

ARG JAR_FILE
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

EXPOSE 9020

ADD ${JAR_FILE} app.jar

ENTRYPOINT /usr/bin/java -Djava.security.egd=file:/dev/./urandom -jar app.jar

使用IDEA打包项目并构建镜像

注意:依赖的基础镜像需要先行下载,否则会出现构建镜像超时的情况,比如我本地并没有java8的镜像,就需要先把镜像pull下来,再用maven插件进行构建。

  • 执行maven的package命令:
    执行maven的package命令:
  • 构建成功:
    构建成功
  • 镜像仓库已有该镜像:
    镜像仓库已有该镜像

运行Spring-admin项目

  • 使用docker命令启动 :
docker run -p 9020:9020 --name spring-admin -d andanyoung/spring-admin:0.0.3

  • 进行访问测试,地址:http://localhost:9020/

使用dockerfile-maven-plugin推送到 docker.io

修改dockerfile-maven-plugin 配置

  • 方式一:

    将docker仓库的账号密码写入pom.xml 中。缺点pom.xml在版本控制之内,容易泄露docker仓库账号密码。所以不推荐。

			<configuration>
                    <repository>andanyoung/${project.artifactId}</repository>
                    <tag>${project.version}</tag>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                    <username>andanyoung</username>
      				<password>******</password>
                </configuration>
  • 方式二(推荐):

将账号密码配置在maven的settings.xml文件中。需要设置useMavenSettingsForAuth为true

				<configuration>
                    <repository>andanyoung/${project.artifactId}</repository>
                    <tag>${project.version}</tag>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
                </configuration>
  •   `.m2/settings.xml`
    
<settings>
    <servers>
        <server>
          <id>docker.io</id>
          <username>andanyoung</username>
          <password>******</password>
        </server>
    </servers>
</settings>

推送到官方仓库 docker.io

mvn dockerfile:push

推送到官方仓库 docker.io

推送结果

推送结果

push 推送 官方docker.io 结果

远程 官方docker.io 结果

推送到私仓 - Docker Registry

Docker Registry

Harbor 2.x搭建 参考《搭建Harbor 2.x仓库 - docker私仓搭建》这里不再累赘。

搭建Harbor 2.x仓库 - docker私仓搭建

修改配置

pom.xml

<configuration>
    <repository>${docker.host}/andanyoung/${project.artifactId}</repository>
    <tag>${project.version}</tag>
    <buildArgs>
        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
    </buildArgs>
    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
</configuration>

repository 添加docker.host

.m2/settings.xml

        <server>
          <id>${docker.host}</id>
          <username>andanyoung</username>
          <password>******</password>
        </server>

d o c k e r . h o s t 替 换 为 自 己 的 私 仓 地 址 , 如 果 {docker.host} 替换为自己的私仓地址,如果 docker.host{docker.host}是http的,添加则信任

"insecure-registries": [
 "${docker.host}"
]

在这里插入图片描述

项目源码地址

https://github.com/andanyoung/spring-admin

QA

1. Connect to localhost:2375 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect

Connect to localhost:2375 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect

2. mvn dockerfile:build mvn dockerfile:push 太慢

查看 build time takes too long after update version 1.4.10 to 1.4.13

dockerfile-maven 1.4.13 版本的问题将他切回 1.4.10即可

使用docker-maven构建远程Docker镜像

在应用的pom.xml文件中添加docker-maven-plugin的依赖

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.2.2</version>
    <configuration>
        <imageName>andanyoung/${project.artifactId}</imageName>
        <baseImage>openjdk:8-jdk-alpine</baseImage>
        <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
        <!-- copy the service's jar file from target into the root directory of the image -->
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>

相关配置说明:

  • executions.execution.phase:此处配置了在maven打包应用时构建(build)docker镜像并执行Push;
  • imageName:用于指定镜像名称,andanyoung/ p r o j e c t . a r t i f a c t I d 是 仓 库 名 称 , {project.artifactId}是仓库名称, project.artifactId{project.artifactId}为镜像名称,${project.version}为镜像版本号;
  • dockerHost:打包后上传到的docker服务器地址;
  • baseImage:该应用所依赖的基础镜像,此处为java;
  • entryPoint:docker容器启动时执行的命令;
  • resources.resource.targetPath:将打包后的资源文件复制到该目录;
  • resources.resource.directory:需要复制的文件所在目录,maven打包的应用jar包保存在target目录下面;
  • resources.resource.include:需要复制的文件,打包好的应用jar包。

不推荐该做法,应该Docker配置在pom.xml 上不灵活

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值