SpringBoot应用打包生成Docker镜像

概述

采用dockerfile-maven-plugin插件配合编写Dockerfile文件,生成docker镜像至本地/远程Docker服务中,所以需要提前安装好docker服务

实现过程

  • 在springboot项目的pom文件中引入dockerfile-maven-plugin插件
		<plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.13</version>
                <executions>
                    <execution>
                        <id>install-after</id>
                        <!--goal(build) 默认绑定在package阶段,会导致maven-install-plugin执行报错,故调整至install阶段-->
                        <phase>install</phase>
                        <goals>
                            <!--将镜像推送到远程docker服务器-->
                            <goal>build</goal>
                            <!--将远程docker服务器的镜像push到镜像仓库-->
                            <goal>push</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!--默认推送到本地的docker(windows本地docker的交互端口为2375-->
                    <repository>${project.artifactId}</repository>
                    <tag>latest</tag>
                    <buildArgs>
                        <APP_Path>/opt/app/${project.artifactId}</APP_Path>
                        <APP_Name>${project.build.finalName}</APP_Name>
                    </buildArgs>
                </configuration>
            </plugin>
  1. repository:镜像的名称
  2. tag:镜像的tag
  3. buildArgs:向Dockerfile中传递参数值

配置参考:https://github.com/spotify/dockerfile-maven

  • 编写Dockerfile
FROM williamyeh/java8:latest

# pom中buildArgs传递过来的参数
ARG APP_Path
ARG APP_Name

# docker run -e传递过来的参数
ENV Java_Memery_Options=""
ENV Spring_Profiles_Active="dev"
ENV Spring_Config_Location="config/"
ENV Dloader_Path="lib"
ENV Jar_File=${APP_Path}/${APP_Name}.jar

VOLUME ${APP_Path}/config
VOLUME ${APP_Path}/logs

COPY target/${APP_Name}.jar ${APP_Path}/${APP_Name}.jar
COPY src/main/resources/application.yaml ${APP_Path}/config/application.yaml
COPY src/main/resources/application-dev.yaml ${APP_Path}/config/application-dev.yaml
COPY src/main/resources/license-config.properties ${APP_Path}/config/license-config.properties
COPY src/main/resources/logback-custom.xml ${APP_Path}/config/logback-custom.xml
COPY lib/bcprov-jdk15on-1.67.jar ${APP_Path}/lib/bcprov-jdk15on-1.67.jar

WORKDIR ${APP_Path}

ENTRYPOINT ["sh","-c","java -jar $Java_Memery_Options -Dspring.profiles.active=$Spring_Profiles_Active -Dspring.config.location=$Spring_Config_Location -Dloader.path=$Dloader_Path $Jar_File"]
  • 开启docker服务的远程链接提供外部访问
  • linux系统

    1.修改docker.service中ExecStart,在后面添加 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

    vi /lib/systemd/system/docker.service
    # centos7
    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
    # centos7以下
    ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375
    

    2.通知docker服务做出的修改

    systemctl daemon-reload
    

    3.重启docker服务

    service docker restart
    

    4.开放防火墙2375端口

    参考:https://blog.csdn.net/longzhanpeng/article/details/82217398

  • windows系统

    参考:https://zhuanlan.zhihu.com/p/148887874

  • 配置Docker服务信息

默认情况下,dockerfile-maven-plugin会调用本地的2375端口,如果需要构建到远程docker服务则需要配置环境变量

DOCKER_HOST
tcp://IP:2375
  • 打包生成镜像

因为dockerfile-maven-plugin的插件目标(build)绑定在install阶段,所以在meven上执行install便会在相应的服务上生成docker镜像

  • 推送镜像到镜像仓库DockerHub/私有仓库

暂未研究

https://www.jianshu.com/p/3929099711ec

问题记录

  1. shell执行报错 Syntax error: “(” unexpected

https://blog.csdn.net/Panda_813/article/details/88634181

  1. CMD和Entrypoint命令使用变量的用法

https://www.cnblogs.com/sanduzxcvbnm/p/15830845.html

  1. 如何将ARG值传递给ENTRYPOINT

https://qa.1r1g.com/sf/ask/2402699421/#

  1. 集成dockerfile-maven-plugin插件后maven-install-plugin打包报错

https://www.cnblogs.com/StarkBrothers/p/11986666.html

启动镜像脚本记录

docker run -itd --name xy-im-preload --network=host --restart=always --privileged=true -v /opt/app/xy-im-preload:/opt/app/xy-im-preload xy-im-preload:latest /bin/bash

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值