在 Docker 中部署 SpringBoot 项目
一、简单步骤
1、生成一个可运行的 Jar 包或 War 包。(如在 IDEA 中,在 maven 上执行 install 即可)
2、编写Dockerfile文件
新建一个名为Dockerfile的文件,注意没有后缀名
# 镜像java版本,这里有坑,你可以看着项目里的pom.xml文件确定自己的版本,如果有问题的话多尝试几个
FROM openjdk:17
# VOLUME 指定了临时文件(使用容器卷)目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp。
VOLUME /tmp
# 将jar包添加到容器中并更名为test.jar
ADD test-0.0.1-SNAPSHOT.jar test.jar
# 暴露端口号
EXPOSE 8080
# 容器启动时会运行的命令
ENTRYPOINT ["java","-jar","/test.jar"]
3、将 SpringBoot 的 jar 包和 Dockerfile 文件一起放在 linux 系统下任意一个目录下
4、生成镜像。在此目录下执行以下命令:# docker build . -t test
5、查看镜像并运行
先查看镜像是否生成
# docker images
然后运行镜像
# docker run -d --name mytest -p 8080:8080 test
- mytest:容器名称
- test:镜像名称
6、查看容器启动情况
# docker logs mytest
二、实例
1、生成可运行的 war 包(app-1.0-SNAPSHOT.war)。
2、编写 Dockerfile,如下:
# 镜像 java 版本,这里有坑,有时候版本不合适会出现问题
FROM openjdk:8-jdk-alpine
# VOLUME 指定了临时文件(使用容器卷)目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp。
VOLUME /tmp
# 将 jar 包添加到容器中并更名为 app_debug.war
ADD app-1.0-SNAPSHOT.war app_debug.war
# 暴露端口号
EXPOSE 9080
# 容器启动时会运行的命令
ENV jvm_opts="-Xms64m -Xmx128m"
#ENTRYPOINT ["java","-jar -Xms64m -Xmx128m","/app_server_debug.jar"]
ENTRYPOINT exec java -jar $jvm_opts app_debug.war
3、生成镜像
# docker build . -t app_debug
4、生成并运行容器
# docker run -d -e TZ=Asia/Shanghai --name app_debug -p 9088:9080 -v /data/bjzqym_com/statics/app:/data/app -v /data/logs/app:/data/logs app_debug
- -d:在后台运行容器
- -e:指定容器内的环境变量,这里把时区设置为上海(TZ=Asia/Shanghai)
- --name:指定容器的别名
- -p:指定如何映射到本地主机端口,将容器的 9080 端口映射到本地 9088 端口,也就是说要访问到些项目,访问本地的 9088 端口即可。
- -v:将本地的目录挂载到容器中去,如 /data/bjzqym_com/statics/app:/data/app 是将本地的 /data/bjzqym_com/statics/app 目录挂载到容器的 /data/app,主要是将容器的数据保存到本地,防止丢失,本地程序也容易访问。
5、查看项目运行情况
# docker logs app_debug -n 300
当日志量较大时,指定行数是比较明智的。
6、如果需要进入到容器内部查看,可以执行下面的语句:
# docker exec -it zhxkapp_debug /bin/bash
由于基础镜像不同,有些可能执行的是下面的语句:
# docker exec -it zhxkapp_debug /bin/sh