基于Maven插件构建Docker镜像

介绍使用Maven插件将SpringBoot应用构建为Docker镜像,然后上传到私有镜像仓库Docker Registry

Docker Registry

  • 安装

    1. docker run -d -p 5000:5000 --restart=always --name registry2 registry:2
  • 开启远程API

    编辑docker.service文件

  1. vi /usr/lib/systemd/system/docker.service

修改 ExecStart 参数

  1. #修改前
  2. ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
  3. #修改后
  4. ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
  • Docker支持http上传镜像

    1. #注意ip换成本机的ip
    2. echo '{ "insecure-registries":["192.168.3.101:5000"] }' > /etc/docker/daemon.json
  • 刷新Docker配置使配置生效

    1. systemctl daemon-reload
  • 重启Docker服务

    1. systemctl reload docker
  • 开启端口

    这里开放的端口就是上面修改的docker.service文件中设置的端口

  1. #防火墙中添加开放端口
  2. firewall-cmd --zone=public --add-port=2375/tcp --permanent
  3. #重启防火墙
  4. firewall-cmd --reload

Maven 构建Docker镜像

在项目pom.xml文件中添加docker-maven-plugin插件依赖

  1. <plugin>
  2. <groupId>com.spotify</groupId>
  3. <artifactId>docker-maven-plugin</artifactId>
  4. <version>1.0.0</version>
  5. <executions>
  6. <execution>
  7. <id>build-image</id>
  8. <phase>package</phase>
  9. <goals>
  10. <goal>build</goal>
  11. </goals>
  12. </execution>
  13. </executions>
  14. <configuration>
  15. <imageName>spring/${project.artifactId}:${project.version}</imageName>
  16. <dockerHost>http://172.17.25.231:2375</dockerHost>
  17. <baseImage>java:8</baseImage>
  18. <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]</entryPoint>
  19. <resources>
  20. <resource>
  21. <targetPath>/</targetPath>
  22. <directory>${project.build.directory}</directory>
  23. <include>${project.build.finalName}.jar</include>
  24. </resource>
  25. </resources>
  26. </configuration>
  27. </plugin>

executions.execution.phase:此处配置了在maven打包应用时构建docker镜像 imageName:用于指定镜像名称,mall-tiny是仓库名称,${project.artifactId}为镜像名称,${project.version}为仓库名称 dockerHost:打包后上传到的docker服务器地址 baseImage:该应用所依赖的基础镜像,此处为java entryPoint:docker容器启动时执行的命令 resources.resource.targetPath:将打包后的资源文件复制到该目录 resources.resource.directory:需要复制的文件所在目录,maven打包的应用jar包保存在target目录下面 resources.resource.include:需要复制的文件,打包好的应用jar包

打包应用并上传镜像

使用Idea的maven图像插件打包上传镜像
使用命令打包并上传镜像

  1. mvn clean package docker:build

查看Docker镜像

在Docker服务器中查看docker镜像

  1. docker images

创建并启动容器

  1. docker run -p 8080:8080 \
  2. --name myspring \
  3. --link mysql:db \
  4. -d spring/my-spring:0.0.5-SNAPSHOT