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

news2024/12/25 20:33:01

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

目录

  • 前言
    • 1、项目打包
    • 2、编写Dockerfile文件
      • 2.1、单个jar部署
        • 🍕Dockerfile文件常用命令
      • 2.2.1、编写一个Dockerfile 文件格式制作镜像
    • 2.1.2、执行docker命令
      • 2.2、多个jar一起部署到docker
        • 2.2.1、编写start.sh启动文件
        • 2.2.2、编写Dockerfile文件
        • 2.2.3、执行docker命令

前言

该方式适用于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
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1002249.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑提示“Windows Boot Manager boot failed”怎么办?

如果主引导记录(MBR)损坏&#xff0c;则会出现此错误消息“Windows Boot Manager boot failed”。因此&#xff0c;Windows 10引导管理器未能找到操作系统加载程序可能是由于MBR损坏。损坏MBR的原因可能是恶意软件感染或关闭电脑时使用方法不当。那么&#xff0c;Windows提示“…

【iOS】push与present Controller的区别

文章目录 前言一、push方法二、pop方法三、present方法四、dismiss方法五、dismiss多级的方法举例动画 前言 iOS推出与退出界面有两种方式——push与present&#xff0c;接下来笔者分别介绍这两种方式 一、push方法 SecondViewController *second [[SecondViewController all…

运行ORB-SLAM3,整体感觉还不错

安装文档&#xff0c;可以参考 https://blog.csdn.net/u014374826/article/details/132013820 运行测试 双目IMU 可以参考官方文档 Running ROS example: Download a rosbag (e.g. V1_02_medium.bag) from the EuRoC dataset (http://projects.asl.ethz.ch/datasets/doku.ph…

Docker笔记-概念安装简单使用

概念 docker通用词汇。 镜像&#xff1a;Build&#xff0c;创建一个镜像。 仓库&#xff1a;Ship&#xff0c;从仓库和主机上运输镜像。 容器&#xff1a;Run&#xff0c;运行的镜像就是一个容器。 安装 Windows上安装 Docker对win10有原生的支持&#xff0c;win10下的是…

zemax优化功能

1、三种优化方法 zemax的三种优化方法中&#xff0c;局部优化会找到局部的极小值点&#xff0c;全局优化会找到整体的最小值点。 锤形优化适用于先用全局优化找到大概值后&#xff0c;进一步完善光学系统 对于评价函数单调或者局部最小值就是全局最小值的情况&#xff0c;使…

1976~2020年青藏高原典型冰川及冰湖遥感监测数据集

冰川面积是反应气候变化最直接的指标之一。在全球变暖的大背景下&#xff0c;对于评估冰川融化造成的生态、全球气候变化和水资源价值评价等问题十分重要。本文针对受西风和印度洋夏季风影响下的青藏高原冰川及其末端冰湖的变化特征&#xff0c;制作了近44年来时相相对连续的冰…

使用LlamaIndex构建自己的PandasAI

推荐&#xff1a;使用 NSDT场景编辑器 快速搭建3D应用场景 Pandas AI 是一个 Python 库&#xff0c;它利用生成 AI 的强大功能来增强流行的数据分析库 Pandas。只需一个简单的提示&#xff0c;Pandas AI 就可以让你执行复杂的数据清理、分析和可视化&#xff0c;而这以前需要很…

为特征向量数据(1D数组)叠加噪声实现数据增强

为特征向量数据&#xff08;1D数组&#xff09;叠加噪声实现数据增强 日期作者版本备注2023.09.11Dog TaoV1.0完成文档的初始版本。 文章目录 为特征向量数据&#xff08;1D数组&#xff09;叠加噪声实现数据增强背景介绍叠加噪声的主要方法高斯噪声&#xff08;Gaussian Nois…

移动机器人(浙大)(待补充)

目录 1.简介 1.1分类 1.2执行模式 2.运动学建模 2.1简述 2.2建模 2.2.1分量叠加 3.导航规划 ​编辑 4.路径规划 1.简介 1.1分类 按移动方式&#xff1a;轮式、履带式、足式、躯干式 1.2执行模式 未知的环境中构建局部地图/已知环境则有地图&#xff0c;根据环境和定位信息进…

AtCoder Beginner Contest 319(D-G)

D.Tasks - AtCoder Beginner Contest 319 &#xff08;1&#xff09;题意 给你一个M行得框框和N个单词&#xff0c;每个单词有一个宽度&#xff0c;每个单词之间应该用一个空格隔开&#xff0c;首位单词不需要&#xff0c;问至少需要多宽才能使得单词不会超过M行。 &#xff08…

Batch normalization和Layer normalization

深度学习的归一化方法 1 归一化的目的 当我们使用梯度下降法做优化时&#xff0c;随着网络深度的增加&#xff0c;输入数据的特征分布会不断发生变化&#xff0c;为了保证数据特征分布的稳定性&#xff0c;会加入Normalization。从而可以使用更大的学习率&#xff0c;从而加速…

快速搭建:对象存储平台MinIO

简介&#xff1a;MinIO 是一个高性能的对象存储服务器&#xff0c;兼容Amazon S3云存储服务。适用于大数据存储和用于构建私有云的场景。作为一个对象存储服务&#xff0c;它基于Apache License 开源协议&#xff0c;兼容Amazon S3云存储接口。适合存储非结构化数据&#xff0c…

【软件分析/静态分析】chapter8 课程11/12 指针分析—上下文敏感(Pointer Analysis - Context Sensitivity)

&#x1f517; 课程链接&#xff1a;李樾老师和谭天老师的&#xff1a; 南京大学《软件分析》课程11&#xff08;Pointer Analysis - Context Sensitivity I&#xff09;_哔哩哔哩_bilibili 南京大学《软件分析》课程12&#xff08;Pointer Analysis - Context Sensitivity II&…

PCL入门(四):octree简单使用

目录 1. 八叉树(Octree)2. 简单使用 参考博客《三维点云数据的两种结构Kdtree和Octree》和《八叉树》 1. 八叉树(Octree) 只需要考虑三维情况下的八叉树的情况&#xff0c;如下 设置最大的递归深度&#xff1b;找出场景的最大尺寸&#xff0c;并据此创建第一个立方体若未到达…

linux安装jdk1.8

1.下载jdk安装包&#xff1a; https://www.oracle.com/cn/java/technologies/downloads/#java8-windows 2.创建java文件夹&#xff1a; mkdir /usr/local/java3.上传安装包并解压&#xff1a; tar -xzf jdk-xxx.tar.gz4.修改profile文件&#xff1a; vim /etc/profile在文…

计算机专业毕业设计项目推荐04-物业管理系统(SpringBoot+原生Js+Mysql)

物业管理系统&#xff08;SpringBoot原生JsMysql&#xff09; **介绍****系统总体开发情况-功能模块****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设计…

物联网 低功耗蓝牙BLE GATT 实现微信小程序通信连接详细教程

蓝牙基本概念 蓝牙技术是一种无线通信的方式&#xff0c;利用特定频率的波段&#xff08;2.4GHz ~ 2.485GHz左右&#xff09;&#xff0c;进行电磁波传输。蓝牙传输原理是主从关系&#xff0c;一个主设备可以与7个蓝牙从设备配对。 经典蓝牙 vs BLE 蓝牙分为经典蓝牙和低功耗…

最新软件测试面试题+笔试题(十个面试官里有九个会问)

2023最新软件测试面试大全看完offer拿到手软_哔哩哔哩_bilibili2023最新软件测试面试大全看完offer拿到手软共计21条视频&#xff0c;包括&#xff1a;1.HR已读不回问题分析以及如何解决、2.HR已读不回之针对性进行简历优化。、3.HR已读不回之针对性进行技能提升路线。等&#…

编程语言流行度排名(每月更新)

2023年09月编程语言流行度排名 编程语言流行度排名是通过分析在谷歌上搜索语言教程的频率而创建的 一门语言教程被搜索的次数越多&#xff0c;大家就会认为该语言越受欢迎。这是一个领先指标。原始数据来自谷歌Trends 如果您相信集体智慧&#xff0c;那么流行编程语言排名可以…

数据结构与算法之二叉树、二叉搜索树、平衡二叉树、红黑树、B - 树、哈夫曼树等详细教程(更新中)

第一章、二叉树概述和基本算法 1.1 二叉树遍历算法概述 对于二叉树&#xff0c;其实遍历顺序一共有6种&#xff0c;基于有左子树&#xff0c;右子树&#xff0c;根这三个因素&#xff0c;即排列组合有3 * 2 * 16种结合顺序&#xff0c;不过因为算法思想是一样的&#xff0c;就…