还在手动部署SpringBoot应用?试试这个自动化插件!

最近又发现了一款好用的Maven插件,fabric8io出品的docker-maven-plugin,可以把SpringBoot应用方便的部署到Docker容器中去。该插件可以实现打包镜像、推送到镜像仓库、运行应用等一系列操作,本文将对其用法进行详细介绍,希望对大家有所帮助!

SpringBoot实战电商项目mall(40k+star)地址:https://github.com/macrozheng/mall

安装私有镜像仓库

由于之后我们需要推送到私有镜像仓库,我们预先安装好,使用的是Docker公司开发的私有镜像仓库Registry。

  • 下载Registry的Docker镜像;
docker pull registry:2
  • 使用Docker容器运行Registry服务,需要添加环境变量REGISTRY_STORAGE_DELETE_ENABLED=true开启删除镜像的功能;
docker run -p 5000:5000 --name registry2 \
--restart=always \
-e REGISTRY_STORAGE_DELETE_ENABLED="true" \
-d registry:2
  • 修改Docker Daemon的配置文件,文件位置为/etc/docker/daemon.json,由于Docker默认使用HTTPS推送镜像,而我们的镜像仓库没有支持,所以需要添加如下配置,改为使用HTTP推送;
{
  "insecure-registries": ["192.168.3.101:5000"]
}
  • 最后使用如下命令重启Docker服务。
systemctl daemon-reload && systemctl restart docker

镜像仓库可视化

由于私有镜像仓库管理比较麻烦,而docker-registry-ui有专门的页面可以方便地管理镜像,所以我们安装它来管理私有镜像仓库。

  • 下载docker-registry-ui的Docker镜像;
docker pull joxit/docker-registry-ui:static
  • 使用Docker容器运行docker-registry-ui服务;
docker run -p 8280:80 --name registry-ui \
--link registry2:registry2 \
-e REGISTRY_URL="http://registry2:5000" \
-e DELETE_IMAGES="true" \
-e REGISTRY_TITLE="Registry2" \
-d joxit/docker-registry-ui:static
  • 我们先来试试私有镜像仓库是否可用,首先下载一个测试用的镜像busybox
docker pull busybox
  • 给镜像busybox打上私有仓库的标签,并设置版本为v1.0
docker tag busybox 192.168.3.101:5000/busybox:v1.0
  • 之后推送到私有镜像仓库去;
docker push 192.168.3.101:5000/busybox:v1.0
  • 访问docker-registry-ui管理界面,即可查看到busybox镜像,地址:http://192.168.3.101:8280
还在手动部署SpringBoot应用?试试这个自动化插件!_第1张图片

插件使用

fabric8io出品的docker-maven-plugin是一款集Docker镜像管理和容器管理于一身的插件,动动手指就可以把我们的SpringBoot应用部署到Docker容器中了,非常好用,下面来讲讲它的用法。

在IDEA中正确使用Maven插件

  • 一般我们如果没有使用IDEA,都是手敲Maven命令来执行,在IDEA中我们只要双击右侧面板中的Maven命令即可执行,非常方便。
还在手动部署SpringBoot应用?试试这个自动化插件!_第2张图片
  • 如果你想使用自定义命令的话,可以使用Execute Maven Goal这个功能,这里我使用的是mvn clean package命令。
还在手动部署SpringBoot应用?试试这个自动化插件!_第3张图片

构建镜像

  • 要想使用docker-maven-plugin,需要在pom.xml中添加该插件;

    
        
            io.fabric8
            docker-maven-plugin
            0.33.0
            
                
                http://192.168.3.101:2375
                
                http://192.168.3.101:5000
                
                    
                        
                        192.168.3.101:5000/mall-tiny/${project.name}:${project.version}
                        
                        
                            
                            java:8
                            
                                ${project.build.finalName}.jar
                            
                            
                            
                                
                                /
                                
                                artifact
                            
                            
                            ["java", "-jar","/${project.build.finalName}.jar"]
                            
                            macrozheng
                        
                    
                
            
        
    

  • 我们构建镜像之前需要先将项目打包,然后再构建,否则会出错,直接使用如下命令即可;
mvn package docker:build
  • 打包完成后就可以在我们的服务器上看到这个镜像了;
[root@linux-local mydata]# docker images
REPOSITORY                                     TAG                 IMAGE ID            CREATED             SIZE
192.168.3.101:5000/mall-tiny/mall-tiny-fabric   0.0.1-SNAPSHOT      6b8bc6faeb0b        9 seconds ago       680MB
  • 当然我们也可以设置使用package命令时直接打包镜像,修改pom.xml,在节点下添加配置即可;

    io.fabric8
    docker-maven-plugin
    0.33.0
    
        
        
            build-image
            package
            
                build
            
        
    

  • 使用不同的Maven插件构建Docker镜像时方法往往不同,这时候直接使用Dockerfile来构建会比较好,我们先写好Dockerfile文件并放到项目根目录下;
# 该镜像需要依赖的基础镜像
FROM java:8
# 将当前maven目录生成的文件复制到docker容器的/目录下
COPY maven /
# 声明服务运行在8080端口
EXPOSE 8080
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-jar","/mall-tiny-fabric-0.0.1-SNAPSHOT.jar"]
# 指定维护者的名字
MAINTAINER macrozheng
  • 然后修改pom.xml文件,将节点配置替换为如下内容,仅需配置Dockerfile所在目录即可。

     ${project.basedir}

推送到镜像仓库

  • 接下来我们使用docker:push命令即可把镜像推送到私有镜像仓库;
mvn docker:push
  • 之后在我们的私有镜像仓库就可以看到镜像了;
还在手动部署SpringBoot应用?试试这个自动化插件!_第4张图片

操作容器

  • 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}
    
    
        8080:8080
    
    
    
        mysql:db
    
    
    
        
            /etc/localtime:/etc/localtime
            /mydata/app/${project.artifactId}/logs:/var/logs
        
    

  • 之后直接使用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

项目源码地址

https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-fabric

本文 GitHub https://github.com/macrozheng/mall-learning 已经收录,欢迎大家Star!

你可能感兴趣的:(还在手动部署SpringBoot应用?试试这个自动化插件!)