Docker部署Spring Boot项目(新手必看)
在云计算领域,开发者需要具备哪些基本技能?Docker 必是其一,作为一个开源的应用容器引擎,Docker 能够让开发者打包它们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化,方便快捷。本节介绍如何使用 Docker 部署 Spring Boot 项目。
项目创建完毕,启动项目,在浏览器访问地址 http://localhost:8080/,验证项目是否创建成功。页面返回“Hello Spring Boot Docker!”,说明 Spring Boot 项目配置正常。
配置完成之后,在 Idea 右边的 maven 中,可以看到 maven 中已经新添加了 Docker 构建插件,如下图所示。

图 1 新添加的Docker构建插件
至此,我们已经成功在 maven 中配置了 Docker 构建插件。接下来只需要创建好 Dockerfile 文件,就能自动打包发布 Docker 镜像了。
这样 Spring Boot 项目添加 Docker 依赖就完成了。
然后,进入项目根目录,使用如下命令生成 Docker 镜像:

图 2 docker build的运行结果
通过上面的输出信息可以看到,Docker 镜像已经构建成功。使用 docker images 命令查看构建好的镜像,如下图所示。

图 3 Docker镜像列表

图 4 运行中的镜像
通过上面的输出可以看到构建的应用正在运行,使用浏览器访问 http://10.2.1.231:8080/,返回结果为 Hello Spring Boot Docker!,表示系统启动成功,能够正常访问。
Spring Boot项目添加Docker支持
1) 创建Spring Boot项目
创建一个简单的 Spring Boot 项目 spring-boot-starter-docker,并添加相关的依赖和 Controller 等。项目创建完毕,启动项目,在浏览器访问地址 http://localhost:8080/,验证项目是否创建成功。页面返回“Hello Spring Boot Docker!”,说明 Spring Boot 项目配置正常。
2) 添加Docker支持
在 pom.xml 中添加 Docker 镜像名称:<properties> <docker.image.prefix>springboot</docker.image.prefix> </properties>在上面的示例中,配置了镜像的名称为 springboot。
3) 添加Docker构建插件
在 pom.xml 中添加 plugins 构建 Docker 镜像的插件,配置代码如下:<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!-- Docker maven plugin --> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.0.0</version> <configuration> <imageName>${docker.image.prefix}/${project.artifactId}</imageName > <dockerDirectory>src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> <!-- Docker maven plugin --> </plugins> </build>上面的配置为 maven 配置 Docker 构建插件,这样就可以使用 maven 发布 Docker 镜像。通过 ${docker.image.prefix} 引用之前定义的镜像名称。其他参数说明如下:
- ${docker.image.prefix}:自定义的镜像名称。
- <dockerDirectory>:配置 Dockerfile 的路径。
- ${project.artifactId}:项目的 artifactId。
- ${project.build.directory}:构建目录,默认为 target。
- ${project.build.finalName}:产出物名称,默认为 ${project.artifactId}-${project.version}。
配置完成之后,在 Idea 右边的 maven 中,可以看到 maven 中已经新添加了 Docker 构建插件,如下图所示。

图 1 新添加的Docker构建插件
至此,我们已经成功在 maven 中配置了 Docker 构建插件。接下来只需要创建好 Dockerfile 文件,就能自动打包发布 Docker 镜像了。
发布Docker镜像
前面在 Spring Boot 项目中添加了 Docker 支持,下一步就是构建、运行 Docker 镜像。1) 创建Dockerfile文件
在目录 src/main/docker 下创建 Dockerfile 文件,Dockerfile 文件用来说明如何构建镜像。示例代码如下:FROM openjdk:8-jdk-alpine VOLUME /tmp ADD spring-boot-docker-1.0.jar spring-boot-docker.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar", "/spring-boot-docker.jar"]这个 Dockerfile 文件很简单,构建 JDK 基础环境,添加 JAR 到镜像中,最后使用 java-jar 命令启动。具体说明如下:
- FROM:表示使用 JDK 8 环境为基础镜像,如果镜像不是位于本地,将会从 DockerHub 进行下载。
- VOLUME:指向了一个 /tmp 的目录,由于 Spring Boot 使用内置的 Tomcat 容器,因此 Tomcat 默认使用 /tmp 作为工作目录,这个命令的效果是:在宿主机的 /var/lib/docker 目录下创建一个临时文件并把它链接到容器的 /tmp 目录中。
- ADD:复制文件并且重命名。
- ENTRYPOINT:为了缩短 Tomcat 的启动时间,添加 java.security.egd 的系统属性,指向 /dev/urandom 作为 ENTRYPOINT。
这样 Spring Boot 项目添加 Docker 依赖就完成了。
2) 生成Docker镜像
接下来使用 Dockerfile 生成 Docker 镜像,先将项目 spring-boot-starter-docker 复制到服务器中。需要注意的是,示例测试的服务器为 CentOS,默认安装包为 JDK 和 Docker。然后,进入项目根目录,使用如下命令生成 Docker 镜像:
mvn package docker:build在控制台执行上面的命令之后,首次构建可能会比较慢,当看到如下图所示的内容时表明构建成功。

图 2 docker build的运行结果
通过上面的输出信息可以看到,Docker 镜像已经构建成功。使用 docker images 命令查看构建好的镜像,如下图所示。

图 3 Docker镜像列表
3) 运行Docker镜像
上面我们看到的 springboot/spring-boot-docker 镜像就是构建好的 Docker 镜像,接下来运行该镜像,创建并启动应用:docker run -p 8080:8080 -t springboot/spring-boot-docker命令执行完成之后,使用 docker ps 查看正在运行的镜像,如下图所示:

图 4 运行中的镜像
通过上面的输出可以看到构建的应用正在运行,使用浏览器访问 http://10.2.1.231:8080/,返回结果为 Hello Spring Boot Docker!,表示系统启动成功,能够正常访问。