Docker部署Spring Boot应用

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。 使用Docker我们可以很方便的部署Spring Boot应用。

首先构建一个简单的 Spring Boot 项目,然后给项目添加 Docker 支持,最后对项目进行部署

Spring Boot 项目

在pom.xml文件中添加web和测试依赖

1
2
3
4
5
6
7
8
9
10
11
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

创建一个Controller来验证是否部署成功

1
2
3
4
5
6
7
8
@RestController
public class DockerController {

@RequestMapping("/")
public String index() {
return "Docker && Spring Boot";
}
}

Spring Boot 项目添加 Docker 支持

在pom.xml中添加Docker镜像名称及插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<properties>
<docker.image.prefix>springboot</docker.image.prefix>
</properties>

<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>

在src/main/docker 下创建DockerFile文件

1
2
3
4
5
6
7
8
#第一行必须指令基于的基础镜像
FROM openjdk:8-jdk-alpine
#创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。
VOLUME /tmp
#该命令将复制指定的 到容器中的,并且重命名
ADD spring-boot-docker-1.0.jar app.jar
#配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

构建打包环境

以 Centos 7 为例

安装 Docker 环境

1
2
3
4
5
6
7
8
9
10
11
安装
yum install docker

启动
service docker start

镜像加速
vi /etc/docker/daemon.json
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}

输入docker version 返回版本信息则安装正常

安装MAVEN

  1. 下载安装文件
    wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz

  2. 解压安装:
    tar -zxvf apache-maven-3.3.9-bin.tar.gz

    mv apache-maven-3.3.9 /usr/local/maven3

修改环境变量, 在/etc/profile 最后添加以下几行

1
2
3
MAVEN_HOME=/usr/local/maven3
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin

执行source /etc/profile使环境变量生效。

输入mvn -version 返回版本信息则安装正常。

使用 Docker 部署 Spring Boot 项目

将项目 拷贝服务器中,进入项目路径下进行打包测试

1
2
3
4
#打包
mvn package
#启动
java -jar target/spring-boot-docker-1.0.jar

如果打包失败,跳过test打包

mvn package -Dmaven.test.skip=true

看到 Spring Boot 的启动日志后表明环境配置没有问题,接下来我们使用 DockerFile 构建镜像

mvn package docker:build

使用docker images命令查看构建好的镜像:

1
2
3
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
springboot/spring-boot-docker latest 99ce9468da74 6 seconds ago 117.5 MB

运行该镜像

1
docker run -p 8080:8080 -t springboot/spring-boot-docker

使用docker ps查看正在运行的镜像:

然后访问浏览器。http://192.168.x.x:8080/

部署完成