当初为了学习Docker和自动化运维方面的知识,在家里的机器中也部署了一整套运维工具。不得不说这Docker镜像几乎就是磁盘杀手,就一个完整的openj9 jdk镜像就已经差不多500MB了。还好不搞Nightly Build,不然一下子空间就全没了。
随着后面做的尝试越来越多,整套环境运行起来越来越臃肿(加了Nexus、加了Gitlab、加了Jenkins、加了Portainer…),这时我不得不考虑更加轻量化的解决方案。直到我发现原来可以通过Maven的Pom配置打包成Docker镜像时,我决定大刀阔斧做了以下修改:
一套操作下来发现,居然还能战几年。果然是“穷”则变变则通。
要实现Maven构建Docker镜像关键还在于Pom文件,我这边的Pom文件是这样写的:
...0.36.0 vtx 192.168.100.152:5000 tcp://192.168.100.152:2375 yzh Pwd ...
... ... io.fabric8 docker-maven-plugin ${docker-maven.version} ${docker-host.name} ${docker.username} ${docker.password} ${target-ip.repo}/${docker.image.registry}/${project.artifactId}:${project.version} adoptopenjdk:11-openj9 yzh0623@outlook.com 8197 /tmp /usr/local/share java -jar ${project.artifactId}-${project.version}.jar -XX:MaxGCPauseMillis=200 -Xloggc:/tmp/${project.artifactId}/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -Djava.security.egd=file:/dev/./urandom -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1 -XX:+HeapDumpOnOutOfMemoryError -cluster dir /usr/local/share artifact push-image package build push ${target-ip.repo}/${docker.image.registry}/${project.artifactId}:${project.version}
(这里我是针对Vert.x应用进行直接Docker构建,如果是Springboot项目还需要进行一些调整。)
在一开始的时候可能各位还会报出以下这个问题,如下图:
Failed to execute goal io.fabric8:docker-maven-plugin:0.33.0:build (build-image) on project phw2-bi-vtx: Cannot create docker access object: Connect to 127.0.0.1:2375 [/127.0.0.1] failed: Connection refused (Connection refused) -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal io.fabric8:docker-maven-plugin:0.33.0:build (build-image) on project phw2-bi-vtx: Cannot create docker access object
这个问题有可能是因为2375端口(Docker对外开发端口)没有开启导致的,通过一下语句查看一下2375端口是否有打开:
# 查看2375端口是否开启
nc -vz -w 2 localhost 2375nc: connectx to localhost port 2375 (tcp) failed: Connection refused
nc: connectx to localhost port 2375 (tcp) failed: Connection refused
这个时候需要通过启动特殊镜像进行端口开启,如下图:
docker run -it -d \
--name=socat \
-p 2375:2375 \
-v /var/run/docker.sock:/var/run/docker.sock \
--restart=always \
bobrik/socat:latest \
TCP4-LISTEN:2375,fork,reuseaddr \
UNIX-CONNECT:/var/run/docker.sock
接下来就能够正常使用Maven进行构建并上传私库了。