一、本文目标
- 使用Maven插件构建SpringBoot应用的docker镜像
- 镜像推送至Docker Registry
- 启动容器
本文开发环境 :
- jdk1.8
- maven
- idea
- SpringBoot2.2
- 本文使用 com.spotify 的 docker-maven-plugin插件执行docker命令。据说官方不再推荐使用该插件,而是使用 dockerfile-maven-plugin 代替。
- 本文需要提前搭建docker registry,并且设置允许 http 推送。
二、实现步骤
1. 创建SpringBoot项目
项目结构:
![Springboot2.0学习11 使用maven插件打包docker部署应用](http://p2.ttnews.xyz/loading.gif)
入口程序 HelloApplication
<code>
HelloController控制器
<code>
pom.xml设置打包插件
<code>
<project> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelversion>4.0.0/<modelversion>
<groupid>com.xundh.springboot/<groupid>
<artifactid>docker/<artifactid>
<version>1.0-SNAPSHOT/<version>
<properties>
<project.build.sourceencoding>UTF-8/<project.build.sourceencoding>
<maven.compiler.source>1.8/<maven.compiler.source>
<maven.compiler.target>1.8/<maven.compiler.target>
<project.reporting.outputencoding>UTF-8/<project.reporting.outputencoding>
<java.version>1.8/<java.version>
/<properties>
<parent>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-parent/<artifactid>
<version>2.2.2.RELEASE/<version>
<relativepath>
/<parent>
<dependencies>
<dependency>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-web/<artifactid>
<version>2.2.2.RELEASE/<version>
/<dependency>
/<dependencies>
<build>
<finalname>hello/<finalname>
<resources>
<resource>
<directory>src/main/resources/<directory>
<filtering>true/<filtering>
/<resource>
/<resources>
<plugins>
<plugin>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-maven-plugin/<artifactid>
/<plugin>
/<plugins>
/<build>
/<project>/<code>
2. 打包并运行项目
<code>
访问网址: http://localhost:8080/hello
看到界面输出: hello world
3. 添加docker支持
在resources下新建Dockerfile,输入内容:
<code>FROM java:8
MAINTAINER "xundh"<[email protected]>
ADD hello.jar app.jar
EXPOSE 8080
CMD java -jar app.jar/<code>
这里,使用:
- jdk1.8
- add指令将hello.jar复制到docker容器中,重命名为app.jar
- 开启8080端口
- 使用命令行 java -jar app.jar运行程序
4. 使用maven插件构建docker镜像
<code>
插件配置说明:
- imageName: 镜像的完整名称
- dockerDirectory: 用于指定Dockerfile文件所在的目录
- resources.resource.directory: 用于指定需要复制的根目录
- resources.resource.include: 用于指定需要复制的文件
- ${docker.registry} 注册中心地址
- ${project.groupId} 仓库名称
- ${project.artifactId} 镜像名称
- ${project.version} 镜像标签名
- ${project.build.directory} 表示target目录
- ${project.build.finalName}.jar 生成的jar包
5. 构建镜像
<code>mvn docker:build
# 查看镜像
sudo docker images/<code>
![Springboot2.0学习11 使用maven插件打包docker部署应用](http://p2.ttnews.xyz/loading.gif)
- 这里构建镜像,是直接使用服务器上的docker打包,所以打包以后使用docker images就可以直接看到镜像。下一步推送可以不需要操作。
- 打包出来的包比较大,因为java image本身就有6百多兆,加上自己的应用就不会少于600多兆。
- 使用openjdk可以缩小体积。
6. 镜像推送到Docker Registry
<code>mvn docker:push/<code>
7. 到服务器运行镜像
<code>sudo docker run -d -p 80:8080 9512b0da843d/<code>
访问网址:
http://服务器ip/hello
可以看到打印 hello world字样
閱讀更多 編程圈 的文章