【2023】基于docker 实现部署jar包项目(包括单个和多个一起部署)

建议学习本博客之前,需要对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
    在这里插入图片描述
  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值