MO DOCKER - Docker synopsis - Huge

news2024/11/15 13:48:03

Docker synopsis

  • website address
  • Docker series
    • 2.1 今日课程介绍
    • 2.2 初始docker - 什么是docker

website address

url address

Docker series

2.1 今日课程介绍

2.2 初始docker - 什么是docker

项目部署的问题
大型项目组件较多, 运行环境也较为复杂,部署时会碰到一些问题.
特别是微服务, 各种各样的微服务,而且这些微服务还会依赖于各种各样的应用; 比如说,前端部分肯定依赖node.js吧, 而我们服务端还需要数据库mysql,缓存系统redis,还有我们后面会学习到的异步通信(mq,rabbitmq?)等等这些,更多,这些只是其中一些,

所有这些应用将来都需要部署到我们的服务器上,而大多数的服务器都会采用Linux系统;
应用在安装在操作系统上面之前,要做一些准备工作,因为这些应用依赖都会有自己所需要的依赖和函数库;
每一个不同的应用,它们所需要的依赖和函数库可能有差异,也可能一样,但是版本不同(不同应用);
这个时候,如此复杂的一个依赖关系,很容易产生兼容性的问题,而且当兼容性问题解决,发现只是开始, 因为开发,测试和生产环境有差异,预发布,可怕的是这些操作环境的linux操作系统还可能不同,

比如,装了个centos系统,另外环境装的是Fedora系统,还有装的是Ubuntu系统,那怎么办?
一个操作系统里面配好的东西放到另外操作系统,还能正常运行吗?no
以前开发部署时的效率非常的低,这个问题docker是如何解决的呢?
在这里插入图片描述
既然每个应用都有自己所需的依赖和函数库,why not打包应用的Libs函数库,deps依赖,配置与应用一起打包,docker就干了这件事情,

Nodejs需要什么依赖,打包起来,形成一个整体,还将每个应用放到一个隔离容器去运行,避免互相干扰,每个应用需要什么我都这么去做(打包依赖和函数库到一个隔离容器去运行)
在这里插入图片描述
打一个包,一起扔过去,不用考虑依赖和函数库问题,有同学说,把他们扔到一台机器上,它们之间(隔离容器们)的依赖难道没有干扰吗? 不会,因为docker会把这些打包好的程序,用一个隔离的容器去运行,会用到一种沙箱的技术,它们相互之间不可见,这个问题不就解决了吗?这只是解决了混乱依赖的问题

有了docker,应用程序随时都可以运行.仅限于同样的一个操作系统,因为打包时,肯定基于某种操作系统去打包.
比如这个应用(node.js)是鲁班图ubuntu version,那它的依赖和函数库也肯定是ubuntu乌班图的;
你把这个打包好的程序(eg, node.js)扔到centos上去;程序运行不了;docker怎么来解决这个问题呢?
要想了解docker跨系统运行,我们得先知道OS的structure;
这儿以ubuntu为例,给大家讲一下OS structure;别着急; 没那么复杂,
所有的Linux内核的操作系统, 都可以分成两层;一层是大家共享的内核(Linux内核),
不管是ubuntu,centos,fedora,redhat,他们的内核都是linux; 区别是上层系统应用的不同; ubuntu和centos它们的应用是不一样的, (它们的))内核是相同的;
在这里插入图片描述
内核干什么事呢? 内核负责与计算机硬件进行交互,eg, 我去调用一下CPU, 调用一下内存, 读一下文件,开辟一个进程之类的; 这些都是内核要做的, 而内核会把这些事情变成一个一个的指令;
你调用这些指令就可以操作计算机硬件了,但可惜的是这些指令大多比较简陋; 如果你要基于这些指令去开发应用,那可就太麻烦,所以说我们就有了系统应用;
系统应用, 比如说ubuntu,它干了什么? 它会将内核的指令进行一个组装, 再封装, 形成函数, 区域多的函数形成了函数库.

那么程序员可以基于这些函数库进行开发,程序调用我们的函数/函数库, 函数库调用内核指令去调用我们的计算机硬件,从而实现我们这个应用的执行;
这就是我们linux系统的一个结构,以及应用的执行原理.
在这里插入图片描述

问题来了, 一个ubuntu系统上的应用,为什么不能在centos上运行,两个系统内核一样,系统应用不同,也就是说函数库不同;
在这里插入图片描述
可能ubuntu上的函数库centos上不一定有,或者名字不一样;
这个时候我们把一个ubuntu上的mysql应用迁移到centos上,尝试去执行, 你会发现,当他去调用一个函数库,因为代码写死了, 函数库(ubuntu)在centos上根本不存在; 那肯定会程序报错; 这就是为什么我们应用不能跨系统运行原因.

那针对这样一个问题, 我们docker干了什么事情?
既然每个应用都依赖于系统函数库, 我为什么不把它的系统函数库跟它一起打包呢? 这样一来,不愁找不到函数库了吗?
所以docker的解决方案就是将用户程序与系统调用的这个函数库一起打包.

也就是说(for instance/sample)我来打包一个这个需要自己的一些依赖的mysql, 同时mysql需要一些比如ubutu的系统函数库;
然后我们就把mysql自己的依赖和ubuntu的函数库打包成一个整体, 我们的mysql, nodojs等应用,你随便放在任何的只要是linux内核的linux操作系统上,
通过这种方式,docker就解决了应用执行跨系统的问题

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

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

相关文章

VR MR AR 的区别

VR(Virtual Reality)、MR(Mixed Reality)和AR(Augmented Reality)是三种不同的沉浸式技术,它们各自在交互方式、信息呈现和环境感知方面有着显著的区别。 以下是这三种技术的详细对比: VR (Virtual Reality) 虚拟现实 定义与特点: 完全沉浸:VR技术通过头戴式显示器…

keil创建单片机工程

一、创建工程 打开Keil uVision4,依次选择 Project—>New uVision4 Project,选择工程保存路径及填写工程名称,如下图 然后点“保存”。在Select a CPU Data Base File中选择"STC MCU Database",点 "OK"&am…

Linux/Usage

Usage Enumeration nmap 首先使用 nmap 默认配置扫描系统端口对外开放情况,发现对外开放了 22 和 80 端口,然后又扫描了这两个端口的详细信息,情况如下 ┌──(kali㉿kali)-[~/vegetable/HTB/Usage] └─$ nmap -sC -sV -p 22,80 -oA nmap…

Spring的过滤器、拦截器、切面区别及案例分析

Spring的过滤器、拦截器、切面 三者的区别,以及对应案例分析 一、三者的实现方式 1.1 过滤器 xxxFilter 过滤器的配置比较简单,直接实现Filter接口即可,也可以通过WebFilter注解实现对特定URL的拦截,Filter接口中定义了三个方法…

选择ERP系统需要考虑哪些因素 企业ERP系统选型指南

ERP系统是一个复杂的软件系统,中小企业要建成ERP系统首先是要选择一个适合自己的ERP软件。目前市场上的ERP软件品种繁多,功能各异,那么中小企业应如何结合自己的实际情况“量体裁衣”找到最适合自己的ERP软件呢?这是目前中小企业进行ERP选型…

Axure糖尿病健康管理APP原型 (知识科普/病友社区/远程医生会诊/购物商城/血糖监测/饮食监测)

作品概况 页面数量:共 50 页 源文件格式:rp格式,兼容 Axure RP 9/10,非程序软件无源代码 应用领域:医疗健康、慢病管理、糖尿病管理 作品特色 本作品为Axure糖尿病健康管理APP端原型图,设计规范内容清晰…

一款新型的Linux服务器管理工具

最近发现了一款新型的Linux服务器管理工具,名称叫1Panel,本文跟大伙分享一下。 一. 产品介绍 1Panel 是一个开源的 Linux 服务器运维管理面板,具有丰富的功能,可对服务器和容器进行管理。 产品提供简洁直观的We图形界面&#x…

HTML随机点名程序

案例要求 1.点击点名按钮&#xff0c;名字界面随机显示&#xff0c;按钮文字由点名变为停止 2.再次点击点名按钮&#xff0c;显示当前被点名学生姓名&#xff0c;按钮文字由停止变为点名 案例源码 <!DOCTYPE html> <html lang"en"> <head> <m…

数据结构实验(二)

单链表的基本操作 一、总的设计思路(c++实现) 1、首先定义一个包含name、gender、student_number、hobbies的学生信息结构体。 2、接着一一写出:链表初始化(initialize)函数、后插法插入(insert)函数、打印信息(output)函数、对链表结点进行排序(sortList)函数、…

【前后端】django前后端交互

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、django是什么二、django前后端交互指引三、总结 前言 随着开发语言及人工智能工具的普及&#xff0c;使得越来越多的人会主动学习使用一些开发语言&#x…

质量精美的UI设计素材库:3000+图标设计资源免费下载!

作为一名设计师&#xff0c;你的设计灵感来自哪里&#xff1f;想象一下吗&#xff1f;事实上&#xff0c;材料库仍然是大多数设计师必不可少的东西&#xff0c;如果你能更方便地找到他们可用的设计材料&#xff0c;那么在创作中&#xff0c;无疑可以用一半的努力得到两倍的结果…

Qt绘制边框有阴影兼容性问题

在Qt开发过程中&#xff0c;有时候我们要显示一个有阴影的对话框&#xff0c;这时一般采用自定义实现&#xff0c;然而最近在开发时软件时&#xff0c;Win11上显示正常&#xff0c;Win10或其他Win11电脑显示不正常&#xff0c;存在兼容性问题吗&#xff1f; 下面是具体的源码 …

【wsl】安装nvm配置

安装nvm 参考https://github.com/nvm-sh/nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bashexport NVM_DIR"$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

JS数组操作:去重,交集,并集,差集

文章目录 去重并集交集差集 去重 //定义常量 res,值为一个Map对象实例 //返回arr数组过滤后的结果&#xff0c;结果为一个数组 //过滤条件是&#xff0c;如果res中没有某个键&#xff0c;就设置这个键的值为 const res new Map(); const arr [1,1,2,2,3,4,4,5,6,6,6,6,4,3];…

MIGO行项目屏幕增强

MIGO行项目屏幕增强 一、增强描述 由于在事务码MIGO中存在的字段中没有能够满足客户需求的字段&#xff0c;所以需要在事务码MIGO的屏幕中添加一个新的页签用来保存物料凭证中行项目增加的字段。 通过查找BADI的程序ZDEMO_BADI,输入参数MIGO后&#xff0c;得到对应BADI为MB_M…

面试官竟然是个小黑子,问我用过状态机吗

状态机的组成 状态机是一种抽象的数学模型&#xff0c;描述了对象或系统在特定时间点可能处于的各种状态以及状态之间的转换规则。它由一组状态、事件、转移和动作组成&#xff0c;用于模拟对象在不同条件下的行为和状态变化。 状态机包括以下基本组成部分&#xff1a; 状态&…

React首次加载渲染2次的问题

在开发React项目的时候&#xff0c;发现useEffect会调用2次的情况&#xff0c;依赖数组明明没有变化&#xff0c;怎么会调用2次&#xff1f;百思不得其解&#xff0c;依赖没变化的话&#xff0c;那肯定是整个组件重渲染了。 最最简单的代码如下&#xff1a; const container …

微信抽奖活动怎么做_微信抽奖大狂欢

随着科技的飞速发展&#xff0c;微信已经成为我们生活中不可或缺的一部分。它不仅仅是一个简单的通讯工具&#xff0c;更是一个集社交、购物、娱乐等多种功能于一体的平台。今天&#xff0c;我们为大家带来了一场别开生面的微信抽奖活动&#xff0c;让你在享受乐趣的同时&#…

三相电子式电表ADL400储能防逆流含CE/MID认证

安科瑞薛瑶瑶18701709087/17343930412 ADL400 导轨式多功能电能表&#xff0c;是主要针对电力系统&#xff0c;工矿企业&#xff0c;公用设施的电能统计、 管理需求而设计的一款智能仪表&#xff0c;产品具有精度高、体积小、安装方便等优点。集成 常见 电 力参数测量及电能…

解决zabbix中文乱码问题

目录 1、遇到的问题 2、解决方法 第一步&#xff1a;在windows电脑上可以搜索simkai.ttf文件&#xff0c;上传到 /usr/share/zabbix/assets/fonts文件夹 第二步&#xff1a;删除软链接 第三步&#xff1a;创建软链接 第四步:重启服务 3、检查问题是否被解决 1、遇到的问…