Dcoker是一个开源的应用容器引擎,介绍我就不介绍了,总之就是很牛批,用过的都相见恨晚 笑眼.png
平时我们不是应用都是先搭建相关环境,然后把应用启动一通配置好
本地环境需要搭建一次,测试环境需要搭建一次,生产环境也需要搭建一次,这样重复的工作就做了几次,效率降低 不高兴.png
使用了docker了?我们只需要构建一次镜像,然后不同的环境只需要把镜像拉下来启动就行了,是不是很简单?
如果配合CI/DI持续集成,持续部署,那就太爽歪歪了,我们只需要把代码提交到git,剩下打包/编译/测试/部署工作就全自动自己运行了,是不是大大提高了生产力? 滑稽.png
废话不多说,今天先研究docker怎么构建SpringBoot,改天再研究CI/DI~


1 安装Docker

首先docker只支持CentOS7以上的系统,如果系统版本过低请升级系统
这里我使用的是CentOS7 x64
docker安装教程详见:Docker的基本操作与使用

2 准备SpringBoot应用

这里我们使用idea来快速构建一个SpringBoot应用
2020-05-08T15:00:02.png

简单编写一个HelloController
2020-05-08T15:01:09.png

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public Object hello() {
        return "hello World!!!";
    }
}

右键启动类运行,浏览器输入 http://localhost:8080/hello 可以看到启动成功
2020-05-08T15:02:43.png

3 创建Dockerfile构建文件

我们创建docker文件夹,并在里面创建Dockerfile构建文件

$ mkdir docker
$ cd docker
$ vim Dockerfile

编写Dockerfile文件

# Docker image for springboot file run
# VERSION 0.0.1
# Author: Noisky
# 基础镜像使用openjdk:8
FROM openjdk:8u181-jdk-alpine
# 作者
MAINTAINER Noisky <noisky@ffis.me>
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp 
# 将jar包添加到容器中并更名为app.jar
ADD demo-0.0.1-SNAPSHOT.jar app.jar 
# 运行参数
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

4 制作SpringBoot镜像

将打包好的jar包放入docker文件夹,使docker文件夹只有Dockerfile和需要打包的jar文件

docker安装并启动后,我们来制作SpringBoot镜像
cd 进入docker目录
2020-05-08T15:09:35.png
运行以下命令来制作镜像,注意最后的.

docker build -t springdemo:v1 .
-t 参数是指定此镜像的名称

如图所示开始制作,最后的.表示当前目录,也就是构建镜像的上下文路径。提示successfully表示构建成功
2020-05-08T15:12:12.png

这时候我们可以使用 docker images 来查看构建的镜像了
2020-05-08T15:13:30.png

5 从新镜像启动容器

docker run -d -p 8188:8180 --name springdemo springdemo:v1
-d 参数是让容器后台运行 
-p 是做端口映射,此时将服务器中的8188端口映射到容器中的8080(项目中端口配置的是8080)端口

2020-05-08T15:16:14.png

运行成功
2020-05-08T15:19:53.png

现在的SpringBoot应用是使用docker构建并管理运行的
我们可以使用新端口来访问试试
2020-05-08T15:21:25.png