docker-maven-plugin能有效帮助我们在面对数量众多的微服务项目时,自动化构建和容器化部署,提高部署效率。
禁止转载!!!禁止转载!!!禁止转载!!!
首发地址:xu.vercel.app
一、修改docker配置
修改宿主机的docker配置,让其可以远程访问
1 | powershell复制代码 |
修改后配置如下:
1 | powershell复制代码ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock |
刷新配置重启服务:
1 | powershell复制代码# 通知docker服务做出的修改 |
接下来测试一下看是否能连接到docker api
1 | powershell复制代码ps -ef | grep docker |
1.2 启动失败的问题
启动报错Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
1 | powershell复制代码[root@localhost ~]# systemctl start docker |
1.3 解决启动失败
因为修改的是/usr/lib/systemd/system/docker.service
下的服务配置文件:ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
那么就应该加载该目录下的system服务systemctl start docker.service
1 | powershell复制代码 |
二、修改防火墙
其他centos7防火墙配置
我这里是虚拟机,防火墙服务关闭了,所以无需配置下面的信息,生产环境自行配置
1 | powershell复制代码[root@localhost ~]# systemctl status firewalld |
修改防火墙策略,允许访问2375端口:
1 | powershell复制代码#开放2375/tcp端口 |
查看防火墙开放状态:
1 | powershell复制代码#查看所有打开的端口 |
三、使用插件
3.1 docker-maven-plugin插件
(1) 不使用Dockerfile
1 | xml复制代码 <plugin> |
执行 build 操作mvn clean package docker:build
执行 build 完成后 push 镜像:mvn clean package docker:build -DpushImage
执行 build 并 push 指定 tag 的镜像mvn clean package docker:build -DpushImageTag
注意:这里必须指定至少一个 imageTag,它可以配置到 POM 中,也可以在命令行指定。
指定方式有两种:
- 命令行指定如下:
mvn clean package docker:build -DpushImageTags -DdockerImageTags=imageTag_1 -DdockerImageTags=imageTag_2
- POM 文件中指定:
1 | xml复制代码<build> |
(2) 使用Dockerfile
1 | xml复制代码<plugin> |
Dockerfile文件:
1 | powershell复制代码FROM xuux/small-jre8:1.0 |
执行命令:mvn clean package docker:build -DpushImageTag
1 | powershell复制代码 |
1 | powershell复制代码 |
(3) 绑定 Docker 命令到 Maven各个阶段
官方Github上已经很详细了,大家可以上去看看官方文档
1 | xml复制代码<build> |
执行mvn package时,执行 build、tag 操作
执行mvn deploy时,执行build、tag、push 操作
如果我们想跳过 docker 某个过程时,只需要:
1 | powershell复制代码-DskipDockerBuild 跳过 build 镜像 |
例如:我们想执行 package 时,跳过 tag 过程,那么就需要mvn package -DskipDockerTag
3.2 dockerfile-maven-plugin插件
官方推荐使用dockerfile-maven-plugin
docker-maven-plugin:We recommend you use dockerfile-maven instead.
注意:需要结合Dockerfile文件,设置环境变量
1.设置环境变量(必须)
环境变量名称:DOCKER_HOST
变量值:tcp://192.168.122.22:2375(根据实际IP地址来)
1 | powershell复制代码export DOCKER_HOST=tcp://localhost:2375 |
2. xml配置
1 | xml复制代码 <plugin> |
或者
1 | xml复制代码<plugin> |
该插件的配置比docker-maven-plugin更简单
- repository:指定docker镜像的repo名字
- tag:指定docker镜像的tag
- buildArgs:可以指定一个或多个变量,传递给Dockerfile,在Dockerfile中通过ARG指令进行引用
在execution中同时指定build和push目标:
当运行mvn package时,会自动执行build目标,构建Docker镜像。当运行mvn deploy命令时,会自动执行push目标,将Docker镜像push到Docker仓库。
3. 创建Dockerfile文件
Dockerfile文件必须在根目录下,与pom.xml文件同级
1 | powershell复制代码FROM xuux/small-jre8:1.0 |
4. 其他使用方法:
四、问题
1 | xml复制代码<baseImage>jdk1.8</baseImage> |
1 | vbnet复制代码pull access denied for jdk1.8, repository does not exist or may require 'docker login': denied: requested access to the resource is denied |
原因:
报这个错是因为docker上没有jdk1.8镜像文件。
解决方法:
换成xuux/small-jre8
1 | powershell复制代码# 修改xml |
参考:
Maven 插件之 docker-maven-plugin 的使用
本文转载自: 掘金