SpringBoot项目docker部署

1.检查pom文件

在pom文件要有

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>


<properties>
<java.version>1.8</java.version>
</properties>


<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>

image-20240705124155937

image-20240705124226099

2.打包项目

可以选择跳过测试进行打包

image-20240705124335091

打包完成后出现target目录出现jar包,(因为jar包包含非常多的依赖,所以基本不会小于1M,如果小于1M可能就是打包配置不对,检查pom文件)

image-20240705124548553

3.运行jar测试

在cmd打开jar所在目录并运行 java -jar xxxx.jar,运行成功就是打包成功了

image-20240705125006278

4.编写 Dockerfile文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Docker 镜像构建
# @author <a href="https://github.com/Aixbox">Aixbox</a>
# @from <a href="https://www.aixbox.top">Aixbox-blog</a>

#使用java8基础镜像
FROM openjdk:8-jre

# Copy local code to the container image.
#把jar包添加到镜像中,并且起一个别名(必须起别名,不然会报错)
ADD Remote-CodeSandbox-0.0.1-SNAPSHOT.jar code.jar

# Build a release artifact.
#RUN mvn package -DskipTests

#暴露项目的端口8080
EXPOSE 8080

# Run the web service on container startup.
#镜像运行时运行的命令
CMD ["java","-jar","code.jar"]

5.上传jar和Dockerfile到linux

把jar和Dockerfile放在一个目录中,然后把这个目录上传到linux服务器的文件夹中(注意:上传到的文件夹确保普通用户能够访问,如果只能root用户访问需要更换上传的文件夹,因为上传到root用户才能访问的文件夹后运行否在本机访问linux可能会因权限不足而访问失败)

image-20240705130815387

上传整个文件夹

image-20240705130852319

6.尝试访问

如果在普通用户的身份下进入到了上传的目录,那就是可以的,如果不行就需要更换到其他文件价上传,尤其是ubuntu系统,需要特别注意

image-20240705131047550

7.打包镜像&运行容器

根据项目的不同修改下面的命令

1
2
3
4
5
6
7
8
#在上传的文件夹的Dockerfile文件的目录下执行下面的命令进行打包,不是ubuntu可以去掉sudo 
# -t 给镜像设置一个标签(名称) .指定了构建上下文,表示使用当前目录的内容构建镜像
sudo docker build -t oj-frontend .


#在上传的文件夹的Dockerfile文件的目录下执行下面的命令运行一个新的容器,不是ubuntu可以去掉sudo
# -d 表示容器在后台运行,不会阻塞当前终端 --name 为容器指定一个名称 -p 8102:80 表示将宿主机的8102端口映射到容器的80端口 oj-frontend 表示用来创建容器的镜像名
sudo docker run -d --name oj-frontend -p 8102:80 oj-frontend

image-20240705132835902

image-20240705132859064

8.开放防火墙&检查运行是否成功

到容器中查看是否启动成功

image-20240705134104851

1.在防火墙中开放刚开启的端口,因为我的防火墙关闭了,无须开放

2.在云服务商平台也要开启端口

image-20240705133858749

在浏览器访问,有数据显示就是部署成功了

image-20240705134341897