Docker 部署 SpringBoot 项目

公司一直都是使用 Docker Run 项目, 配合阿里云开发工作台、聚石塔、弹性云服务器, 代码提交之后自动 Build 简直不要太爽, 但是架子都是 Leader 搭好的, 我只需要看日志排查问题… 对 Docker 算不上熟悉, 有时间还是得学习学习。

配置加速器

Docker 中国官方镜像加速

阿里云-容器镜像服务

Docker 配置加速器

使用 Docker 部署 SpringBoot

教程复用: 感谢 纯洁的微信

使用 Docker 部署 Spring Boot

Maven 配置

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>image-name</docker.image.prefix>
</properties>

<!-- build 依赖 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</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>
</plugins>
</build>

Dockerfile

Dockerfile 文件用来说明如何来构建镜像

1
2
3
4
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD spring-boot-docker-1.0.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

这个 Dockerfile 文件很简单,构建 Jdk 基础环境,添加 Spring Boot Jar 到镜像中,简单解释一下:

  • FROM: 表示使用 Jdk8 环境 为基础镜像, 如果镜像不是本地的会从 DockerHub 进行下载
  • VOLUME: VOLUME 指向了一个 /tmp 的目录,由于 Spring Boot 使用内置的 Tomcat 容器,Tomcat 默认使用/tmp作为工作目录。这个命令的效果是:在宿主机的 /var/lib/docker 目录下创建一个临时文件并把它链接到容器中的 /tmp 目录
  • ADD: 拷贝文件并且重命名
  • ENTRYPOINT: 为了缩短 Tomcat 的启动时间,添加 java.security.egd 的系统属性指向 /dev/urandom 作为 ENTRYPOINT

Docker 文档

  1. Docker 文档 | 命令
  2. Docker 文档 | 构建镜像