工具
经过调研,有以下几款Docker的Maven插件进入笔者视野:
插件名称 | 官方地址 |
---|---|
spotify | https://github.com/spotify/docker-maven-plugin |
fabric | https://github.com/fabric8io/docker-maven-plugin |
bibryam | https://github.com/bibryam/docker-maven-plugin |
从Stars、文档易用性以及更新频率三个纬度考虑,选用了最上面的那一款。
使用插件构建Docker镜像
1.在pom.xml加入如下代码
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.14</version>
<configuration>
<forceTags>true</forceTags>
<serverId>docker-repo</serverId>
<registryUrl>>10.122.61.205</registryUrl>
<imageTags>
<imageTag>${project.version}</imageTag>
<imageTag>latest</imageTag>
</imageTags>
<imageName>10.122.61.205/devops/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<dockerHost>http://10.122.25.201:2375</dockerHost>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
2. 在 10.122.25.201(必须事先安装好docker软件)主机上,docker插件要在这个机器上去执行构建docker image.
上面表示要在0.122.25.201:2375端口上监听来自插件的docker 命令。
要打开这个端口,则登录到10.122.25.201上,执行下面的命令
# vi /usr/lib/systemd/system/docker.service
在ExecStart后面 添加一行(表示启动2375端口 用于监听远程操作)
-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \
如下所示:
ExecStart=/usr/bin/dockerd-current \
--add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
--default-runtime=docker-runc \
--exec-opt native.cgroupdriver=systemd \
--userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
--init-path=/usr/libexec/docker/docker-init-current \
--seccomp-profile=/etc/docker/seccomp.json \
-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \
$OPTIONS \
$DOCKER_STORAGE_OPTIONS \
$DOCKER_NETWORK_OPTIONS \
$ADD_REGISTRY \
$BLOCK_REGISTRY \
$INSECURE_REGISTRY \
$REGISTRIES
ExecReload=/bin/kill -s HUP $MAINPID
# systemctl daemon-reload
# systemctl restart docker
3. 在本地的settings.xml加入镜像仓库的如下信息。
本例中,harbor是docker 镜像仓库私服,地址在10.122.61.205:80上面。
该项目的images会放在它的10.122.61.205/devops/下面
settings.xml相关的设置如下:
<servers>
<server>
<id>docker-repo</id>
<username>admin</username>
<password>填写harbor仓库的登录密码</password>
<configuration>
<email>admin@example.org</email>
</configuration>
</server>
</servers>
步骤1的 <serverId>docker-repo</serverId>必须和上面的id一致。
4. 然后执行docker image 构建命令。如下所示:
下面命令会在10.122.61.201 上构建docker image,但是不会从10.122.61.201把image push到 10.122.61.205上
# mvn clean package -Dmaven.test.skip=true docker:build
下面命令会在10.122.61.201 上构建docker image. 如果构建没有问题,还会自动把该镜像推到镜像服务器 10.122.25.206上。
# mvn clean package -Dmaven.test.skip=true -DpushImage docker:build