使用docker-maven-plugin插件构建镜像并推送至私服Harbor

前言

如下所示,建议使用 Dockerfile Maven 插件,但该插件也停止维护更新了。因此先暂时使用docker-maven-plugin插件。

使用docker-maven-plugin插件构建镜像并推送至私服Harbor_第1张图片


使用docker-maven-plugin插件构建镜像并推送至私服Harbor_第2张图片

使用docker-maven-plugin插件构建镜像并推送至私服Harbor_第3张图片

一、开启Docker服务器的远程访问

1.1 开启2375远程访问

默认的dokcer是不支持远程访问的,需要加点配置,开启Docker的远程访问

# 首先查看docker配置文件所在位置
systemctl status docker

# 会输出如下内容:
● docker.service - Docker Application Container Engine
   Loaded: loaded (/etc/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2020-12-17 14:22:23 CST; 18min ago
     Docs: http://docs.docker.com
 Main PID: 25113 (dockerd)

确定docker配置文件位置在:/etc/systemd/system/docker.service

然后编辑修改docker配置文件:

vi /lib/systemd/system/docker.service

找到包含ExecStart的这行,添加如下内容:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \

其中,2375端口为docker远程服务端口,包含了docker可视化工具portainer,以及远程上传镜像的功能。

1.2 添加harbor镜像配置

编辑docker的配置文件:

vi /etc/docker/daemon.json
# 添加harbor镜像地址
{ 
 "insecure-registries": ["192.168.0.20:81"]
}

1.3 重启docker服务

# 后台配置重新加载
systemctl daemon-reload 
# 重启docker服务
systemctl restart docker.service
# 此处可能会出现docker无法启动情况,可能是由于docker.service配置文件修改错误,重新修改一次然后重新执行上述命令即可

#查看配置的端口号(2375)是否开启(非必要)
netstat -nlpt

1.4 验证是否开启成功

查看端口是否开启

#如果找不到netstat命令,使用yum install net-tools安装
[root@administrator ~]# netstat -antp | grep dockerd 
tcp6       0      0 :::2375                 :::*                    LISTEN      4514/dockerd  

直接curl看是否生效,测试通过localhost是否能使用Docker Engine API

curl http://127.0.0.1:2375/info
​curl http://localhost:2375/version
访问:http://ip:2375/version测试远程能否通过主机IP使用Docker Engine API

使用docker-maven-plugin插件构建镜像并推送至私服Harbor_第4张图片

二、IDEA-Maven打包镜像

2.1 修改maven的配置文件settings.xml

在maven的配置文件中,添加harbor私服的用户名及密码:

 
    
        harbor
        harbor
        123456
        
            [email protected]
        
    

2.2 修改SpringBoot项目中的pom.xml

添加属性配置,属性配置,在后面的插件配置里有引用这个:

  • docker.repostory 是docker私服地址,harbor配置完默认端口就是80,可以不带端口号。但是我将之改成81了
  • docker.registry.name 即是在harbor中配置的镜像仓库名,必须一致!这里我配的是test,因为harbor中配置的镜像仓库名也是test。

    
    
    192.168.10.11:81
    
    test

使用docker-maven-plugin插件构建镜像并推送至私服Harbor_第5张图片

3.3 docker-maven-plugin插件配置

  • serverId 指定之前在maven的settings.xml中配置的server节点,这样maven会去找其中配置的用户名密码和邮箱
  • registryUrl 指定上面配置的properties属性,即是harbor私服的访问url,注意我设置的使用81端口,默认是80端口
  • imageName 指定上传harbor私服的镜像名,必须和harbor上的url、镜像仓库名保持一致。其中的docker.registry.name就是上面配置的properties属性

3.3.1 方式一:纯插件操作方式构建镜像


        
            
            
                org.apache.maven.plugins
                maven-resources-plugin
                
                    UTF-8
                
            

            
            
                org.apache.maven.plugins
                maven-source-plugin
                
                    
                        attach-sources
                        
                        
                            
                            jar
                        
                    
                
            

            
            
                maven-compiler-plugin
                
                    11
                    11
                    UTF-8
                
            

            
            
                org.apache.maven.plugins
                maven-dependency-plugin
                
                    
                        copy-dependencies
                        package
                        
                            copy-dependencies
                        
                        
                            ${project.build.directory}/lib
                            false
                            false
                            true
                        
                    
                
            

            
                org.apache.maven.plugins
                maven-jar-plugin
                
                    
                        
                            
                            true
                            
                            lib/
                            
                            org.fiend.SpringBootDockerApp
                            false
                        
                    
                    
                        
                        
                        
                        
                    
                
            

            
            
                com.spotify
                docker-maven-plugin
                1.2.2
                
                    
                        build-image
                        
                        package
                        
                            build
                        
                    
                
                
                    
                    harbor
                    http://${docker.repostory}

                    
                    http://192.168.31.133:2375

                    
                    
                    k8s-harbor:10001/my-project/openjdk11:jre-11.0.12_7-alpine

                    
                    ${docker.repostory}/${docker.registry.name}/${project.artifactId}:${project.version}
                    
                    
                        ${project.version}
                    

                    
                    
                    

                    
                    /home

                    
                    
                    
                    
                    
                    
                    
                    

                    ["java", "-version"]

                    
                    ["java", "-jar", "-Xms896m", "-Xmx896m", "${project.build.finalName}.jar"]

                    
                    
                    
                    

                    
                    
                        
                            /home
                            
                            ${project.build.directory}
                            
                            ${project.build.finalName}.jar
                        
                        
                            /home/lib
                            
                            ${project.build.directory}/lib
                            
                        
                    
                
            
        
    

接下来只要先点击clean清除之前的所有打包的文件,然后再点击package打包文件即可完成镜像的构建,真正的一键部署

使用docker-maven-plugin插件构建镜像并推送至私服Harbor_第6张图片

使用docker-maven-plugin插件构建镜像并推送至私服Harbor_第7张图片

由于将 package 注释掉了,因此需要执行 docker:build 命令构建镜像:

使用docker-maven-plugin插件构建镜像并推送至私服Harbor_第8张图片

如果要将镜像推送至Harbor仓库,执行docker:push命令:

使用docker-maven-plugin插件构建镜像并推送至私服Harbor_第9张图片

删除docker镜像命令(不是删除Harbor中的镜像), docker:removeImage:

重新构建镜像时,记得先执行此命令,删除原来的镜像。

使用docker-maven-plugin插件构建镜像并推送至私服Harbor_第10张图片

到此镜像构建成功,接下来使用Idea的Docker插件,创建容器跑起来(或者去Docker机器执行命令行)

使用docker-maven-plugin插件构建镜像并推送至私服Harbor_第11张图片

使用docker-maven-plugin插件构建镜像并推送至私服Harbor_第12张图片

通过ip访问

此种方式,直接通过Maven的package命令,即可实现镜像的制作,但是要推送镜像到harbor私服,还需执行docker:push,即:

点击push,将镜像推送到harbor私服中

使用docker-maven-plugin插件构建镜像并推送至私服Harbor_第13张图片

3.3.2 方式二:结合Dockerfile文件构建镜像


  com.spotify
  docker-maven-plugin
  1.0.0
  
      my-hub
      http://${docker.repostory}
      
      http://192.168.10.11:2375
      
      ${docker.repostory}/${docker.registry.name}/${project.artifactId}:${project.version}
      
      ${basedir}/
      
      
          
          /ROOT
          
          ${project.build.directory}
          
          ${pack-name}
          
      
  

那么Dockerfile文件中的jar包名相应需要修改:

FROM java:8
WORKDIR /ROOT
ADD /ROOT/demo1-2.jar /ROOT/
ENTRYPOINT ["java", "-jar", "demo1-2.jar"]

点击pakage打包,target 上生成了springboot工程的jar包

完了之后,点击docker bulid 构建工程镜像

使用docker-maven-plugin插件构建镜像并推送至私服Harbor_第14张图片

然后点击push,将镜像推送到harbor私服中

使用docker-maven-plugin插件构建镜像并推送至私服Harbor_第15张图片

3.4 docker-maven-plugin操作容器

此部分内容参考:

  • 掘金:MacroZheng:还在手动部署SpringBoot应用?试试这个自动化插件! - 掘金
  • docker-maven-plugin不仅可以操作镜像,还可以操作容器,比如我们以前需要使用如下Docker命令来运行容器;
docker run -p 8080:8080 —name mall-tiny-fabric \
—link mysql:db \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/mall-tiny-fabric/logs:/var/logs \
-d 192.168.3.101:5000/mall-tiny/mall-tiny-fabric:0.0.1-SNAPSHOT
  • 现在我们只需在插件中配置即可,在节点下添加节点可以定义容器启动的行为:


    
    
        ${project.artifactId}

        
        
            8600:8600
        

        
        
        
        

        
        
        
        
        
        
        
    
  • 之后直接使用docker:start命令即可启动了;
# mvn docker:start
[root@linux-local mydata]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
95ce77c0394b 192.168.3.101:5000/mall-tiny/mall-tiny-fabric:0.0.1-SNAPSHOT “java -jar /mall-tin…” 32 seconds ago Up 31 seconds 0.0.0.0:8080->8080/tcp mall-tiny-fabric
  • 停止容器使用docker:stop命令即可;
mvn docker:stop
  • 删除容器使用docker:remove命令,是不是很方便!
mvn docker:remove

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