在本文中,我们将带你了解ideaMaven插件docker-maven-plugin打包docker镜像上传到远程仓库在这篇文章中,我们将为您详细介绍ideaMaven插件docker-maven-p
在本文中,我们将带你了解idea Maven 插件 docker-maven-plugin 打包docker镜像上传到远程仓库在这篇文章中,我们将为您详细介绍idea Maven 插件 docker-maven-plugin 打包docker镜像上传到远程仓库的方方面面,并解答maven dockerfile远程打包镜像常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的Docker Spring boot 项目使用 docker-maven-plugin 执行mvn docker:build 打成镜像、docker(三):使用maven 插件构建docker镜像、docker(六) 使用docker-maven-plugin插件构建docker镜像、docker(六) 使用docker-maven-plugin插件构建docker镜像(已过时)。
本文目录一览:- idea Maven 插件 docker-maven-plugin 打包docker镜像上传到远程仓库(maven dockerfile远程打包镜像)
- Docker Spring boot 项目使用 docker-maven-plugin 执行mvn docker:build 打成镜像
- docker(三):使用maven 插件构建docker镜像
- docker(六) 使用docker-maven-plugin插件构建docker镜像
- docker(六) 使用docker-maven-plugin插件构建docker镜像(已过时)
idea Maven 插件 docker-maven-plugin 打包docker镜像上传到远程仓库(maven dockerfile远程打包镜像)
参考资料 https://my.oschina.net/u/3764794/blog/2995648
原理:
docker-maven-plugin 调用一个 docker 的api,进行打包镜像,tag标签,push到远程仓库。
远程仓库的密码,在本地maven 的setting.xml里配置一个server ,idea根据id可以获取到远程仓库的账号,密码
一、docker主机开启docker 远程访问API
Ubuntu:
vi /lib/systemd/system/docker.service
Centos7
vi /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
修改完后 重置重启
systemctl daemon-reload
systemctl restart docker
防火墙开放端口:2375
验证
http://ip:2375/images/json 或 curl http:/ip:2375/info
二、在docker主机配置远程仓库地址,以便非https 也能访问
vi /etc/docker/daemon.json
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com"
],
"insecure-registries": ["registry1的IP地址:端口号","registry2的IP地址:端口号"]
}
修改完后 重置重启
systemctl daemon-reload
systemctl restart docker
三、maven 配置 远程仓库的账号密码
编辑 maven settings.xml文件
<server>
<id>local_docker</id>
<username>lulu</username>
<password>123456</password>
</server>
四、pom 配置
<properties>
<project.name>bluetoothled</project.name>
<!-- 私有仓库配置,需要settings.xml文件配合serverId对应的仓库服务 账号密码 -->
<docker.serverId>local_docker</docker.serverId>
<docker.registry>192.168.182.100:5000</docker.registry>
<docker.host>http://192.168.182.100:2375</docker.host>
</properties>
<build>
<plugins>
<!-- Srping Boot 打包工具 打包成可执行的jar -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<!--打包后 复制jar包到指定文件目录-->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>copy-resources</id>
<!-- here the phase you need -->
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<!-- 复制资源后的输出目录 -->
<outputDirectory>target</outputDirectory>
<resources>
<resource>
<directory>src/main/docker</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- docker插件 -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.0</version>
<configuration>
<!-- 私有仓库配置,需要settings.xml文件配合serverId对应的服务地址 -->
<serverId>${docker.serverId}</serverId>
<!-- docker私服地址 -->
<registryUrl>${docker.registry}</registryUrl>
<!-- 指定docker server的地址,该配置不需要本机安装docker -->
<dockerHost>${docker.host}</dockerHost>
<imageName>${project.name}/${project.artifactId}:${project.version}</imageName>
<imageTags>
<imageTag>${project.version}</imageTag>
</imageTags>
<!-- docker的构建目录(构建上下文),包含Dockerfile -->
<dockerDirectory>target</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
<executions>
<!-- package之前清除上一次构建的image -->
<execution>
<id>remove-image</id>
<phase>package</phase>
<goals>
<goal>removeImage</goal>
</goals>
<configuration>
<imageName>
${project.name}/${project.artifactId}
</imageName>
<imageTags>
<imageTag>${project.version}</imageTag>
<imageTag>latest</imageTag>
</imageTags>
</configuration>
</execution>
<execution>
<id>remove-tag-image</id>
<phase>package</phase>
<goals>
<goal>removeImage</goal>
</goals>
<configuration>
<imageName>
${docker.registry}/${project.name}/${project.artifactId}
</imageName>
<imageTags>
<imageTag>${project.version}</imageTag>
<imageTag>latest</imageTag>
</imageTags>
</configuration>
</execution>
<!-- 将docker:build绑定到package这个phase -->
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
<configuration>
<!-- imageName中若不指定tag,则会打上latest -->
<imageName>${project.name}/${project.artifactId}:${project.version}</imageName>
<!-- 可以使用<imageTags>标签打其他额外的tag -->
</configuration>
</execution>
<!-- 将docker:tag绑定到package这个phase -->
<execution>
<id>tag-image</id>
<phase>package</phase>
<goals>
<goal>tag</goal>
</goals>
<configuration>
<!-- docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG] -->
<!-- images与IMAGE[:TAG]对应,必须在build阶段已经构建了 -->
<image>${project.name}/${project.artifactId}:${project.version}</image>
<!-- newName与tag命令的第二个参数对应 -->
<newName>
${docker.registry}/${project.name}/${project.artifactId}:${project.version}
</newName>
</configuration>
</execution>
<execution>
<id>tag-image-latest</id>
<phase>deploy</phase>
<goals>
<goal>tag</goal>
</goals>
<configuration>
<!-- docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG] -->
<!-- images与IMAGE[:TAG]对应,必须在build阶段已经构建了 -->
<image>${project.name}/${project.artifactId}:${project.version}</image>
<!-- newName与tag命令的第二个参数对应 -->
<newName>
${docker.registry}/${project.name}/${project.artifactId}:latest
</newName>
</configuration>
</execution>
<!-- 将docker:push绑定到deploy这个phase -->
<execution>
<id>push-image</id>
<phase>deploy</phase>
<goals>
<goal>push</goal>
</goals>
<configuration>
<imageName>
${docker.registry}/${project.name}/${project.artifactId}:${project.version}
</imageName>
</configuration>
</execution>
<execution>
<id>push-image-latest</id>
<phase>deploy</phase>
<goals>
<goal>push</goal>
</goals>
<configuration>
<imageName>
${docker.registry}/${project.name}/${project.artifactId}:latest
</imageName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
docker-maven-plugin 详细说明请参考https://my.oschina.net/u/3764794/blog/2995648
如果想跳过 docker 某个过程时,只需要:
-DskipDockerBuild 跳过 build 镜像
-DskipDockerTag 跳过 tag 镜像
-DskipDockerPush 跳过 push 镜像
-DskipDocker 跳过整个阶段
Docker Spring boot 项目使用 docker-maven-plugin 执行mvn docker:build 打成镜像
创建Dockerfile文件
此处的参数说明:
FROM openjdk:8-jdk-alpine 基与jdk1.8
VOLUME /tmp 挂载容器的位置, 容易找到
ADD kitty-generator-1.0.0.jar app.jar 宿主机器的jar文件 移动到 容器的jar文件
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] 容器执行的命令
EXPOSE 9000 简易爆漏的端口 下面docker run -p 还是要的, 因为容器是桥接模式
EXPOSE 9092 写多个就会暴露多个端口
若要执行调优内存:加参数如下
2:POM.xml配置 加入docker:build插件
<artifactId>kitty-generator</artifactId> 此处和下面${project.artifactId} 对应
<version>${project.version}</version>
<packaging>jar</packaging> 此处改为jar包方式
<properties>
*****
<docker.image.prefix>kitty</docker.image.prefix> 此处和下面${docker.image.prefix} 对应
</properties>
#下面为jar方式.
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- Docker maven plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
在父模块打包
mvn clean install package -Dmaven.test.skip
在子模块执行生成镜像
mvn docker:build -Dmaven.test.skip
启动镜像
docker run -itd -p 9000:9000 -v /data/generator/:/data kitty/kitty-generator
-it 可以交互进入容器
-d 后台运行
-p 端口映射,若项目有多个端口, -p 9000:9000 -p 9092:9092 写多个即可
-v 挂载文件 宿主/data/generator/ 不存在会自动创建 容器/data会自动创建
挂载文件配置
* 注意下方/data/ 红色字体
-v /data/generator/:/data 这的/data 表示容器的日志 将会在宿主机器生成/data/generator/kitty-generator.log文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- ch.qos.logback.core.ConsoleAppender 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- ch.qos.logback.core.rolling.RollingFileAppender 文件日志输出 -->
<appender name="baselog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>/data/kitty-generator.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>log/base.%d.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100 MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>
[%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n
</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
</appender>
<!-- 日志级别 -->
<root>
<!-- 定义了ERROR和INFO级别的日志;分别在FILE文件和控制台输出 -->
<level value="INFO" />
<appender-ref ref="baselog" />
<appender-ref ref="console" />
</root>
<logger name="com.louis.kitty.generator" level="INFO">
<appender-ref ref="baselog" />
</logger>
</configuration>
docker(三):使用maven 插件构建docker镜像
介绍
作为一个java后端开发人员,docker如何与Maven 工程相结合是我们必须要面对的问题,它联系着我们的项目
。也为了装x,so,看看吧。
环境介绍
- 开发工具 idea
- jar包管理 maven
- 系统:Linux(本文采用centos7) java 和Maven 环境变量 需要提前配置好
简单使用
这里为了节省空间,采用一个现有的项目进行docker 改造。 项目就是一个springboot的入门项目,运行后,访问:http://host:8080/ ,界面如下图:
不使用Dockefile
pom.xml 改造
只给出核心代码
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- Docker maven plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<!-- imageName 仓库名称/镜像名称:标签名称-->
<imageName>${docker.image.prefix}/${project.artifactId}:1.0.0</imageName>
<!-- 基础镜像名称 ,类似于 Dockerfile 中的 FROM -->
<baseImage>java</baseImage>
<!-- 程序入口,类似于 Dockerfile中的 ENTTYPOINT-->
<entryPoint>["java","-Djava.security.egd=file:/dev/./urandom","-jar","/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<!-- 指定需要复制的根目录,-->
<directory>${project.build.directory}</directory>
<!-- 用于指定需要复制的文件。 表示打包后的jar 文件 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<!-- Docker maven plugin -->
</plugins>
</build>
运行
将项目复制到Linxu 服务器(使用scp)
进入项目根目录
mvn clean package docker:build
发现类似如下信息,证明已经构建成功
Step 1/3 : FROM java
Pulling from library/java
Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
Status: Downloaded newer image for java:latest
---> d23bdf5b1b1b
Step 2/3 : ADD /springboot-docker-1.0-SNAPSHOT.jar //
---> ef9ec89f58e1
Step 3/3 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/springboot-docker-1.0-SNAPSHOT.jar"]
Successfully built e61fa22956f9
Successfully tagged anhusky/springboot-docker:1.0.0
查看生成的镜像
[root@VM_9_185_centos springboot-docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
anhusky/springboot-docker 1.0.0 e61fa22956f9 2 minutes ago 659MB
运行
[root@VM_9_185_centos springboot-docker]# docker run -d -p 8080:8080 anhusky/springboot-docker
访问服务地址,http://host:8080/ ,看是否能看到项目的主页面
使用DockerFile
pom.xml 改造
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- Docker maven plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<!-- imageName 仓库名称/镜像名称:标签名称-->
<imageName>${docker.image.prefix}/${project.artifactId}:1.0.0</imageName>
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<!-- 指定需要复制的根目录,-->
<directory>${project.build.directory}</directory>
<!-- 用于指定需要复制的文件。 表示打包后的jar 文件 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<!-- Docker maven plugin -->
</plugins>
</build>
dockerfile 添加
src -> main -> docker -> Dockerfile
Dockerfile 文件如下:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD springboot-docker-dockerfile-1.0.0.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
注意:copy 到服务器,打包、运行,与无dockerfile 的操作一致,请自行参考
源码
springboot-docker <br/> springboot-docker-dockerfile
参考
3.7 使用Maven插件构建Docker镜像
docker(六) 使用docker-maven-plugin插件构建docker镜像
目录
- 一、 使用docker-maven-plugin构建镜像
- 二、使用
- 三、绑定Docker 命令到 Maven 各个阶段
可以参考博客:https://blog.csdn.net/aixiaoyang168/article/details/77453974
docker-maven-plugin官网推荐在新项目中使用dockerfile-maven来构建镜像。
docker-maven-plugin的Github地址:https://github.com/spotify/docker-maven-plugin
dockerfile-maven的Github地址:https://github.com/spotify/dockerfile-maven
一、 使用docker-maven-plugin构建镜像
docker-maven-plugin有两种使用方式,一种是使用Dockerfile文件,一种是不使用Dockerfile文件。
1.在 POM中指定构建信息(不使用Dockerfile文件)
在pom.xml中引入该插件
<!-- docker-maven-plugin插件(不带Dockerfile文件) --> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <configuration> <!--用于指定镜像名称--> <imageName>${project.name}:${project.version}</imageName> <!--用于指定基础镜像,相当于Dockerfile中的FROM指令--> <baseImage>java</baseImage> <!--相当于Dockerfile的ENTRYPOINT指令--> <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint> <!--是否跳过docker build--> <skipDockerBuild>true</skipDockerBuild> <resources> <resource> <targetPath>/</targetPath> <!--用于指定需要复制的根目录,${project.build.directory}表示target目录--> <directory>${project.build.directory}</directory> <!--用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。--> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>
默认情况下,该插件通过访问localhost:2375来连接本地docker,可以通过设置DOCKER_HOST 环境变量来连接docker.
DOCKER_HOST=tcp://<host>:2375
2.使用Dockerfile文件
如果使用Dockerfile文件,必须指定dockerDirectory元素,那么 baseImage, maintainer, cmd and entryPoint这些元素也会被忽略。dockerDirectory元素所指定的内容将被复制到${project.build.directory}/docker下,resources元素则会复制除此之外的其它文件,例如项目jar文件。
<!--docker-maven-plugin插件(带Dockerfile文件)--> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <configuration> <imageName>${project.name}:${project.version}</imageName> <!--Dockerfile文件位置--> <dockerDirectory>docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>
二、使用
创建镜像
mvn clean package docker:build
推送镜像到Registry
mvn clean package docker:build -DpushImage
推送指定tag的镜像到Registry
mvn clean package docker:build -DpushImageTag回到顶部
三、绑定Docker 命令到 Maven 各个阶段
docker(六) 使用docker-maven-plugin插件构建docker镜像(已过时)
可以参考博客:https://blog.csdn.net/aixiaoyang168/article/details/77453974
docker-maven-plugin官网推荐在新项目中使用dockerfile-maven来构建镜像。
docker-maven-plugin的Github地址:https://github.com/spotify/docker-maven-plugin
dockerfile-maven的Github地址:https://github.com/spotify/dockerfile-maven
一、 使用docker-maven-plugin构建镜像
docker-maven-plugin有两种使用方式,一种是使用Dockerfile文件,一种是不使用Dockerfile文件。
1.在 POM中指定构建信息(不使用Dockerfile文件)
在pom.xml中引入该插件
<!-- docker-maven-plugin插件(不带Dockerfile文件) -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<!--用于指定镜像名称-->
<imageName>${project.name}:${project.version}</imageName>
<!--用于指定基础镜像,相当于Dockerfile中的FROM指令-->
<baseImage>java</baseImage>
<!--相当于Dockerfile的ENTRYPOINT指令-->
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<!--是否跳过docker build-->
<skipDockerBuild>true</skipDockerBuild>
<resources>
<resource>
<targetPath>/</targetPath>
<!--用于指定需要复制的根目录,${project.build.directory}表示target目录-->
<directory>${project.build.directory}</directory>
<!--用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。-->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
默认情况下,该插件通过访问localhost:2375来连接本地docker,可以通过设置DOCKER_HOST 环境变量来连接docker.
DOCKER_HOST=tcp://<host>:2375
2.使用Dockerfile文件
如果使用Dockerfile文件,必须指定dockerDirectory元素,那么 baseImage, maintainer, cmd and entryPoint这些元素也会被忽略。dockerDirectory元素所指定的内容将被复制到${project.build.directory}/docker下,resources元素则会复制除此之外的其它文件,例如项目jar文件。
<!--docker-maven-plugin插件(带Dockerfile文件)-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>${project.name}:${project.version}</imageName>
<!--Dockerfile文件位置-->
<dockerDirectory>docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
二、使用
创建镜像
mvn clean package docker:build
推送镜像到Registry
mvn clean package docker:build -DpushImage
推送指定tag的镜像到Registry
mvn clean package docker:build -DpushImageTag
三、绑定Docker 命令到 Maven 各个阶段
今天关于idea Maven 插件 docker-maven-plugin 打包docker镜像上传到远程仓库和maven dockerfile远程打包镜像的介绍到此结束,谢谢您的阅读,有关Docker Spring boot 项目使用 docker-maven-plugin 执行mvn docker:build 打成镜像、docker(三):使用maven 插件构建docker镜像、docker(六) 使用docker-maven-plugin插件构建docker镜像、docker(六) 使用docker-maven-plugin插件构建docker镜像(已过时)等更多相关知识的信息可以在本站进行查询。
本文标签: