Springboot使用dockerfile-maven-plugin构建镜像并推送到Harbor

888 阅读1分钟

官网

配置pom.xml

配置镜像仓库Harbor私服地址

<properties>
    <java.version>1.8</java.version>
    <!--docker私服地址-->
    <docker.repostory>192.16.128.14:9080</docker.repostory>
</properties>

配置dockerfile-maven-plugin

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <version>1.4.10</version>
    <!-- executions 配置执行package时构建image,deploy时push;可注释 -->
    <executions>
        <execution>
            <id>harbor</id>
            <goals>
                <goal>build</goal>
                <goal>push</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <!-- 指定docker镜像的repo名字-->
        <repository>${docker.repostory}/library/${project.artifactId}</repository>
        <!--指定docker镜像的tag-->
        <tag>${project.version}</tag>
        <!--表示访问远程构件库的认证信息在settings.xml中配置-->
        <!--<useMavenSettingsForAuth>true</useMavenSettingsForAuth>-->
        <username>admin</username>
        <password>password</password>
        <buildArgs>
            <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
        </buildArgs>
    </configuration>
</plugin>

编写dockerfile

FROM java:8
EXPOSE 8001

VOLUME /tmp
ARG JAR_FILE
ADD target/${JAR_FILE} /app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar"]

配置docker环境

使用该插件构建Docker镜像,需要有一个安装好的Docker运行环境

默认情况下,插件将尝试连接到 localhost:2375 上的 docker。设置 DOCKER_HOST 环境变量以连接其他地方。

配置DOCKER_HOST环境变量,值为:tcp://localhost:2375

2375是为Docker开启的远程访问API的端口( 2375 和 2376端口,分别对应不加密验证和加密验证)

开启2375

vim /usr/lib/systemd/system/docker.service

# add  -H tcp://0.0.0.0:2375 --graph /data/docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 --graph /data/docker

#保存退出

#重启
[root@logs2 ~]# systemctl daemon-reload
[root@logs2 ~]# systemctl restart docker

linux

# localhost为具体的docker实例ip
export DOCKER_HOST=tcp://localhost:2375

windows

image.png

构建docker镜像

# 单独执行构建命令
mvn dockerfile:build


# 验证 在localhost 所在的服务执行
[root@logs3 ~]# docker images
REPOSITORY                                                       TAG              IMAGE ID       CREATED          SIZE
172.16.128.14:9080/library/springboot-spotify-dockerfile-maven   0.0.1-SNAPSHOT   467bf13ff69d   21 seconds ago   678MB

推送dockers镜像

# 构建成功后执行推送命令
mvn dockerfile:push

错误1

http: server gave HTTP response to HTTPS client

解决1

# add  insecure-registries
vim /etc/docker/daemon.json

{
        "insecure-registries": ["192.16.128.15:9080"]

}

重启

systemctl daemon-reload
systemctl restart docker

验证

image.png

实战demo