docker file 打包jar_SpringBoot打包上传Docker镜像

一、安装windows版的Docker Desktop

项目是在windows 10 上开发的 , maven打包自然也是在 windows 上进行的 ,所以 安装 windows版的docker还是很有必要的...

已安装的跳过...

1、启用Hyper-V

打开控制面板 - 程序和功能 - 启用或关闭Windows功能,勾选Hyper-V,然后点击确定即可,如图:

点击确定后,启用完毕会提示重启系统,我们可以稍后再重启。

2、安装Docker

docker hub 上下载的比较慢 , 这里提供 百度网盘下载 地址

傻瓜式安装就好 ,安装成功后 单击Close and log out,重启一次电脑。

3、启动Docker

在桌面找到Docker for Windows快捷方式,双击启动即可!启动成功后托盘处会有一个小鲸鱼的图标。

打开命令行输入命令:docker -v可以查看当前docker版本号,如图:

复制镜像加速地址,打开docker 设置菜单 settings

在General菜单,打开2375选项,如图所示:

避免C盘系统盘过度占用,更改镜像存放目录,如图所示:

二、打包镜像

首先在你需要打包的项目的根目录新建 Dockerfile 文件

Dockerfile 文件内容如下:

#需要依赖 jdk:8 这个镜像(如果是首次打包,它会自动下载这个镜像)

FROM openjdk:8-jdk-alpine

#维护者、作者的信息

MAINTAINER administrator

#对Spring Boot应用程序为Tomcat创建的默认工作目录进行挂载(就是所有的jar默认放在/tmp下面)

VOLUME /tmp

#构建一个变量,变量名为:JAR_FILE

ARG JAR_FILE

#一个添加命令,把文件添加到镜像中,这里是将 ${JAR_FILE} 添加到 /app/app.jar

#如果 /app 这个文件夹不存在它会自行创建这个文件夹

ADD ${JAR_FILE} /app/app.jar

#指定服务运行的端口,也是之后 -p 要映射的端口

EXPOSE 8073

#启动时的默认命令(就是定义 启动容器时要执行什么命令)

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/app.jar"]

更多的关于构建 Dockerfile 文件的命令 可以参考官网的介绍:Dockerfile reference

pom.xml增加docker插件

修改SpirngBoot项目的pom.xml文件,增加docker集成插件,如下图所示:

在你的 pom.xml 中新增 dockerfile 插件

com.spotify

dockerfile-maven-plugin

1.4.12

1224/${project.artifactId}

${project.version}

target/${project.build.finalName}.jar

之后在项目的根目录下执行打包命令:mvn clean package dockerfile:build

Dockerfile 一定要放到项目的根路径!!(不然它找不到....)

如果是父子项目则放到子项目的根目录就行(就像上图那样....)

正常情况下会出现上面截图的 BUILD SUCCESS字样(也有不正常情况,自行百度异常信息.....)

然后输入 docker images 讲道理是会出现这两个镜像的

使用docker run命令运行这个容器..

使用docker logs命令查看这个容器的运行日志

docker logs imagesId:从到到尾打印这个日志(它也有一个 -f 指令,用于实时查看的)

docker attach imagesId:实时查看容器日志(类似于linux的 tail -f 命令)

三、配置Maven命令默认执行dockerfile命令

为了方便,我们可以将不同的dockerfile命令绑定到不同的maven phase

就是要实现 mvn clean package = mvn clean package dockerfile:build

绑定方式就是在pom.xml中添加相应的配置,如下所示

default

package                       

build

push

这里的 push 你也可以不写(如果你不需要推送的话...)

package也可以不写,不写就是默认的mvn clean deploy

此时你执行:

mvn clean package = mvn clean package dockerfile:build

mvn clean deploy = mvn clean deploy dockerfile:push

默认,构建Dockerfile的过程包含在mvn package阶段;

默认,为Dockerfile打标签的过程包含在mvn package阶段;

默认,发布Dockerfile的过程包含在mvn deploy阶段;

普及下mvn命令

package命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库

install命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库

deploy命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库

当然了 你现在去推镜像 是没有用的,它会报错

还需要做进一步的配置...

四、推送镜像

1、向DockerHub 推送镜像

这里有两种方法,一个是在pom.xml中直接配置username和password来完成push到dockerhub或者private registry,或者在命令行执行时指定mvn goal -Ddockerfile.username=... -Ddockerfile.password=...

我挑选了最省事的...在你的pom.xml文件中只需要在标签里面添加一行true

useMavenSettingsForAuth=true表示访问远程构件库的认证信息在settings.xml中配置,就像这样

这个 1224073217/${project.artifactId} 就是你 docker push 后面的 dockerhub用户名/仓库

然后在你的maven配置文件 settings.xml 中添加你的 docker hub 用户名 和 密码

其中的标签 是本来就存在的 只需要在里面添加 标签就好

docker.io

你的docker hub 用户名

密码

docker hub 注册时的邮箱...

注意其中的 docker.io 不能变,如果你要上传 docker hub 必须指定为 docker.io!!!

它只会找id为 docker.io 的服务,找不到就是没有权限

出现以上错误时,可以参考下github的一个issues: Can't get push to work

然后在你的pom.xml文件中添加对 mvn clean deploy的依赖

org.apache.maven.plugins

maven-deploy-plugin

true

如果没有这个配置虽然可以上传成功,但是会报Deployment failed: repository element was not specified in the POM inside distributionManagement element or in -DaltDeploymentRepository=id::layout::url parameter这个错误

然后执行命令:mvn clean deploy(打包同时上传,如果不出意外的话.....)

会发现[INFO]日志中多出一段上传的信息

至此 docker hub 上传成功,可以对应的查看你的 docker hub 所属的库.

贴上本次上传 docker hub 的所有 pom.xml 中 配置

BackstageApplication

org.springframework.boot

spring-boot-maven-plugin

com.jiuge.BackstageApplication

com.spotify

dockerfile-maven-plugin

1.4.10

default

package

build

push

true

1224073217/${project.artifactId}

${project.version}

target/${project.build.finalName}.jar

org.apache.maven.plugins

maven-deploy-plugin

true

2、向阿里云容器镜像服务中推送镜像

首先请自行创建 阿里云镜像仓库 同时记下你的仓库公网地址

接着上面的配置项进行修改

在你的maven配置文件 settings.xml 中添加你的 阿里云的 用户名 和 密码

然后在你的 pom.xml 中的 configuration 里面指定使用阿里云的服务ID

一共就两行

registry.cn-shanghai.aliyuncs.com

registry.cn-shanghai.aliyuncs.com/daiyuanchuan/${project.artifactId}

注意:这里的serverId一定要是你的容器镜像仓库公网地址的域名(/后面的就不要了...)!!

可以看到日志中的上传地址 已经变成了 阿里云的 容器镜像地址了.

最后是附上本次所有代码(踩了好多坑...)

************************* *★,°*:.☆( ̄▽ ̄)/$:*.°★* 。****************************

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值