0%

Spring Boot 实战学习:使用 Docker 部署项目

创建一个简单的 Spring Boot 项目

添加依赖:

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

添加 HelloController 类:

1
2
3
4
5
6
7
8
9
10
11
12
package com.kungge.dockeryes.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
@RequestMapping("/")
public String hello(){
return "Hello Docker";
}
}

启动项目,浏览器访问【http://localhost:8080/】返回 Hello Docker

20200520222256

项目添加 Docker 支持

在 pom.xml 文件节点 <properties> 下添加 Docker 镜像名称 <docker.image.prefix>springboot</docker.image.prefix>

构建打包环境

安装 Docker 环境

可参考本站文章:http://blog.kungge.com/p/centos-docker/

安装 JDK

可参考本站文章:http://www.kungge.com/kwan/3452.html

安装 Maven

可参考本站文章:http://blog.kungge.com/p/centos-maven-install/

Docker 部署项目

将项目打包成 jar 包,如本次为 docker-yes-0.0.1-SNAPSHOT.jar,将该包拷贝到 centos 服务器上。

部署测试

部署前测试,使用命令 java -jar docker-yes-0.0.1-SNAPSHOT.jar 启动项目:

20200521000449

启动成功,查看67234端口情况:

20200521000554

构建镜像

使用 Dockerfile 构建镜像,将 Dockerfile 和 项目jar包放到同一目录(如本次为 dockerTest 目录),然后使用命令 docker build -t docker-yes . 打包

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
[root@localhost dockerTest]# docker build -t docker-yes .
Sending build context to Docker daemon 16.47MB
Step 1/4 : FROM openjdk:8-jdk-alpine
8-jdk-alpine: Pulling from library/openjdk
e7c96db7181b: Pull complete
f910a506b6cb: Downloading
c2274a1a0e27: Download complete
8-jdk-alpine: Pulling from library/openjdk
e7c96db7181b: Pull complete
f910a506b6cb: Pull complete
c2274a1a0e27: Pull complete
Digest: sha256:94792824df2df33402f201713f932b58cb9de94a0cd524164a0f2283343547b3
Status: Downloaded newer image for openjdk:8-jdk-alpine
---> a3562aa0b991
Step 2/4 : VOLUME /tmp
---> Running in 8a40c4b9fdae
Removing intermediate container 8a40c4b9fdae
---> ef0ce2968a02
Step 3/4 : ADD docker-yes-0.0.1-SNAPSHOT.jar app.jar
---> cfc8d0fbf366
Step 4/4 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
---> Running in 0a391ff6d6de
Removing intermediate container 0a391ff6d6de
---> 587e3f576d87
Successfully built 587e3f576d87
Successfully tagged docker-yes:latest
[root@localhost dockerTest]#

使用命令 docker images 查看镜像,如下镜像已构建成功:

20200521230045

运行镜像

使用命令 docker run -p 8080:8080 -t docker-yes 运行镜像:

20200521230448

宿主机浏览器访问虚拟机8080网站 http://192.168.2.57:8080/,访问成功:

20200521230555

遇到的问题

构建镜像出错

20200521002451

1
2
3
4
[root@localhost dockerTest]# docker build -t docker-yes .
Sending build context to Docker daemon 16.47MB
Step 1/4 : FROM openjdk:8-jdk-alpine
Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

ping registry-1.docker.io 发现网络不通:

1
2
3
4
5
6
7
8
9
10
C:\Users\kungge>ping registry-1.docker.io

正在 Ping registry-1.docker.io [18.213.137.78] 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。

18.213.137.78 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),

这个问题可能是镜像源的问题,但是服务器之前已经配置为阿里云了,详见本站文章:http://blog.kungge.com/p/centos-docker/

1
2
3
4
[root@localhost dockerTest]# cat /etc/docker/daemon.json 
{
"registry-mirrors": ["https://o2rhzj4g.mirror.aliyuncs.com"]
}

最后发现 centos 无法访问外网:

1
2
[root@localhost dockerTest]# ping baidu.com
ping: baidu.com: Name or service not known

解决详见本站文章:http://blog.kungge.com/p/centos-staticip-problem/

您的支持是我最大的动力!