Docker部署(5)——使用docker run命令部署运行jar项目

       对于一些简单的单体项目,可以使用 docker run 命令可以直接在命令行中运行容器,无需事先构建镜像。这相较于之前使用的 dockerfile 文件来运行部署项目相当于是另外一种简单的部署方法,关于之前使用dockerfile 文件来运行部署这种方法,具体可以参考下面这篇文章:

Docker部署(1)——将jar包打成docker镜像并启动容器

      首先,先将jar包和配置文件放到项目目录下。

 

 然后直接在这个目录下运行 docker run 命令即可:

docker run -d -p 20238:20238 --name my-container-name \
-v $(pwd):/app \
-e CONFIG_FILE=/app/application.yml \
-e CONFIG_FILE_1=/app/config1.properties \
-w /app \
dockette/jdk8 java -Duser.timezone=GMT+08 -Dfile.encoding=utf-8 -jar /app/reportools-1.0.0.RELEASE.jar

运行结果如下: 

关于docker命令的相关解释:

① : -v 参数,您可以将宿主机上的目录或文件挂载到容器中。在您的命令中,通过 -v 参数挂载了配置文件、模板文件和应用程序 JAR 文件到容器的相应路径。关于 -v $(pwd):/app \   是下面代码简化后的结果:

-v /mnt/docker/files/ssexcel/config:/app/config \
-v /mnt/docker/files/ssexcel/template.xlsx:/app/template.xlsx \

-v /mnt/docker/files/ssexcel/reportools-1.0.0.RELEASE.jar:/app/app.jar \

②:CONFIG_FILE 是一个环境变量,用于指定配置文件的路径。在给定的命令中,通过 -e CONFIG_FILE=/app/application.yml 将环境变量 CONFIG_FILE 设置为 /app/application.yml,即将应用程序的配置文件路径设置为 /app/application.yml。-e 参数用于设置容器内的环境变量。在命令中,设置了两个环境变量 CONFIG_FILE 和 CONFIG_FILE_1。

-e 是 Docker 命令行选项的一部分,用于设置容器内的环境变量。它用于在运行容器时向容器内部传递环境变量。通过使用 -e 选项,可以将键值对形式的环境变量设置为容器内的环境变量。例如,-e VAR_NAME=value 将设置一个名为 VAR_NAME 的环境变量,其值为 value。

③:-d 参数表示将容器以后台(守护进程)模式运行。这样可以让容器在后台持续运行而不阻塞终端。接下来,-p 20238:20238 参数将容器的端口 20238 映射到主机的端口 20238,这样可以通过主机上的该端口访问容器内的服务。

最后,dockette/jdk8  是指定使用的镜像名称,java -jar app.jar 是要在容器中执行的命令。

④:如果要在这个基础上加上对数据的库的容器的连接,可以使用 Docker 的网络功能来实现两个容器之间的通信,一个容器用于运行应用程序 JAR 文件,另一个容器用于运行 MySQL 服务。这样可以更好地解耦和管理应用程序和数据库。修改命令如下:

  1. 创建一个自定义网络:

    docker network create my-network
  2. 运行 MySQL 容器,并将其连接到该网络:

    docker run -d --name mysql-container --network my-network -p <MySQL端口>:3306 -e MYSQL_ROOT_PASSWORD=<密码> mysql:5.6

    替换 <MySQL端口><密码> 为实际的 MySQL 端口和密码。

  3. 运行应用程序容器,并将其连接到相同的网络:

    docker run -d --name app-container --network my-network -p 20238:20238 \
    -v /mnt/docker/files/ssexcel/config:/app/config \
    -v /mnt/docker/files/ssexcel/template.xlsx:/app/template.xlsx \
    -e CONFIG_FILE=/app/config/application.yml \
    -e CONFIG_FILE_1=/app/config/config1.properties \
    -e DB_HOST=mysql-container -e DB_PORT=<MySQL端口> \
    -v /mnt/docker/files/ssexcel/reportools-1.0.0.RELEASE.jar:/app/app.jar \
    -w /app \
    openjdk:8 java -Duser.timezone=GMT+08 -Dfile.encoding=utf-8 -jar app.jar

    注意,DB_HOST 环境变量中的值为 mysql-container,这是 MySQL 容器的名称,因为它们在同一网络中,可以通过容器名称进行通信。

总结

        使用 docker run 命令以及 Dockerfile 文件这两种方式部署项目之间存在以下区别:

docker run 命令:

        使用 docker run 命令可以直接在命令行中运行容器,无需事先构建镜像。在命令行中提供的参数和选项定义了容器的配置和运行时行为。适用于简单的场景,不需要自定义的 Docker 镜像。


Dockerfile 文件:

        使用 Dockerfile 可以定义一个自定义镜像,包含特定配置和软件包。Dockerfile 文件描述了构建镜像时步骤和指令,通过构建过程生成镜像。可以根据需求自由修改 Dockerfile 中内容,添加依赖项、配置文件等。适用于复杂的程序或项目,需要自定义镜像,并且可能需要部署到多个环境中。使用 Dockerfile 可以实现更高级容器化设置,例如添加特定的环境变量、安装所需软件包、配置网络等。此外使用 Dockerfile 还可以与 CI/CD 工具集成,实现自动的持续集成和部署。

选择使用哪种方式取决于您的具体需求和场景:

  • 如果只是简单的容器化,不需要自定义镜像,可以使用 docker run 命令。
  • 如果项目较为复杂,涉及多个组件和配置,或者需要在不同环境中部署,建议使用 Dockerfile 构建自定义镜像。这样可以更好地管理和复用代码,并确保在不同环境中的一致性。

        总之,docker run 命令适用于简单的容器运行,而 Dockerfile 适用于构建自定义镜像和管理复杂的项目或应用程序。选择使用哪种方式根据您的具体需求和项目复杂性来决定。

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

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

相关文章

linux下安装qt、qt触摸屏校准tslib

linux下安装qt 在 Linux 系统下安装 Qt&#xff0c;可以通过以下步骤进行操作&#xff1a;1. 下载 Qt 安装包&#xff1a;首先&#xff0c;你需要从 Qt 官方网站&#xff08;https://www.qt.io/&#xff09;下载适用于 Linux 的 Qt 安装包。选择与你的系统和需求相匹配的版本&…

chrome extension无法获取window对象

背景见上一篇博客修改网页内容的方法 上一篇博客之后&#xff0c;我要修改的网页有一个新改版&#xff0c;然后有个数据存在了window中&#xff0c;我直接在js中使用window.xxx发现无法获取。所以有本文。 https://juejin.cn/post/7145749643316428830 https://onelinerhub.com…

网约车围城:百万司机涌入,狼多肉少

狼多肉少&#xff0c;网约车围城已经成为了一个不争的事实。虽然市场竞争越来越激烈&#xff0c;但机会还是有的&#xff0c;司机们也应该不断提高自身的服务质量和素质&#xff0c;以满足消费者的需求&#xff0c;获取更多的订单和收益。 网约车市场一直以来都是人们生活中不可…

为什么要分库分表?

分析&回答 什么是分库分表&#xff1f; 分库&#xff1a;从单个数据库拆分成多个数据库的过程&#xff0c;将数据散落在多个数据库中。分表&#xff1a;从单张表拆分成多张表的过程&#xff0c;将数据散落在多张表内。 为什么要分库分表&#xff1f; 主要为了提升性能、…

l8-d8 TCP并发实现

一、TCP多进程并发 1.地址快速重用 先退出服务端&#xff0c;后退出客户端&#xff0c;则服务端会出现以下错误&#xff1a; 地址仍在使用中 解决方法&#xff1a; /*地址快速重用*/ int flag1,len sizeof (int); if ( setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &a…

B-Tree 索引和 Hash 索引的对比

分析&回答 B-Tree 索引的特点 B-tree 索引可以用于使用 , >, >, <, < 或者 BETWEEN 运算符的列比较。如果 LIKE 的参数是一个没有以通配符起始的常量字符串的话也可以使用这种索引。 有时&#xff0c;即使有索引可以使用&#xff0c;MySQL 也不使用任何索引。…

【漏洞复现】E-office文件包含漏洞

漏洞描述 Weaver E-Office是中国泛微科技(Weaver)公司的一个协同办公系统。泛微 E-Office 是一款标准化的协同 OA 办公软件,实行通用化产品设计,充分贴合企业管理需求,本着简洁易用、高效智能的原则,为企业快速打造移动化、无纸化、数字化的办公平台。 该漏洞是由于存在…

巨人互动|游戏出海游戏出海效果怎样?

游戏出海是指将原本面向国内市场的游戏产品进行调整和优化&#xff0c;以适应海外市场的需求&#xff0c;并进行推广和销售。下面小编讲讲关于游戏出海对于游戏效果的影响的一些讨论点。 1、市场扩大 通过游戏出海&#xff0c;可以将游戏产品的目标受众从国内扩展到全球范围内…

Zebec Protocol 成非洲利比亚展会合作伙伴,并将向第三世界国家布局

在 9 月 6 日&#xff0c;The Digital Asset Summit ’23&#xff08;利比亚大会&#xff09;在尼日利亚首度阿布贾的 NAF 会议中心举办&#xff0c;该会议对 Web3 领域在非洲地区的发展进行了探索&#xff0c;旨在推动非洲地区区块链产业的进一步发展&#xff0c;据悉该会议室…

CSS 设置渐变背景 CSS 设置渐变边框

一、css渐变背景添加透明度opacity css渐变背景经常会在项目开发中遇到&#xff0c;此时UI如果给出的是单一的渐变背景&#xff08;没有背景透明度&#xff09;&#xff0c;这个我们会很快的写出代码&#xff0c;如下: <div class"btn">这是一个按钮</div&…

神策数据发布汽车行业 CJO 解决方案,打造客户旅程全新体验

最近&#xff0c;围绕数字化客户经营&#xff0c;神策数据基于“客户旅程编排&#xff08;Customer Journey Orchestration&#xff0c;简称 CJO&#xff09;”理念&#xff0c;发布汽车行业全新解决方案&#xff0c;通过全渠道打通给客户带来一致的、个性化的体验&#xff0c;…

【HTML专栏1】语法规范、基础结构标签

本文属于HTML/CSS专栏文章&#xff0c;适合WEB前端开发入门学习&#xff0c;详细介绍HTML/CSS如果使用&#xff0c;如果对你有所帮助请一键三连支持&#xff0c;对博主系列文章感兴趣点击下方专栏了解详细。 博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;HTML/CS…

第4章:网络层

文章目录 一、概述和功能2.SDN二、转发1.IP数据报(1)IP数据报的首部字段(2)IP数据报的分片2.IPv4地址:<网络号>,<主机号>3.IP编址 (三个历史阶段)(1)分类IP地址①特殊IP地址②私有IP地址③网络地址转换NAT:导致IP地址变化MAC地址、IP地址变化问题(2)子网划分与子…

go logger 不侵入业务代码 用slog 替换 zap 并实现 callerSkip

快速体验 以下是 项目中 已经用slog替换 zap 后的 logger 使用方法,与替换前使用方式相同,无任何感知 package mainimport "github.com/webws/go-moda/logger"func main() {// 格式化打印 {"time":"2023-09-08T01:25:21.31346308:00","le…

滴滴笔试——算式转移

题目&#xff1a;给出一个仅包含加减乘除四种运算符的算式(不含括号)&#xff0c;如12*3/4&#xff0c;在保持运算符顺序不变的情况下&#xff0c;现在你可以进行若干次如下操作&#xff1a;如果交换相邻的两个数&#xff0c;表达式值不变&#xff0c;那么你就可以交换这两个数…

Ceph入门到精通-生产日志级别设置

Ceph 子系统及其日志记录级别的信息。 了解 Ceph 子系统及其日志记录级别 Ceph 由多个子系统组成&#xff1a; 每个子系统都有其日志记录级别&#xff1a; 默认情况下存储在 /var/log/ceph/ 目录中的输出日志&#xff08;日志级别&#xff09;存储在内存缓存中的日志&#…

无涯教程-JavaScript - DEC2HEX函数

描述 DEC2HEX函数将十进制数转换为十六进制。 语法 DEC2HEX (number, [places])争论 Argument描述Required/Optionalnumber 要转换的十进制整数。 如果number为负数,则将忽略位数,并且DEC2HEX返回10个字符(40位)的十六进制数字,其中最高有效位是符号位。其余的39位是幅度位…

Laravel 模型的关联写入多对多的关联写入 ⑩③

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; THINK PHP &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f44…

读高性能MySQL(第4版)笔记04_操作系统和硬件优化

1. 从软件本身和它运行的典型工作负载来看&#xff0c;MySQL通常也更适合运行在廉价硬件上 2. 基本资源 2.1. CPU 2.2. 内存 2.3. 磁盘 2.4. 瓶颈 2.5. 网络资源 3. CPU 3.1. 最常见的瓶颈是CPU耗尽 3.2. 检查CPU使用率来确定工作负载是否受CPU限制 3.3. 低延迟&…

Python基础篇(17):模块与包

一、as 关键字的使用 1、as 关键字的作用&#xff1a;给导入的模块取别名 import 测试1 as Test_1 import 测试2 as Test_2Test_1.say_hello() Test_2.say_hello() 二、if __name__ __main__ 1、作用 测试当前模块所编写的代码块&#xff0c;根据业务自主选择需要运行的代…