Docker 部署 SpringBoot 项目
修改docker.service
配置,开放 2375 端口
1
vi /usr/lib/systemd/system/docker.service
1
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
重启 docker
1
2
3
4
5
6
7
8
# 重新加载服务的配置文件
systemctl daemon-reload
# 重启 docker
service docker restart
# 开放端口
firewall-cmd --zone=public --permanent --add-port=2375/tcp
# 重启防火墙
systemctl restart firewalld
配置
Dockerfile
1
2
3
4
FROM hub.c.163.com/library/java:8-jdk
VOLUME /tmp
ADD target/docker_deploy-0.0.1-SNAPSHOT.war app.war
ENTRYPOINT ["java","-jar","/app.war"]
- SpringBoot 项目的运行依赖 Java 环境,所以自定义镜像要基于 Java 镜像来构建,这里使用了网易提供的 Docker 镜像。
- SpringBoot 运行时需要 tmp 目录,这里数据卷配置一个 /tmp 目录出来。
- 将本地 target 目录中打包好的 .war 文件复制一份新的 到 /app.war。
- 配置启动命令。
pom.xml
解决生成 war 包时,由于没有 /src/main/webapp/WEB-INF/web.xml 文件的报错
1
2
3
4
<properties>
<!-- 如果打包方式为 war 包,并且没有 /src/main/webapp/WEB-INF/web.xml 文件 -->
<failOnMissingWebXml>false</failOnMissingWebXml>
</properties>
新增插件
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
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.0</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<dockerHost>http://192.168.179.128:2375</dockerHost>
<imageName>yueyazhui/${project.artifactId}</imageName>
<imageTags>
<imageTag>${project.version}</imageTag>
</imageTags>
<forceTags>true</forceTags>
<dockerDirectory>${project.basedir}</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.war</include>
</resource>
</resources>
</configuration>
</plugin>
- 在 execution 节点中配置当执行 mvn package 的时候,顺便执行 docker:build。
- 在 configuration 节点中分别配置 Docker 的主机地址,镜像的名称,镜像的 tags,其中 dockerDirectory 表示指定 Dockerfile 的位置。
- 在 resource 节点中配置 war 的位置和名称即可。
Controller
1
2
3
4
5
6
7
8
@RestController
public class IndexController {
@GetMapping
public String index() {
return "Docker Deploy";
}
}
打包构建镜像
运行
方案一:
1
docker run -d --name docker_deploy_demo -p 8080:8080 yueyazhui/docker_deploy:0.0.1-SNAPSHOT
方案二:(推荐,通过 IDEA 运行镜像)
本文由作者按照
CC BY 4.0
进行授权