一个欲儿的博客

一个欲儿的博客

Docker部署SpringBoot项目
2025-04-01

简答介绍一下docker,其目的是为了解决不同设备不同环境相同代码无法跑通的问题,docker原理类似于虚拟机,虚拟机几乎能构建一个完全一模一样的环境,docker也是如此,其提供的镜像就相当于iso文件,其提供的容器技术,就是根据镜像生成的操作系统一样,所以能杜绝不同环境运行代码会报错的问题

1.首先导出一个jar包

jar包如何导出只需要在根目录输入如下命令即可构建完整的jar包

mvw package

如果你在构建过程中出现问题可访问如下链接帮助你

SpringBoot构建项目导出jar包疑难杂症 - Java修行 - 一个欲儿的博客


2.创建Dockerfile

记住Dockerfile这个文件没有后缀,并且第一个字母必须大写其余全部小写,完全按照这个文件来命名,至于Dockerfile的内容如何,可以完全交给AI

给出prompt的参考:编译环境+框架

比如我的项目就是:SpringBoot Java写的项目请帮我写一个Dockerfile

image.png

其中ChatGPT所说 维护者信息是可选内容,那我直接删了,其他的都留着挺好的,工作目录也换一下吧,我们换成mydocker用来做演示,我们导出的包叫car.jar并且我已经把他移动到和Dockerfile处于同一个目录,所以现在的目录结构如下

--Dockerfile
--car.jar

所以 复制到Jar文件到容器 的代码改为 COPY car.jar app.jar,容器内运行的SpringBoot暴漏的端口刚好是8080所以不用改,所以完整的Dockerfile如下

# 使用 OpenJDK 作为基础镜像
FROM openjdk:25-jdk

# 设置工作目录
WORKDIR /mydocker

# 复制 Jar 文件到容器
COPY car.jar app.jar

# 暴露应用端口(修改为你的 Spring Boot 应用使用的端口)
EXPOSE 8080

# 运行 Spring Boot 应用
ENTRYPOINT ["java", "-jar", "app.jar"]

其中开发环境和生产环境会由于路径的问题导致代码不能正常运行,为了解决这种问题我们可以配置多个yml,启动的时候按需要进行选择

ENTRYPOINT ["java", "-jar", "app.jar", "--spring.profiles.active=devyuer"]

3.创建镜像

其中openjdk:25-jdk是官方的镜像,所以这里需要进行下载,如果你的网不好,那么请记得翻墙,然后构建镜像,其中-t后面的参数为 镜像名字:版本号,镜像名字和版本号你可以随便取,但是后面有一个 . 特别重要千万别忘了,忘了就死

docker build -t mycarapp:1.0 .

4.容器中运行镜像

其中 8090:8080的意思是,8090是容器外的端口,8080是容器内的端口,很明显我们容器内才运行这个项目,但是我们如果想从容器外看看项目运行的怎么样那是不是应该访问容器里的8080,但是容器内通过端口映射映射到了容器外的8090,所以我们可以直接通过容器外的8090端口进行访问

docker run -p 8090:8080 mycarapp:1.0

运行命令还有一个 -d 可供选择,其意思为后台运行,前台不显示

docker run -d -p 8090:8080 mycarapp:1.0

5.导出镜像为本地文件

docker save -o "%USERPROFILE%\Desktop\myimages.tar" mycarapp:1.0

6.导入镜像

docker load -i "C:\myimages.tar"


发表评论: