14.docker部署应用的两种企业实践

news2024/11/15 0:48:07

1.介绍

1.1 说明

这里仅仅说明一下在企业应用的两种简单实践,并不包含自动化这套东西。这里说的两种实践,是我在工作中不同公司使用的两种部署方式,仅供大家参考。

1.2 两种部署方式

第一种:是把环境和app都一起打成一个镜像,每次部署都重新打一个镜像,然后启动容器;
第二种:仅仅把环境打成一个镜像,每次部署的时候,通过容器数据卷的方式,将app复制到容器中;

1.3 两种部署方式的物料说明

app: springboot的jar文件,里面加入了日志
java环境:jdk1.8
目录安排:
日志目录:/logs/
应用目录:/code/

2.构建java环境基础镜像

2.1 准备jdk的文件

我在这里准备了jdk-8u261-linux-x64.tar.gz 这个jdk文件:
在这里插入图片描述

2.2 编写的Dockerfile:

内容如下:

FROM centos:7.6.1810
LABEL \
     author="lxc<xincasso.lvxss@126.com>" \
     createTime="2023-09-24 10:20"
RUN yum -y install vim
RUN yum -y install net-tools
RUN yum -y install initscripts
# 安装lib库
RUN yum -y install glibc.i686

ADD jdk-8u261-linux-x64.tar.gz /usr/local/
ENV JAVA_HOME=/usr/local/jdk1.8.0_261
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=$JAVA_HOME/lib/dt.jar:$JRE_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH=$PATH:$JAVA_HOME/bin

RUN mkdir -p /code
RUN mkdir -p /logs
WORKDIR /code

2.3 构建java8的基础镜像

docker build -t donkey/java8:1.0.0 .

在这里插入图片描述

3.上线部署

3.1 环境和app都一起打成一个镜像,上线部署

3.1.1 物料准备

镜像打包物料放在了/data/docker/docker-demo 这个目录下
在这里插入图片描述

其中有docker-demo-0.0.1-SNAPSHOT.jar、Dockerfile其中docker-demo-0.0.1-SNAPSHOT.jar代表我们生成的app应用代码,Dockerfile镜像构建文件。
Dockerfile文件内容如下:

FROM donkey/java8:1.0.0
COPY docker-demo-0.0.1-SNAPSHOT.jar /code/app.jar
ENTRYPOINT ["sh", "entry.sh"]

这个文件比较简单,就是基于java的基础镜像,把我们的app拷贝进去,然后执行命令。

3.1.2 构建镜像

执行构建命令:

docker build -t donkey/docker-demo:1.0.0 .

在这里插入图片描述

3.1.3 启动容器

我在/www/demo_1 这个目录下,当了一个entry.sh脚本
在这里插入图片描述
脚本内容很简单,就是启动app.jar

#!/bin/sh
java -jar app.jar

然后启动容器

docker run -d -p 8070:8080 -v /www/demo_1/entry.sh:/code/entry.sh  -v /logs:/logs  --name demo_1 38af11626649

包括端口映射、容器数据卷挂载。
在这里插入图片描述

3.1.4 验证

curl http://127.0.0.1:8070

在这里插入图片描述
查看日志:
在这里插入图片描述
在这里插入图片描述

3.2 将app以数据卷挂载的形式运行容器

3.2.1 重新构建java基础镜像

在/data/docker/java8_1我放了一个Dockerfile文件
在这里插入图片描述
内容如下:

FROM donkey/java8:1.0.0
ENTRYPOINT ["sh", "entry.sh"]

其实就是在基础镜像上加了一个命令执行。
构建

docker build -t donkey/java8_1:1.0.0 .

在这里插入图片描述
在这里插入图片描述

3.2.2 放置应用app服务器指定目录

这里我放到了/www/demo_2下
在这里插入图片描述

3.2.3 运行容器

docker run -d -p 8071:8080 -v /www/demo_2:/code  -v /logs:/logs  --name demo_2 fa14c12a02c1

在这里插入图片描述

3.2.4 验证

curl http://127.0.0.1:8071

在这里插入图片描述

4.小结

4.1 小小说明

我这里介绍的都是手工操作的处理,文章描述的可能不是很完全,实际上我们用jenkins或者云效等流水线来部署,还是比较方便的。我想说的是,这两种部署方式,在企业中我都是用过,只不过说把应用不打进镜像中的方式有点脱离docker的思想。

4.2我的观点

我在实际工作使用中,这种将代码和环境分离的方式还挺好用的。这里我说一下原因:
1.如果部署比较频道,特别是我们开发测试环境,如果将app+环境打成一个镜像,那么每次部署都要重新打包,然后上传远程仓库,然后再启动,那么这就会导致部署时间较长,因为打包时间和上传时间都比较长;
2.由于基础环境镜像本身就比较大,然后再加上app,这样打出来的镜像就更大,每个镜像都会占用磁盘空间,你会发现,随着工作的继续,我们的磁盘空间消耗很大,因为镜像文件很多很大;
3.对于一些java这种app,如果我只是改个页面,那么我也必须要重新打包镜像,上传远程仓库、启动容器,而实际上我并不需要重启容器,只需要把html文件替换就好了;
4.有人说这样把app和基础环境分开,你回滚就比较困难,但我想说的是,我的代码是用git来管理的,直接回滚到之前的代码版本就好了,不需要回滚镜像(当然不如回滚镜像快)。
在自动化部署中:
第一种app+环境,我们只需要在代码文件中创建Dockerfile和entry.sh两个文件,每次从基础镜像来构建出app+基础环境的镜像,然后执行启动脚本就行了;
第二种app和环境分开,我们只需要在代码文件中创建entry.sh文件,甚至我们都不需要创建任何关于docker启动的文件,因为是一类的应用,我们直接在服务器上放置一个默认的entry.sh脚本文件就行,每次都一个基础镜像直接运行容器就行了,这样镜像的管理也简单的很。
当然使用哪种方式,可以根据自己的需求来进行。这里仅仅是我的一点个人观点。

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

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

相关文章

Javaweb之前端工程化的详细解析

3 前端工程化 3.1 前端工程化介绍 我们目前的前端开发中&#xff0c;当我们需要使用一些资源时&#xff0c;例如&#xff1a;vue.js&#xff0c;和axios.js文件&#xff0c;都是直接再工程中导入的&#xff0c;如下图所示&#xff1a; 但是上述开发模式存在如下问题&#xff…

力扣每日一道系列 --- LeetCode 206. 反转链表

&#x1f4f7; 江池俊&#xff1a; 个人主页 &#x1f525;个人专栏&#xff1a; ✅数据结构探索 ✅LeetCode每日一道 &#x1f305; 有航道的人&#xff0c;再渺小也不会迷途。 LeetCode 206. 反转链表 思路一&#xff1a;头插 初始化两个指针&#xff0c;cur 和 newhead。…

数据结构与算法介绍

什么是数据结构 定义&#xff1a; 数据结构就是研究数据的存储方式&#xff1b;数据存储的目的是方便后期对数据的再利用&#xff1b;选择合适的方式来存储数据&#xff0c;是数据结构的核心内容。 数据存储结构的选择&#xff1a;取决于两方面&#xff0c;即数据的逻辑结构和…

metersphere 设置定时任务和查看报告

设置定时任务 设置时间 查看执行后的测试报告 查看报告详情

【报错栏】(Vue) Invalid handler for event “click“: got undefined

Property or method "add" is not defined on the instance but referenced during render. 翻译&#xff1a; 属性或方法“add”未在实例上定义&#xff0c;但在渲染期间引用。 Invalid handler for event "click": got undefined 翻译&#xff1a; …

使用VUE3实现简单颜色盘,吸管组件,useEyeDropper和<input type=“color“ />的使用

1.使用vueuse中的useEyeDropper来实现滴管的功能和使用input中的type"color"属性来实现颜色盘 效果&#xff1a; 图标触发吸管 input触发颜色盘 组件代码部分 &#xff1a;<dropper> ---- vueuse使用 <template><div class"sRGBHexWrap fbc…

DGL在异构图上的GraphConv模块

回顾同构图GraphConv模块 首先回顾一下同构图中实现GraphConv的主要思路&#xff08;以GraphSAGE为例&#xff09;&#xff1a; 在初始化模块首先是获取源节点和目标节点的输入维度&#xff0c;同时获取输出的特征维度。根据SAGE论文提出的三种聚合操作&#xff0c;需要获取所…

2023亚太杯数学建模B题完整原创论文讲解

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了2023亚太地区数学建模竞赛B题玻璃温室的微气候调控完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 论文共6…

ZC-OFDM模糊函数原理及仿真

文章目录 前言一、ZC 序列二、ZC-OFDM 信号1、OFDM 信号表达式2、模糊函数表达式三、MATLAB 仿真1、MATLAB 核心源码2、仿真结果①、ZC-OFDM 模糊函数②、ZC-OFDM 距离分辨率③、ZC-OFDM 速度分辨率前言 本文进行 ZC-OFDM 的原理讲解及仿真,首先看一下 ZC-OFDM 的模糊函数仿真…

roseha for windows 11+oracle 11g部署过程

文章目录 一、环境准备关闭防火墙配置hosts共享存储准备 二、部署步骤1.主机A、B安装数据库软件2.主机A进行数据库实例创建3.主机B创建数据库4.安装配置roseha软件 一、环境准备 windows server 2019 oracle 11.2.0.3 EE roseha for windows 11 5个IP地址&#xff1a;2心跳、3…

元宇宙vr线上展馆在线制作降低开发门槛和成本

让人人都拥有自己的元宇宙空间&#xff0c;说起来就是一个令人亢奋的消息&#xff0c;也是大家所期待的&#xff0c;VR元宇宙空间在线编辑平台是VRARAI元宇宙公司深圳华锐视点自主研发的平台&#xff0c;允许用户在虚拟环境中创建、设计和共享空间&#xff0c;操作简单&#xf…

Ubuntu20.04上编译安装TVM

本文主要讲述如何在ubuntu20.04平台上编译TVM代码并在python中import tvm成功。 源代码下载&#xff1a; git clone --recursive https://github.com/apache/tvm tvm 平台环境升级&#xff1a; 1&#xff09; sudo apt-get update 2&#xff09; sudo apt-get install -y pyth…

RK3588平台 USB框架与USB识别流程

一.USB的基本概念 在最初的标准里&#xff0c;USB接头有4条线&#xff1a;电源&#xff0c;D-,D,地线。我们暂且把这样的叫做标准的USB接头吧。后来OTG出现了&#xff0c;又增加了miniUSB接头。而miniUSB接头则有5条线&#xff0c;多了一条ID线,用来标识身份用的。 热插拔&am…

【信息隐藏】信息隐藏基础

00 学习资源 0.1 推荐书籍 1.多媒体安全基础导论 复旦大学出版社 蓝皮&#xff1b; 2.隐写学原理与技术&#xff08;赵险峰&#xff09;科学出版社 蓝皮 0.2 视频课程 南开大学-信息隐藏技术&#xff08;没看&#xff09; 0.3 代码资源 GitHub一位phd&#xff1a;https:/…

Spring Cloud 版本升级遇坑记:OpenFeignClient与Gateway的恩怨情仇

Spring Cloud 版本升级遇坑记&#xff1a;OpenFeignClient与Gateway的恩怨情仇 近日&#xff0c;在对项目中的 Spring Boot、Spring Cloud 以及 Spring Cloud Alibaba 进行版本升级时&#xff0c;遭遇了一个令人头疼的问题&#xff1a;Spring Cloud Gateway 在运行时一直卡住&a…

ES之x-pack-core-7.14.2许可证修改为白金版

X-Pack是什么 X-pack是elasticsearch的一个扩展包&#xff0c;将安全&#xff0c;警告&#xff0c;监视&#xff0c;图形和报告功能捆绑在一个易于安装的软件包中&#xff0c;虽然x-pack被设计为一个无缝的工作&#xff0c;但是你可以轻松的启用或者关闭一些功能。 主要分一下步…

W11安装mysql8详细保姆篇

一、MySQL的下载 目前官方最新版本是8.0.34&#xff0c;考虑到其稳定性、可靠性还需一定周期保证&#xff0c;所以使用官方版求稳定仍然建议5.7系列。MySQL官方下载链接&#xff1a;MySQL官网下载 二、MySQL的安装 1、右击下载完成的安装包 2、点击Custom >> Next 3、…

基于springboot实现冬奥会科普平台系统【项目源码+论文说明】

基于SpringBoot实现冬奥会科普平台系统演示 摘要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理平台应运而生&…

销售为什么会选择使用电销这种方式 ?

在网络经济时代的大环境下&#xff0c;网络营销作为一种新型营销模式和营销理念&#xff0c;已经抢占了大部分市场。 网络营销&#xff0c;是指利用互联网技术和现代信息技术&#xff0c;以及社交媒体平台&#xff0c;进行产品宣传、销售、服务、品牌传播等活动的一种营销模式。…

如何在GO中写出准确的基准测试

一般来说&#xff0c;我们不应该对性能进行猜测。在编写优化时&#xff0c;会有许多因素可能起作用&#xff0c;即使我们对结果有很强的看法&#xff0c;测试它们很少是一个坏主意。然而&#xff0c;编写基准测试并不简单。很容易编写不准确的基准测试&#xff0c;并且基于这些…