【容器固化】 OS技术之OpenStack容器固化的实现原理及操作
1. Docker简介
要学习容器固化,那么必须要先了解下Docker容器技术。Docker是基于GO语言实现的云开源项目,通过对应用软件的封装、分发、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”。这里的应用软件,既可以是一个Web应用,也可以是一套数据库服务,甚至是一个操作系统或编译器。Docker基于Linux的多项开源技术提供了高效、敏捷和轻量级的容器方案,并且支持在多种主流平台(PaaS)和本地系统上部署。
Docker容器技术有效地将由单个操作系统管理的资源划分到孤立的组中,以便更好地在孤立的组之间平衡有冲突的资源使用需求。每个容器内运行一个应用,不同的容器相互隔离,容器之间也可以建立通信机制。容器的创建和停止都十分快速,容器自身对资源的需求也十分有限,远远低于虚拟机。
1.1 Docker的核心价值
它改变了传统的软件“交付方式”和“运行方式”。传统交付源码或者软件包的方式的最大问题在于,软件运行期间的“依赖环境”无法控制,不能标准化,IT开发和运维人员需要花费大量精力去解决“依赖环境”问题。而Docker将软件及其“依赖环境”打包到一起,以镜像的方式交付,让软件运行在“标准环境”中,非常符合云计算的需求。另外,Docker秒级创建及删除应用和动态调整资源的能力,也非常符合云计算“实例水平扩展,资源动态调整”的需求。
1.2 Docker的应用场景及组件
Web应用的自动化打包和发布;自动化测试和持续集成、发布;在服务型环境中部署和调整数据库或其他的后台应用。Docker组件包括Docker容器、仓库和镜像,容器是Docker的核心组件,负责Docker实例的运行,仓库分公共仓库(Docker hub)和私有仓库,用于Docker镜像的存放和分发,Docker镜像是容器运行时的只读模板。Docker采用Linux技术,所以只能运行在Linux上。
1.3 Docker相关命令
查看H3Cloud OS大云平台使用容器进程的运行状态:
输入命令docker ps ,如下图所示,输出显示的第一列为容器的UUID信息,第二列为容器的镜像名称,第四列为容器进程创建时间,第五列为容器运行状态显示已运行的时长。
进入容器:
输入命令docker exec –it <容器UUID> /bin/bash,其中容器的UUID可以只输入前三位。
查看H3Cloud OS主机名:
输入命令hostname,此时输出的即是主机名。
进入H3Cloud OS控制节点或计算节点容器后,查看openstack相关进程服务的状态,需要先执行加载环境变量,用于openstack内部组件间授权,执行命令:source /root/admin-openrc.sh。
在计算节点容器内查看nova进程状态:
执行命令nova service-list
手动停止和启动nova服务操作
执行命令systemctl start openstack-nova-conductor.service
2. 为什么需要进行固化操作
在容器中,镜像是只读的,不可写,当需要修改时会在镜像上增加一个可写层,写修改发生在可写层里,修改后形成整个新的容器,原镜像还是没有变,即在原镜像之外“包装”不同的可写层的新内容做固化。容器固化是一套方法,用于当容器中文件或内容需要修改发生变化时,将修改的内容固定下来,避免容器重建时修改的内容又还原了。
3. 固化的原理
其核心原理是通过dockfile新建镜像,从而将更改的内容放到新镜像里,然后再通过新镜像启动容器。Docker采用写时复制方式创建根文件系统,可以简单理解为如果有相同内容的文件或者镜像,使用这些资源的不同实例在没有对它们做任何修改的时候是不需要复制的,也就是说不需要创建新的资源来使用,当第一次修改发生时,这个时候再复制出新的资源,修改的内容放置于新的资源中。这样一来部署就会变得极其快捷,并且节省内存和硬盘空间。固化并没有对原始镜像做修改,镜像是不能修改的,只是在镜像的只读层(容器)修改。由于在重启虚机或销毁docker的情况下,会在原始镜像的基础上重新生成一个新的容器,从而我们修改的效果没有生效,因此进行固化操作来达到保存修改的效果。
4. 固化的步骤
容器固化流程图见下:
4.1 备份当前镜像
输入命令docker ps | grep cloudos-openstack来查看关键字为cloudos-openstack的容器,找到相应容器的id,输入命令docker images|grep openstack查看需要操作的镜像。
备份镜像:tag命令来为镜像打上标签,实际上就是备份的过程。
4.2 删除原镜像
使用docker rmi命令来删除原镜像。
此时查看镜像列表,已经没有原镜像了。
4.3 重新制作镜像
重新制作镜像前先登入openstack docker容器中,将pre-install.sh拷贝到/opt/openstack-transfer/中,接下来要修改pre-install.sh文件。
修改pre-install.sh是为了新建dockerfile并新建容器,因此需要从之前容器中退出在设备层操作。拷贝/opt/openstack-transfer/pre-install.sh到/root/eventually目录下,如果该目录不存在需要在/root路径下执行命令mkdir eventually来创建目录。注意不能在不存在相应路径的情况下直接执行命令cp 命令,否则会把pre-install.sh复制到/root路径下并且重命名为eventually。
说明:涉及镜像等与CloudOS有关的配置都需要修改pre-install.sh文件,其他如新建.txt文件这样的配置则无需修改该文件。
拷贝完成后就可以编辑vim /root/eventually路径下的pre-install.sh文件了。按照要求将firewall_type修改为GATEWAY,将lb_type参数修改为SERVICE_CHAIN,将resource_mode修改为NFV。
开始重新制作镜像:已经在/root/eventually/路径下做了以上修改,接着继续在这个路径下通过命令vi dockerfileopenstackbuild.txt创建一个文件。
创建dockerfile文件是为了以docker build来创建镜像,这是创建镜像的方法之一,目前用得最多,CloudOS也用这个。其他的方法还有通过容器创建来使用docker commit命令构建镜像,简单来讲就是先创建好一个容器,然后把它转为镜像。
进入文件进行编辑:首行FROM cloudos-openstack:E1137H10_twins表示以cloudos-openstack:E1137H10_twins镜像为基础启动容器,注意首行必须以FROM开始且行首行末都不能有空格,支持以#开头的注释行。第二行命令USER root表示用户身份为root。第三行命令是对基础镜像的调整变更,这里的意思是将pre-install.sh拷贝替换为/root/scripts/pre-install.sh。编辑结果如下图所示:
创建好后执行docker build –t cloudos-openstack:E1137H10 –f dockerfileopenstackbuild.txt .命令构建镜像,这条命令最后的.表示在当前路径下操作。之后会逐行执行文件里的命令,首先从之前备份过的镜像cloudos-openstack:E1137H10_twins启动,用户名为root,执行的操作为将本路径下的已经修改过配置的pre-install.sh文件拷贝到/root/scripts下。
如果dockerfileopenstackbuild文件内命令输入有误则会报错,举例如下图所示,文件第三行拷贝路径输入有误,那么在执行命令时的第三步会显示失败。
查看结果,显示已创建好新的镜像文件。
4.4 使用新镜像启动容器
先输入命令/opt/bin/kubectl –server=192.168.113.250:8888 get rc查看openstackrc,然后delete将它停止,查看pod状态已经没有openstackrc容器了。
重新创建openstack docker容器前请检查openstack-rc.yaml文件中的image字段是否与上一步build出来的tag一致。如下图所示,查看openstack-rc.yaml文件中的image字段与上一步build出来的tag一致,镜像信息为cloudos-openstack:E1137H10。注意:如果不一致则需要修改,且修改前要先备份。
执行命令/opt/bin/kubectl --server=127.0.0.1:8888 create -f /opt/bin/confFile/openstack-rc.yaml拉起openstack docker,查看运行状态是否都是正常的Running状态。
4.5 进入容器查看修改的内容是否固化
查看文件显示已将firewall_type参数修改为GATEWAY,将lb_type参数修改为SERVICE_CHAIN,将resource_mode参数修改为NFV,固化成功。
相关文章:
【容器固化】 OS技术之OpenStack容器固化的实现原理及操作
1. Docker简介 要学习容器固化,那么必须要先了解下Docker容器技术。Docker是基于GO语言实现的云开源项目,通过对应用软件的封装、分发、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”。这里的应用软件&am…...
设置 SSH 通过密钥登录
我们一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器。但是,一般的密码方式登录,容易有密码被暴力破解的问题。所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口,或者禁用 root 账户登录。其实,有一个更…...
1.6 面试经典150题 - 买卖股票的最佳时机
买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易…...
locust快速入门--使用分布式提高测试压力
背景: 使用默认的locust启动命令进行压测时,尽管已经将用户数设置大比较大(400),但是压测的时候RPS一直在100左右。需要增加压测的压力。 问题原因: 如果你是通过命令行启动的或者参考之前文章的启动方式…...
K8s(三)Pod资源——pod亲和性与反亲和性,pod重启策略
目录 pod亲和性与反亲和性 pod亲和性 pod反亲和性 pod状态与重启策略 pod状态 pod重启策略 本文主要介绍了pod资源与pod相关的亲和性,以及pod的重启策略 pod亲和性与反亲和性 pod亲和性(podAffinity)有两种 1.podaffinity,…...
免费的域名要不要?
前言 eu.org的免费域名相比于其他免费域名注册服务,eu.org的域名后缀更加独特。同时,eu.org的域名注册也比较简单,只需要填写一些基本信息,就可以获得自己的免费域名。 博客地址 免费的域名要不要?-雪饼前言 eu.org…...
高通sm7250与765G芯片是什么关系?(一百八十一)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...
[Python进阶] Python操作MySQL数据库:pymysql
7.7 操作MySQL数据库:pymysql 7.7.1 准备工作(创建mysql数据库) PHPStudy介绍: phpstudy是一款非常有用的PHP开发工具,旨在帮助开发者更加便捷地进行PHP程序的开发与调试。它提供了一个友好的图形用户界面,使得用户能够方便地进…...
Vue3实现带点击外部关闭对应弹出框(可共用一个变量)
首先,假设您在单文件组件(SFC)中使用了Vue3,并且有两个div元素分别通过v-if和v-else来切换显示一个带有.elpopver类的弹出组件。在这种情况下,每个弹出组件应当拥有独立的状态管理(例如:各自的isOpen变量)。…...
可视化试题(一)
1. 从可视化系统设计的角度出发,通常需要根据系统将要完成的任务的类型选择交互技术。按照任务类型分类可以将数据可视化中的交互技术分为选择、( 重新配置 )、重新编码、导航、关联、( 过滤 )、概览和细节等八…...
RHCE 【在openEuler系统中搭建基本论坛(网站)】
目录 网站需求: 准备工作: 1.基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!! 测试: 2.给该公司创建三个子界面分别显示学生信息,教学资料和缴费网站,基于[www.openla…...
20240112让移远mini-PCIE接口的4G模块EC20在Firefly的AIO-3399J开发板的Android11下跑通【DTS部分】
20240112让移远mini-PCIE接口的4G模块EC20在Firefly的AIO-3399J开发板的Android11下跑通【DTS部分】 2024/1/12 16:20 https://blog.csdn.net/u010164190/article/details/79096345 [Android6.0][RK3399] PCIe 接口 4G模块 EC20 调试记录 https://blog.csdn.net/hnjztyx/artic…...
日志采集传输框架之 Flume,将监听端口数据发送至Kafka
1、简介 Flume 是 Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传 输的系统。Flume 基于流式架构,主要有以下几个部分组成。 主要组件介绍: 1)、Flume Agent 是一个 JVM 进程…...
关于Vue前端接口对接的思考
关于Vue前端接口对接的思考 目录概述需求: 设计思路实现思路分析1.vue 组件分类和获取数值的方式2.http 通信方式 分类 如何对接3.vue 组件分类和赋值方式, 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your p…...
【设计模式之美】SOLID 原则之三:里式替换(LSP)跟多态有何区别?如何理解LSP中子类遵守父类的约定
文章目录 一. 如何理解“里式替换原则”?二. 哪些代码明显违背了 LSP?三. 回顾 一. 如何理解“里式替换原则”? 子类对象能够替换程序中父类对象出现的任何地方,并且保证原来程序的逻辑行为不变及正确性不被破坏。 里氏替换原则…...
代码随想录第六十三天——被围绕的区域,太平洋大西洋水流问题,最大人工岛
leetcode 130. 被围绕的区域 题目链接:被围绕的区域 步骤一:深搜或者广搜将地图周边的’O’全部改成’A’ 步骤二:遍历地图,将’O’全部改成’X’,将’A’改回’O’ class Solution { private:int dir[4][2] {-1, 0…...
Docker 项目如何使用 Dockerfile 构建镜像?
1、Docker 和 Dockerfile 的重要性 1.1、Docker 简介:讲述 Docker 的起源、它是如何革新现代软件开发的,以及它为开发者和运维团队带来的好处。重点强调 Docker 的轻量级特性和它在提高应用部署、扩展和隔离方面的优势。 本文已收录于,我的…...
实践学习PaddleScience飞桨科学工具包
实践学习PaddleScience飞桨科学工具包 动手实践,在实践中学习!本项目可以在AIStudio平台一键运行!地址:https://aistudio.baidu.com/projectdetail/4278591 本项目第一次执行会报错,再执行一次即可。若碰到莫名其妙的…...
Vue 中修改 Element 组件的 下拉菜单(Dropdown) 的样式
Vue 中修改 Element 组件的 下拉菜单(Dropdown) 的样式 今天在项目中碰到一个 UI 改造的需求,需要根据设计图把页面升级成 UI 设计师提供的设计图样式。 到最后页面改造完了,但是 UI 提供的下拉菜单样式全部是黑色半透明的,只能硬着头皮改了。…...
达梦数据库主备集群
1:服务器硬件需求 按实际业务需求,选择合适的服务器,准备 3 台服务器,一台主库服务器,一台备库服务器,一台监视器服务器,服务器参数建议如下: 硬件要求物理内存>16 GB交换区Swa…...
Spark Doris Connector 可以支持通过 Spark 读取 Doris 数据类型不兼容报错解决
1、版本介绍: doris版本: 1.2.8Spark Connector for Apache Doris 版本: spark-doris-connector-3.3_2.12-1.3.0.jar:1.3.0-SNAPSHOTspark版本:spark-3.3.1 2、Spark Doris Connector Spark Doris Connector - Apache Doris 目…...
深入理解 go chan
go 里面,在实际程序运行的过程中,往往会有很多协程在执行,通过启动多个协程的方式,我们可以更高效地利用系统资源。 而不同协程之间往往需要进行通信,不同于以往多线程程序的那种通信方式,在 go 里面是通过…...
java+vue基于Spring Boot的渔船出海及海货统计系统
该渔船出海及海货统计系统采用B/S架构、前后端分离进行设计,并采用java语言以及springboot框架进行开发。该系统主要设计并完成了管理过程中的用户注册登录、个人信息修改、用户信息、渔船信息、渔船航班、海货价格、渔船海货、非法举报、渔船黑名单等功能。该系统操…...
Linux第25步_在虚拟机中备份“ST官方的TF-A源码”
TF-A是ARM公司提供的,ST公司通过修改它,做了一个自己的TF-A代码。因为在后期开发中,若硬件被改变了,我们需要通过修改"ST官方的TF-A源码"就可以自己的TF-A代码了。为了防止源文件被误改了,我们需要将"S…...
统计学-R语言-4.1
文章目录 前言编写R函数图形的控制和布局par函数layout函数 练习 前言 安装完R软件之后就可以对其进行代码的编写了。 编写R函数 如果对数据分析有些特殊需要,已有的R包或函数不能满足,可以在R中编写自己的函数。函数的定义格式如下所示: …...
C++(1) —— 基础语法入门
目录 一、C初识 1.1 第一个C程序 1.2 注释 1.3 变量 1.4 常量 1.5 关键字 1.6 标识符命名规则 二、数据类型 2.1 整型 2.2 sizeof 关键字 2.3 实型(浮点型) 2.4 字符型 2.5 转义字符 2.6 字符串型 2.7 布尔类型 bool 2.8 数据的输入 三…...
构建基于RHEL8系列(CentOS8,AlmaLinux8,RockyLinux8等)的支持63个常见模块的PHP8.1.20的RPM包
本文适用:rhel8系列,或同类系统(CentOS8,AlmaLinux8,RockyLinux8等) 文档形成时期:2023年 因系统版本不同,构建部署应略有差异,但本文未做细分,对稍有经验者应不存在明显障碍。 因软件世界之复杂和个人能力…...
Vue-插槽(Slots)
1. 介绍 在Vue.js中,插槽是一种强大的功能,它允许你创建可重用的模板,并在使用该模板的多个地方插入自定义内容。 插槽为你提供了一种方式,可以在父组件中定义一些“插槽”,然后在子组件中使用这些插槽,插…...
新火种AI|GPT-5前瞻!GPT-5将具备哪些新能力?
作者:小岩 编辑:彩云 Sam Altman在整个AI领域,乃至整个科技领域都被看作是极具影响力的存在,而2023年OpenAI无限反转的宫斗事件更是让Sam Altman刷足了存在感,他甚至被《时代》杂志评为“2023年度CEO”。 也正因此&…...
安防视频监控系统EasyCVR设备分组中在线/离线数量统计的开发与实现
安防视频监控EasyCVR系统具备较强的兼容性,它可以支持国标GB28181、RTSP/Onvif、RTMP,以及厂家的私有协议与SDK,如:海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。EasyCVR平台可覆盖多类型的设备接入&am…...
做企业网站怎么备案/网站排名工具
http://wiki.jikexueyuan.com/project/spring/beans-auto-wiring/spring-autowiring-byname.html 转载于:https://www.cnblogs.com/zquan/p/10753573.html...
珍岛网站模板/坚持
linux平台默认是不支持RAR文件的解压,需要安装linux版本的RAR压缩软件。centos>>> cd /usr/local>>> wget http://rarsoft.com/rar/rarlinux-4.0.1.tar.gzResolving rarsoft.com... 5.135.104.98Connecting to rarsoft.com|5.135.104.98|:80... c…...
罗湖中心区做网站/网站建设报价单模板
下面是自己封装的,存在一定问题,node接触不久,promise的用法尚未理解,我想实现的是执行多条sql后,如果sql均正常执行,则返回一个定义的对象,如果某一sql出问题,直接rollback…...
学做网站从零开始/谷歌搜索入口
1.子组件给父组件传值a.先在子组件中定义事件,当触发这个事件后才开始传值b.当触发子组件中的事件后,使用$emit把传递事件名称和值给父组件,事件名称是自定义的c.父组件在页面子组件的模板上定义事件,名称是子组件传过来的名字d.获…...
网站怎么做会被收录/百度广告推广怎么收费
建议在看Android内存管理之前,可以先看一下Java系列中的Java内存管理这篇文章。 1.分配机制 弹性的分配,即一开始不会给每个进程分配太多的内存,但随着app的不断运行,app的内存容量需求越来越大,Android内存会给此app分…...
wordpress query_posts 浏览量/营销网站设计
记者 | 王晟 来源 | 荔枝新闻上周,特斯拉首席执行官埃隆•马斯克(Elon Musk),向在上海开幕的世界人工智能大会(WAIC)发来视频演讲。通过这段视频,荔枝科技分析了一下马斯克的办公室,看看这位世人瞩目的科技大亨,都有哪…...