更好的阅读体验:点这里 ( www.doubibiji.com
)
2 Docker部署SpringBoot项目
已经学习了 Dockerfile 了,下面介绍一下如何将 SpringBoot 项目通过 Dockerfile 来部署到 Docker 中。
1 修改项目配置
首先需要准备一个 SpringBoot 项目,将 SpringBoot 项目打成 jar 包。
将项目中的 pom.xml 中的打包方式设置为jar包
<groupId>com.doubibiji</groupId>
<artifactId>hello-springboot</artifactId>
<version>1.0</version>
<!-- 修改打包方式为 jar 包 -->
<packaging>jar</packaging>
另外如果项目中用到数据库或redis缓存等组件,注意修改地址,不要为 localhost,因为部署到 docker 中,是不在一个容器中的,所以要写明数据库或缓存的地址。
2 打包
执行 maven 工具中的 clean 命令清除编译的 target 目录。
然后再执行 maven 中的 package指令,进行打包。
打完包,会在编译的target目录下生成 jar 包。
3 拷贝文件
我们可以在项目根目录下创建一个 docker 文件夹,然后在这个文件夹中编写一个 Dockerfile 文件,并将 jar 包拷贝并放在这个目录下。
其实这里主要是比较清晰的管理 docker 文件,这里的两个文件后面是需要拷贝到 Docker 宿主机上的。
这一步不影响后面的构建,只是为了将 Dockerfile 比较清晰的保存在项目下。
4 编写 Dockerfile 文件
编写 Dockerfile 文件,这里已 openjdk:11
镜像为基础镜像进行构建,因为 SpringBoot 项目是内置 Tomcat 的,所以只需要 JDK 环境即可。
Dockerfile 内容如下:
# 使用基础的 Java 11镜像
FROM openjdk:11
# 对外暴露的端口是8091
EXPOSE 8080
# 设置环境变量来指定时区
ENV TZ=Asia/Shanghai
# 将时区文件复制到容器中的特定路径
RUN ln -sf /usr/share/zoneinfo/{TZ} /etc/localtime && echo "{TZ}" > /etc/timezone
# 将jar包添加到容器中并更名为app.jar
ADD hello-springboot-0.0.1-SNAPSHOT.jar app.jar
# 这个命令的目的是确保 app.jar 文件存在
RUN bash -c 'touch /app.jar'
# 运行jar包
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
5 将文件传输到服务器
将 Dockerfile
和 hello-springboot-0.0.1-SNAPSHOT.jar
传输到服务器。
目录自己定义,我这里例如放在 /home/doubi/hello-springboot
目录下。
6 构建镜像
在命令行中,进入到 Dockerfile
和 hello-springboot-0.0.1-SNAPSHOT.jar
所在目录,然后执行如下指令:
docker build -t hello-springboot .
-
-t
:参数hello-springboot
是表示建后的镜像名称, -
.
:表示Dockerfile
所在的当前目录
构建完成,使用 docker images
可以查看到构建完成的镜像:
7 运行镜像
首先新建一个 logs 目录,用于挂载日志目录,这样在主机上查看日志比较方便。
然后使用如下指令运行镜像
docker run -d -p 8080:8080 --restart=always -v /home/doubi/hello-springboot/logs:/logs hello-springboot
-d
:表示后台运行-p
:表示端口映射(宿主机端口:容器端口)--restart=always
:容器停止后自动重启-v
:挂载目录映射(宿主机目录:容器目录),将日志文件夹映射到主机上,方便查看日志。
通过 docker ps
命令查看运行中的容器:
8 访问项目
使用浏览器,通过 IP
和 端口
即可访问项目。