使用 Docker 部署 SpringBoot 项目 (Jar 包、War包)
程序员文章站
2024-02-02 10:30:34
...
0 环境
Linux:vargrant安装Linux
Docker:Linux安装docker
1 准备工作
- 首先新建一个 SpringBoot 项目,在 pom.xml 中添加如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--web模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.3.RELEASE</version>
</dependency>
- 在 pom.xml 中的 标签中 新增 :
<properties>
<java.version>1.8</java.version>
<!--规定docker打包后镜像名称前缀-->
<docker.image.prefix>springboot</docker.image.prefix>
</properties>
- 在 pom.xml 的 标签中添加 如下插件:(build 标签完整代码)
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<!--镜像名称-->
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<!--jar 包所在目录,缺省为target-->
<directory>${project.build.directory}</directory>
<!--jar 包名,缺省为 $project.artifactId}-${project.version}-->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
- 修改端口号(可选)
在 application.properties 中新增:
server.port=8081
- 新增一个 controller,测试使用
package com.ifknow.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author: ifknow <br>
* @date: 2020/9/8 10:32 <br>
* @description: 测试
*/
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "Hello Docker!";
}
}
- 在 src/main 下新建 docker 文件夹,在 docker 文件夹下创建 Dockerfile 文件(重要!)
Dockerfile 内容如下:
# 使用 JDK 8 环境为基础环境,如果镜像不是本地的将会从 DockerHub 进行下载
FROM openjdk:8-jdk-alpine
# 在宿主机的 /var/lib/docker 目录下创建一个临时文件并把它链接到 tomcat 容器的工作目录 /tmp目录
VOLUME /tmp
# 复制文件并重命名 spring-boot-docker-1.0.jar 表示打包后的 jar 包名称
ADD spring-boot-docker-1.0.jar app.jar
# 为了缩短Tomcat启动时间,添加 java.security.egd 的系统属性指向 /dev/urandom 作为ENTRYPOINT
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
- 上传
将 springboot 项目上传到 Linux 的某个目录下. 可以使用 SecureCRT or Xftp.
- 其他
Linux 环境要安装 maven、docker。
2 部署 springboot jar包项目
- 进入到 项目目录下:
cd spring-boot-docker/
- 执行打包操作:
mvn clean package
- 运行 jar 包 测试
java -jar target/spring-boot-docker-1.0.jar
- 启动成功后,构建 Dockerfile 镜像
mvn package docker:build
…赖心等待,出现下图所示内容,说明构建镜像成功。
- 查看镜像
# 列出所有镜像
docker images
- 运行镜像
docker run -p 8081:8081 -t springboot/spring-boot-docker
# -p 8081:8081 的含义是:将本地主机的 8081 端口映射到容器的 8081 端口(冒号前是主机端口)
# -t springboot/spring-boot-docker 的含义是:运行那个镜像
- 查看进行中的镜像
docker ps
# docker ps -a #查看所有所有镜像包括正在运行和已结束的
- 在浏览器中访问 http://ip:8081/hello ,页面会返回 Hello Docker!
3 部署 war 包项目
新建一个 war 包项目比较复杂,这里给出一个方案:在上面的 Jar 包项目的基础上改动!
修改 pom.xml
- 将项目打包后的 war 包,上传到服务器指定目录下!
- 安装 tomcat 镜像并启动
# 搜索tomcat镜像
docker search tomcat
# 下载镜像
docker pull docker.io/tomcat
# 启动 tomcat 镜像
# -d 的含义是后台运行 -p 的含义是端口映射,将主机的 8088 端口 映射到 docker 容器端口
docker run -d -p 8088:8080 docker.io/tomcat
- 测试
打开浏览器 访问 http://ip:8088 。
**注意:**如果出现404,可能的原因的端口未放开。但是我并不是这个原因,经过 查看 docker 内的 tomcat 容器目录和 tomcat 的官方目录 可以看到 容器中 的 webapp.dist 才是正确的webapp目录。
解决方法:
(图片来源于:https://blog.csdn.net/qq_40891009/article/details/104012792)
(图片来源于:https://blog.csdn.net/qq_40891009/article/details/104012792)
- war 包部署
将 我们穿过来的 war 包 拷贝到 tomcat 容器的 webapps 下
查看当前运行的镜像:
docker ps
拷贝操作:
docker cp /root/workspace/spring-boot-docker-0.0.1-SNAPSHOT.war 8f63b712c7f:/usr/local/tomcat/webapps
# cp 的含义是拷贝
# /root/workspace/spring-boot-docker-0.0.1-SNAPSHOT.war 的含义是war包路径
# 8f63b712c7f:/usr/local/tomcat/webapps:8f63b712c7f的含义是tomcat容器的 container_id
tomcat 容器会自动将 war 包 解压。
- 测试访问
在浏览器中访问:http://ip:8088/spring-boot-docker-0.0.1-SNAPSHOT/hello
上一篇: Idea中jar包的打包及导入
推荐阅读
-
使用 Docker 部署 SpringBoot 项目 (Jar 包、War包)
-
jenkins部署SpringBoot的jar包项目到docker容器并运行
-
使用Docker运行SpringBoot的WEB应用程序(从生成jar包到运行)
-
dubbo+springboot分模块项目发布为jar包的方法
-
springBoot项目打war包,部署到外部tomcat;解决打包后resources下的文件全部丢失
-
Linux服务器安装tomcat,并部署项目war包
-
springboot 项目执行出现中文乱码(从本地运行到打war包)
-
Linux系统下spring boot项目以war包方式部署运行
-
Springboot把WEB项目打成WAR包部署到外部TOMCAT
-
SpringBoot打包项目成war包,并部署到服务器的tomcat上