【Java】Vert.x使用Maven构建Docker镜像并上传私库

当初为了学习Docker和自动化运维方面的知识,在家里的机器中也部署了一整套运维工具。不得不说这Docker镜像几乎就是磁盘杀手,就一个完整的openj9 jdk镜像就已经差不多500MB了。还好不搞Nightly Build,不然一下子空间就全没了。

随着后面做的尝试越来越多,整套环境运行起来越来越臃肿(加了Nexus、加了Gitlab、加了Jenkins、加了Portainer…),这时我不得不考虑更加轻量化的解决方案。直到我发现原来可以通过Maven的Pom配置打包成Docker镜像时,我决定大刀阔斧做了以下修改:

  1. 砍掉Gitlab,自己本机开发本机部署搞什么Gitlab,没多大意义磁盘一坏该没的还是没了;
  2. 砍掉Nexus,代码版本库都没有了还要代码包管理库干什么;
  3. 砍掉Jenkins,都可以用Maven直接命令打包完成,就不需要Jenkins做持续集成了;
  4. 砍掉Portainer,这个可砍可不砍,纯粹是因为资源不够了所以砍掉了而已;

一套操作下来发现,居然还能战几年。果然是“穷”则变变则通。

要实现Maven构建Docker镜像关键还在于Pom文件,我这边的Pom文件是这样写的:

<properties>
	...
	
	
    
	<docker-maven.version>0.36.0docker-maven.version>
    
	<docker.image.registry>vtxdocker.image.registry>
    
	<target-ip.repo>192.168.100.152:5000target-ip.repo>
	
	<docker-host.name>tcp://192.168.100.152:2375docker-host.name>
    
	<docker.username>yzhdocker.username>
    
	<docker.password>Pwddocker.password>
    ...
properties>
...

<build> 
  <plugins>
    ... 
    <plugin> 
      <groupId>io.fabric8groupId>  
      <artifactId>docker-maven-pluginartifactId>  
      <version>${docker-maven.version}version>  
      <configuration> 
          
        <dockerHost>${docker-host.name}dockerHost>  
          
        <authConfig> 
          <push> 
            <username>${docker.username}username>  
            <password>${docker.password}password> 
          push> 
        authConfig>  
        <images> 
          <image> 
             
             
            <name>${target-ip.repo}/${docker.image.registry}/${project.artifactId}:${project.version}name>  
              
            <build> 
                
              <from>adoptopenjdk:11-openj9from>  
                
              <maintainer>[email protected]maintainer>  
                
              <ports> 
                <port>8197port> 
              ports>  
                
              <volumes> 
                <volume>/tmpvolume> 
              volumes>  
                
              <workdir>/usr/local/shareworkdir>  
                
              <entryPoint> 
                <exec> 
                  <arg>javaarg>  
                  <arg>-jararg>  
                  <arg>${project.artifactId}-${project.version}.jararg>  
                  <arg>-XX:MaxGCPauseMillis=200arg>  
                  <arg>-Xloggc:/tmp/${project.artifactId}/gc.logarg>  
                  <arg>-XX:+PrintGCDetailsarg>  
                  <arg>-XX:+PrintGCDateStampsarg>  
                  <arg>-XX:+UnlockExperimentalVMOptionsarg>  
                  <arg>-XX:+UseG1GCarg>  
                  <arg>-Djava.security.egd=file:/dev/./urandomarg>  
                  <arg>-XX:+UseCGroupMemoryLimitForHeaparg>  
                  <arg>-XX:MaxRAMFraction=1arg>  
                  <arg>-XX:+HeapDumpOnOutOfMemoryErrorarg>  
                  <arg>-clusterarg> 
                exec> 
              entryPoint>  
                
              <assembly> 
                  
                <mode>dirmode>  
                  
                <targetDir>/usr/local/sharetargetDir>  
                  
                <descriptorRef>artifactdescriptorRef> 
              assembly> 
            build> 
          image> 
        images> 
      configuration>  
        
      <executions> 
          
        <execution> 
          <id>push-imageid>  
            
          <phase>packagephase>  
            
          <goals> 
              
            <goal>buildgoal>  
            <goal>pushgoal> 
          goals>  
          <configuration>  
            <imageName>${target-ip.repo}/${docker.image.registry}/${project.artifactId}:${project.version}imageName> 
          configuration> 
        execution> 
      executions> 
    plugin> 
  plugins> 
build>

(这里我是针对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 2375

nc: 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进行构建并上传私库了。

你可能感兴趣的:(Java,java,docker,maven)