本文比较完整介绍使用 dockerMaven 插件,通过dockerFile配置方式, 在远程主机生成springboot 项目镜像
说明:关于docker 私有仓库搭建和怎样开放docker可以远程访问,请自行查资料解决,私库搭建可以参考 https://www.cnblogs.com/Tempted/p/7768694.html,是我觉得写得比较好的。
步骤:
1,在springBoot项目(你需要在docker上生成镜像的项目)的pom.xml中加入以下配置
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.0</version>
<configuration>
<!--如果要推送到docker 私有仓库 imageName 需要加上仓库地址-->
<imageName>192.168.168.220:5000/${project.build.finalName}</imageName>
<!--指定docker 文件目录 ${basedir} 为当前项目根目录-->
<dockerDirectory>${basedir}/docker</dockerDirectory>
<!-- 镜像标签 ${maven.build.timestamp} maven环境变量当前时间戳,这样打的标签应该每次都不一样 -->
<imageTags>
<imageTag>${maven.build.timestamp}</imageTag>
</imageTags>
<!--配置 需要复制到镜像中心jar 包 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>
上面的插件配置有几点说明一下
dockerDirectory 标签配置的是Dockerfile的路径,你需要到这里指定的目录下去写dockerfile文件,这个后面会有示例。
imageTags标签采用了一个 maven 默认当前时间的环境变量,可以通过标签指定时间格式<maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>,我这里的目的只是为了构建镜像到远程主机的时候不要覆盖我上一次建的镜像,所以采用了这样一个取巧的方式生成镜像的tag
<resources> 会将你构建的在target目录下的spirngboot jar包 复制到镜像,所以在使用插件构建镜像之前,你需要将你springboot jar包在该目录下打好
其他的诸如 ${project.build.finalName} 环境变量如果不知道,请自行查阅一下吧。
2,在pom.xml 中 properties 中添加 dockerHost环境变量,如下:
<properties>
<dockerHost>http://192.168.168.220:2375</dockerHost>
<!-- 设置时间格式 -->
<maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
</properties>
dockerHost代表你的远程docker主机,默认是取 的localhost:2375 ,由于我们发布到远程,所以需要配置。这一步官网插件有说明。
3,在docker目录下建Dockerfile,目录位置和dockerFile文件内容如下
#指定基础镜像jdk11 该镜像是我自己新建的,你要指定你远程doker主机上存在的jdk镜像
FROM 192.168.168.220:5000/jdk11
MAINTAINER AllenYang
# 下面两行命令 配置 解决的是容器和jvm 时区和宿主机不一致的问题
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
EXPOSE 8888
ADD /${project.build.finalName}.jar //
#--spring.profiles.active=dev 指定打包环境,没有环境的可以取消
ENTRYPOINT ["java", "-jar", "${project.build.finalName}.jar","--spring.profiles.active=dev"]
注意上面 ${project.build.finalName} 替换为实际构建的jar包的名称
4,在 项目的maven 命令处找到docker ,如下图
执行docker:build 就可以在远程主机上镜像了,你可以在远程主机上 通过docker images 查看一下,是否生成了镜像
执行docker:push 会将镜像推送到你建立的docker镜像仓库 。你也可以在终端执行插件的命令
再次提醒,执行上面两个操作之前,记得先package
可以 通过交互式的方式 启动一下容器,看是否成功 :
交互式启动:docker run -ti -p 11001:11001 镜像名称:镜像tag /bin/bash