Spring Boot 2 实战:结合 Docker 容器化
1. 前言
Docker 是啥?好处是啥? 什么现在如果作为一名开发你还不知道甚至没有用过我都感觉你落伍了。Docker 是一种虚拟化的容器技术,目的为了打造持续集成、版本控制、可移植性、隔离性和安全性的应用集成。这都是官话。其实我认为最简单的理解就是 Docker 能给你的应用打造一套隔离的应用环境。只要能跑docker的环境,不管是Linux,还是 Mac,还是 windows 都能快速把你的应用部署过来甚至达到秒级启动。如果你有个Mysql集群镜像,你瞬间就能启动一个 Mysql 集群,如果让你用手撸一个估计得一袋烟的工夫。看到这里如果没用过 Docker,赶紧找资料学习去,并不难学。别忘记关注一下,回来接着下面的干货分享。 那么今天我将如何将 Spring Boot 应用容器化。
2. 环境
- Spring Boot 版本2.2.0.RELEASE
Jdk
版本java 8
这里可以选择openjdk8
或者oracle jdk8
Docker
环境自己可以选择Linux
,Mac
或者Win10专业版
没有太多区别- 开发工具
Idea 2019
旗舰版
3. Spring Boot 应用
通过 Idea 搭建一个简单的名称为docker-springboot
的 springboot web maven应用。 并编写一个 Spring MVC 接口。
接下来我们要把spring boot打包成可执行jar
点击上图的 package
或者熟悉 Maven的用高逼格命令行操作 mvn clean package
编译好后会在 target
目录下找到一个打包好的 jar
文件。
4. 编写 Docker 脚本
下来该编写 Docker 创建镜像的打包脚本,名称必须是 Dockerfile,位置为项目根目录,还有通过 Maven 插件来操作位置不尽相同。内容如下
# 使用aws 的 openjdk8
FROM amazoncorretto:8
# 作者署名
MAINTAINER Felordcn
# 挂载的容器磁盘
VOLUME ["/tmp"]
# 使用东八区时间 环境 其他环境参数也可以通过ENV 声明
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# add 命令是 将主机构建环境(上下文)目录中的文件和目录、以及一个URL标记的文件 拷贝到镜像中
ADD /target/docker-springboot-0.0.1-SNAPSHOT.jar app.jar
# 暴露端口 跟springboot 默认应用端口一样
EXPOSE 8080
# 启动镜像就执行的命令操作 相当于执行 java -jar app.jar -Djava.security.egd=file:/dev/./urandom 最后的指令是为了加快启动
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
5. 构建镜像
然后在项目目录下打开命令行工具(idea 自带有)执行脚本(记得启动docker)不要忘记最后的点 代表当前路径 其他路径 写相对路径
docker build -t docker-springboot:0.0.1 .
然后进入分层构建阶段 走到最后镜像就成了如下
6. 启动容器
命令行 执行 docker images
查看一下是否存在 一个 docker-springboot:0.0.1
的镜像,只要结果跟上图一样就一定存在。然后从镜像启动一个容器,命令行如下
docker run --name docker-app -p 8088:8080 docker-springboot:0.0.1
该命令的意思是 我前台从 docker-springboot:0.0.1
镜像启动一个名字叫 docker-app
的容器应用,同时将容器内部端口8080
映射到宿主机端口8088
,这样我们可以通过本地端口8088
访问容器端口8080
。然后你访问上面写好的那个接口 http://localhost:8088/docker/hello
大功告成。 这样我们就简单的实现了 Spring Boot 应用的容器化
7. 总结
应用容器化是近年来的热点。而且容器技术层出不穷,掌握应用的容器化技术还是很有必要的。今天我们一步一步从零利用 Docker 构建了一个 Spring Boot
容器 。希望对你有所帮助。
关注公众号:Felordcn获取更多资讯