docker实现部署jar包项目教程(包括单个和多个一起部署)

 更新时间:2025年07月19日 08:26:06   作者:方渐鸿  
文章介绍了Docker部署Spring Boot项目的方法,涵盖单个jar包的打包、Dockerfile编写及运行,多个jar包通过启动脚本同时部署的技巧,并建议在部署复杂或数量多时使用Docker Compose或K8s统一管理

建议学习本博客之前,需要对docke的基本命令有过学习;

前言

该方式适用于jar包较少时,项目复杂度不高时使用,如果部署的比较多的话还是建议使用docker的编码工具Docker Compose或者k8s进行统一部署

1、项目打包

如果项目配置文件中有配置文件的ip地址是localhost需要改为时间的IP地址

先把项目打成jar包,注意配置spring boot的maven打包

<build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <!-- Maven Compiler Plugin -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!-- 在此处添加任何其他 Maven 编译插件的配置,如果需要的话 -->
            </plugin>
        </plugins>
    </build>

避免在jar执行时出现如:servier-gateway-1.0.jar中没有主清单属性、找不到或无法加载主类等错误,打包完成后可以先在本地执行 java -jar xxx.jar 运行一下jar包,先在本地确保可以正常运行先。

2、编写Dockerfile文件

2.1、单个jar部署

Dockerfile文件常用命令

命令描述
FROM指定基础镜像,用于构建新的镜像。
COPY将文件从宿主机复制到容器中。
ADD类似于COPY,但支持远程文件和自动解压缩。
RUN在镜像中运行命令,用于安装软件包和执行其他构建任务。
CMD定义容器启动时要执行的命令,只能有一个CMD命令,如果有多个,只有最后一个会生效。
ENTRYPOINT定义容器启动时要执行的命令,与CMD不同的是,ENTRYPOINT的参数不会被覆盖。
ENV设置环境变量,用于配置容器的运行环境。
WORKDIR设置容器内的工作目录,后续命令将在该目录下执行。
EXPOSE声明容器在运行时监听的端口,但并不映射端口到主机。
VOLUME创建一个挂载点,用于持久化数据。

2.2.1、编写一个Dockerfile 文件格式制作镜像

# 使用一个基础的 Java 镜像(根据自己项目中使用的是什么jdk版本设置,用于拉取执行jar包的jdk环境)
FROM openjdk:8-jdk-alpine

# 指定工作目录
VOLUME /tmp

# 复制应用程序的 JAR 文件到镜像中(需要是相对路径)
ADD ./servier-gateway/target/servier-gateway.jar servier-gateway.jar

# 定义容器启动时执行的命令
ENTRYPOINT ["java","-jar","servier-gateway.jar","&"]

2.1.2、执行docker命令

拉取生成镜像

docker build -t 对应着jar包的名字:版本(可以自己定) Dockerfile文件的路径,点是代表当前文件夹

docker build -t service-gateway:1.0.0 . 

查看docker里面的镜像 :

docker images

创建容器

docker run -d --name servier-gateway -p 8200:8200 a0e2430dd36f -t

查看容器是否启动成功

启动成功之后,可以访问对应的端口进行查看验证

2.2、多个jar一起部署到docker

如果是有多个服务需要部署,则可以统一写在一个Dockerfile文件里,可以减少麻烦

格式如下:通过创建一个启动脚步(start.sh),在其中启动多个jar包;然后在 Dockerfile 中使用 CMD 指令来运行这个启动脚本。

2.2.1、编写start.sh启动文件

这种启动脚本的好处是它允许你在同一个容器中同时启动多个应用程序,这对于某些复杂的应用程序架构可能很有用。每个应用程序在后台运行,容器保持活跃,直到你手动停止容器。

  • java -jar service-sys.jar & :命令表示以 Java 命令运行 service-sys.jar 文件,& 符号表示在后台运行,以便同时启动多个应用程序。
  • tail -f /dev/null :用于防止容器在应用程序启动后立即退出,tail -f /dev/null 命令会持续监视 /dev/null 文件(一个空文件);这是因为容器在主进程退出时会停止,但在这种情况下,tail 命令会一直运行,使容器保持活跃。
#!/bin/sh

# 启动多个JAR包,每个JAR包后台运行
java -jar service-activity.jar &
java -jar service-product.jar &
java -jar service-sys.jar &
java -jar service-user.jar &

# 保持容器运行
tail -f /dev/null

2.2.2、编写Dockerfile文件

# 使用一个基础的 Java 镜像
FROM openjdk:8-jdk-alpine

# 指定工作目录
WORKDIR /tmp

# 复制应用程序的 JAR 文件到镜像中的根路径下
COPY ./service-activity/target/service-activity.jar service-activity.jar
COPY ./service-product/target/service-product.jar service-product.jar
COPY ./service-sys/target/service-sys.jar service-sys.jar
COPY ./service-user/target/service-user.jar service-user.jar


# 定义容器启动时执行的命令
COPY start.sh start.sh

# 赋予启动脚本可执行权限
RUN chmod +x start.sh

# 定义容器启动时执行的命令
CMD ["./start.sh"]

2.2.3、执行docker命令

拉取下载镜像(同上)

docker build -t my-image .

查看镜像

docker images

创建容器

通过这个镜像为每个jar包创建容器,可以通过这个镜像分别为不同jar包创建容器

docker run -d -p 8205:8205 --name service-activity my-image java -jar service-activity.jar

docker run -d -p 8203:8203 --name service-product my-image java -jar service-product.jar

docker run -d -p 8202:8202 --name service-sys my-image java -jar service-sys.jar

docker run -d -p 8206:8206 --name service-user my-image java -jar service-user.jar

查看容器是否启动成功

docker ps 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • IDEA整合Docker的实现步骤

    IDEA整合Docker的实现步骤

    本文主要介绍了IDEA整合Docker的实现步骤,主要设置了远程连接,插件以及配置信息等,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • docker镜像下载的另一种方式(实测有效!)

    docker镜像下载的另一种方式(实测有效!)

    在Docker中下载镜像是一个关键步骤,因为镜像是容器运行的基础这篇,文章主要给大家介绍了关于docker镜像下载的另一种方式,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-05-05
  • Linux上使用docker启动redis并远程访问的实现

    Linux上使用docker启动redis并远程访问的实现

    这篇文章主要介绍了Linux上使用docker启动redis并远程访问的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • docker 的volumes清理步骤

    docker 的volumes清理步骤

    文章介绍了如何在Docker中清理volumes以释放磁盘空间,包括查看所有卷、查找未使用的卷、清理未使用的卷、手动删除特定卷、检查卷的使用情况、清理卷中的数据、预防措施以及迁移Docker数据目录等步骤,感兴趣的朋友一起看看吧
    2025-03-03
  • docker容器如何指定utf-8编码

    docker容器如何指定utf-8编码

    这篇文章主要介绍了docker容器如何指定utf-8编码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Docker如何限制容器可用的内存

    Docker如何限制容器可用的内存

    容器的使用过程中,经常需要对容器可以使用的主机资源进行限制,本文介绍如何限制容器可以使用的主机内存,需要的朋友参考下吧
    2017-12-12
  • docker安装,yum安装失败解决方案,阿里云镜像安装过程

    docker安装,yum安装失败解决方案,阿里云镜像安装过程

    在配置Yum源遇到问题时,尝试使用阿里云镜像可以有效解决,本文详细介绍了如何配置阿里云源及安装Docker的步骤,首先,若Yum源配置出错,建议更换为阿里云镜像;其次,详述了安装Docker的具体命令,包括启用阿里云源和安装过程中的选择提示
    2024-11-11
  • ubuntu 22.04安装docker的详细过程

    ubuntu 22.04安装docker的详细过程

    这篇文章主要介绍了ubuntu 22.04安装docker的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-04-04
  • 如何在docker中运行springboot项目过程图解

    如何在docker中运行springboot项目过程图解

    这篇文章主要介绍了如何在docker中运行springboot项目过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Docker部署MySQL8集群(一主二从)的实现步骤

    Docker部署MySQL8集群(一主二从)的实现步骤

    本文主要介绍了Docker部署MySQL8集群,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07

最新评论