目录
docker-maven-plugin
基本介绍
使用手册
Maven Goals命令
Maven命令执行顺序
Skip Docker Goals Bound to Maven Phases(跳过)
Configuration
使用示例
注意事项(准备工作)
1. 有一台Docker daemon主机
2. Docker开启远程API
3. 配置DOCKER_HOST选项
4. 镜像仓库认证信息
pom.xml方式
Maven多模块工程
Pom配置-父工程
配置信息
Pom配置-子工程
编写Dockerfile文件制作镜像
前提:
docker images查看镜像
推送镜像-Docker Registry
Docker Registry 2.0搭建
Docker Registry 用户和密码配置
推送镜像-阿里云
异常场景
1. com.spotify:dockerfile-maven-plugin:1.4.10 not found
2. java.io.FileNotFoundException: \.pipedocker_engine (系统找不到指定的文件。)
3. repository element was not specified in the POM inside distributionManagement element or in -DaltDeploymentRepository=id::layout::url parameter
解决办法1 :
解决办法2 :
我们常见开源项目中使用的Docker Maven插件是。可用版本信息见Github。
通过其介绍可知该插件已经不再推荐使用,取而代之的是,Github地址。
使用该插件可以在命令中直接构建出Docker镜像和完成推送等。
要求用户必须提供Dockerfile用于构建镜像,从而将Docker镜像的构建依据统一到Dockerfile上,这与过时的是不同的。
相比docker-maven-plugin更加灵活安全
也能够绑定 Docker 命令到 Maven 各生命周期
Maven Goals命令
Goals available for this plugin:
Maven命令执行顺序
Skip Docker Goals Bound to Maven Phases(跳过)
You can pass options to maven to disable the docker goals.
For example, to skip the entire dockerfile plugin:
Configuration
Build Phase
https://github.com/spotify/dockerfile-maven/tree/master/plugin/src/it
该插件需要Java 7或更高版本以及Apache Maven 3或更高版本(dockerfile-maven-plugin <= 1.4.6需要Maven> = 3,在其他情况下需要Maven> = 3.5.2)。
要运行集成测试或在实践中使用插件,需要有效的Docker设置。
镜像的制作以及推送操作,都是由Docker来完成的,所以,必须要安装Docker环境。简单的说dockerfile-maven-plugin只是简化了直接操作Docker的复杂度,该是Docker完成的事情,还得由Docker来完成。
所以,明白这一点之后,就知道了并不是一定要在本地安装Docker环境,只要有Docker环境就可以了。
Docker开启远程API
要使用服务器的Docker环境,需要配置一个环境变量(默认情况下,插件是连接本地的Docker环境,即127.0.0.1)
具体参考:https://github.com/spotify/dockerfile-maven/blob/master/docs/authentication.md
pom.xml方式
从1.3.XX版开始,你可以使用pom本身的config进行身份验证。只需添加类似于以下内容的配置:
或者
然后使用命令
配置信息
1. 要有环境变量DOCKER_HOST的配置
2. 要在子工程的目录下(与pom文件同级)创建一个Dockerfile文件
在父工程 , 执行mvn clean package 或者 mvn dockerfile:build 打包命令,即可制作镜像
docker images查看镜像
docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry2 registry:2
1、列出所有镜像
# curl http://192.168.172.128:5000/v2/_catalog
2、查看指定镜像都有哪些tag
# curl http://192.168.172.128:5000/v2/镜像名/tags/list
容器运行成功,直接使用docker login 192.168.172.128:5000命令,输入Username和Password
我这里设置的是
用户名: test
密码:test
用户和密码base64
然后再 /.docker/config.json 添加如下内容
{
"auths": {
"192.168.172.128:5000": {
"auth": "dGVzdDp0ZXN0"
}
}
}
参考上面在父工程Pom中指定 repository 、username、password
阿里云镜像仓库:拉取和推送Docker镜像
在Maven配置文件settings.xml中添加
[ERROR] Failed to execute goal com.spotify:dockerfile-maven-plugin:1.4.13:build (default) on project devicemag-core: Could not build image: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: java.io.FileNotFoundException: \.pipedocker_engine (系统找不到指定的文件。) -> [Help 1]
要使用服务器的Docker环境,需要配置一个环境变量(默认情况下,插件是连接本地的Docker环境,即127.0.0.1)
需要注意的是,如果你没有配置部署artifact的maven repository,请不要使用mvn deploy命令,因为它会执行maven-deploy-plugin的deploy目标,而由于没有配置要部署的远程maven repository,会报类似如上的错。
解决办法1 :
在pom.xml中,应该将distributionManagement配置添加到要部署的位置。
可以在部署期间使用以下命令添加另一个位置(但为了避免出现上述错误,应至少配置一个存储库):