Docker 基础认识

news2024/12/23 4:32:50

文章目录

  • 概念铺垫(1)
  • 概念铺垫(2)
  • 概念铺垫 (3)
  • 概念铺垫(4)
  • Docker 定义
  • Docker 特点
  • Docker 架构

概念铺垫(1)

虚拟化相关概念

物理机:实际的服务器或者计算机。相对于虚拟机而言的对实体计算机的称呼。物理机提供给虚拟机以硬件环境,有时也称为“寄主”或“宿主”。

虚拟化:是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

容器化容器化是一种虚拟化技术,又称操作系统层虚拟化(Operating system level virtualization),这种技术将操作系统内核虚拟化,可以允许用户空间软件实例(instances)被分割成几个独立的单元,在内核中运行,而不是只有一个单一实例运行。这个软件实例,也被称为是一个容器(containers)。对每个实例的拥有者与用户来说,他们使用的服务器程序,看起来就像是自己专用的。容器技术是虚拟化的一种。docker 是现今容器技术的事实标准。

(对【他们使用的服务器程序,看起来就像是自己专用的】这句话的理解: 每个实例运行的进程只看到自己所占的硬件资源,其他的硬件资源不可见,也不可用,每个实例都被相互隔离了。

概念铺垫(2)

虚拟化常见分类
在这里插入图片描述

①虚拟机:
存在于硬件层和操作系统层间的虚拟化技术。虚拟机通过“伪造”一个硬件抽象接口,将一个操作系统以及操作系统层以上的层嫁接到硬件上,实现和真实物理机几乎一样的功能。比如,在一台 Windows 系统的电脑上使用 Android 虚拟机,就能够用这台电脑打开 Android 系统上的应用。
②容器,存在于操作系统层和函数库层之间的虚拟化技术。容器通过“伪造”操作系统的接口,将函数库层以上的功能置于操作系统上。Docker就是通过容器实现的虚拟化。 Docker是一个基于Linux 操作系统的Namespace 和Cgroup 功能实现的隔离容器,可以模拟操作系统的功能。虚拟机是把整个操作系统封装隔离,容器则是把一个个应用单独封装隔离。所以容器体积比虚拟机小。容器共享一个内核(操作系统),(内核)它安装在硬件上。
③类JVM: 存在于函数库层和应用程序之间的虚拟化技术 。

概念铺垫 (3)

容器化的优势

(部分看不懂,直接跳过,使用以后就明白了)
① 资源利用率高 : 对硬件资源更充分的利用。(简单理解为:A进程和B进程都不会使服务器硬件资源满载,但A和B进程无法在同一种操作系统上运行,容器化解决了这样一个问题,使A和B能在同一服务器上运行,这样就不用开两台服务器分别给A和B,提高了资源利用率)
② 使环境标准化 : 一次构建,随处执行。实现执行环境的标准化发布,部署和运维。开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性。
③资源弹性伸缩: 根据业务情况,动态调整计算、存储、网络等硬件及软件资源。(例如高峰期启动更多的服务器)
④差异环境提供: 同时提供多套差异化的执行环境,限制环境使用资源。比如一个服务依赖 Ubuntu 操作系统,另一个服务依赖CentOS 操作系统,但是没有预算购买两个物理机,这个时候容器化就能很好的提供多种不同的环境。
在这里插入图片描述
⑤实现沙箱安全:为避免不安全或不稳定软件对系统安全性、稳定性造成影响,可使用虚拟化技术构建虚拟执行环境。例如,在容器里面执行 rm -rf /* 不会把整个服务器搞死,也不影响其他人部署的程序使用。
⑥比虚拟机轻量:传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。docker 不需要虚拟内核,所以启动可以更快,相当于 windows 的开机时间省去了。
⑦维护和扩展容易:使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的 官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。比如 docker hub 提供了很多镜像,各个系统的一个命令就可以拿到了,研发也可以自己定制镜像分享给各个产品

概念铺垫(4)

容器虚拟化实现

①namespace:namespace 是Linux 内核用来隔离内核资源的方式。通过namespace 可以让一些进程只能看到与自己相关的一部分资源,而另外一些进程也只能看到与它们自己相关的资源,这两拨进程根本就感觉不到对方的存在。具体的实现方式是把一个或多个进程的相关资源指定在同一个namespace 中。

namespace使用:Linux 提供了多个API 用来操作namespace,它们是clone()、setns() 和unshare() 函数,为了确定隔离的到底是哪项namespace,在使用这些API 时,通常需要指定一些调用参数:CLONE_NEWIPC、CLONE_NEWNET、CLONE_NEWNS、CLONE_NEWPID、CLONE_NEWUSER、CLONE_NEWUTS 和CLONE_NEWCGROUP。如果要同时隔离多个namespace,可以使用| (按位或)组合这些参数。

(仅作了解,总而言之这些接口可以帮助隔离网络、进程ID等操作系统资源)

/*
clone() 函数是用于创建新进程的系统调用之一,
它允许你指定要复制的命名空间类型。
例如,如果你想要创建一个新的网络命名空间,你可以这样使用 clone():*/
clone(CLONE_NEWNET | CLONE_NEWPID | CLONE_NEWUTS, NULL);
/*
setns() 函数允许一个进程加入到一个已存在的命名空间中
fd 是一个指向已存在命名空间的文件描述符。
通过调用 setns(),你可以将当前进程加入到该命名空间中,
从而让其与该命名空间中的其他进程进行通信和协作*/
setns(fd, CLONE_NEWNET);
/*
unshare() 函数允许一个进程脱离当前的命名空间,
创建一个新的独立命名空间。
*/
unshare(CLONE_NEWNET | CLONE_NEWPID);

②cgroups:cgroups(Control Groups) 是linux 内核提供的一种机制,这种机制可以根据需求把一系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内,从而为系统资源管理提供一个统一的框架。

cgroups的作用具体包括
1.Resource limitation: 限制资源使用,内存使用上限/cpu的使用限制
2.Prioritization: 优先级控制,例:CPU利用/磁盘IO吞吐
3.Accounting: 一些审计或一些统计
4.Control: 挂起进程/恢复执行进程

cgroups的使用(仅作了解,知道cgroups可以用于限制、分配和监控系统资源(如 CPU、内存、磁盘 I/O 等)的使用即可):

# 创建 cgroup
sudo mkdir /sys/fs/cgroup/cpu/mygrou
# 创建 cgroup  cgroup v2
sudo mkdir /sys/fs/cgroup/unified/mygroup
# 要将一个进程分配到特定的 cgroup 中,12345为PID
echo 12345 > /sys/fs/cgroup/cpu/mygroup/cgroup.procs
# 限制 cgroup 中的进程使用的 CPU 时间,这里50000代表50ms
echo 50000 > /sys/fs/cgroup/cpu/mygroup/cpu.cfs_quota_us
# 通过查看 cgroup 文件系统中的各种文件,实时监控 cgroup 中进程的资源使用情况
cat /sys/fs/cgroup/memory/mygroup/memory.usage_in_bytes

③LXC,或者 Linux 容器,是一种操作系统级虚拟化技术,允许多个独立的 Linux 系统容器(container)在单个 Linux 主机上共享相同的内核。这种技术提供了比传统的虚拟机更轻量级的虚拟化解决方案,能够更高效地利用硬件资源。 LXC 使用 cgroups 控制组和 namespaces 命名空间来实现容器之间的隔离,使得每个容器都能够拥有自己的文件系统、网络、进程等资源。

Docker 定义

①Docker本质其实是LXC之类的增强版,它本身不是容器,而是容器的易用工具。容器是linux内核中的技术,Docker只是把这种技术在使用上简易普及了。Docker在早期的版本其核心就是LXC的二次封装发行版。Docker作为容器技术的一个实现,或者说让容器技术普及开来的最成功的实现。

② Docker 是一个开源的平台,用于开发、交付和运行应用程序。它利用容器化技术,将应用程序及其依赖项打包到一个称为容器的独立单元中。这使得应用程序能够在任何环境中快速部署和运行,无需担心环境差异或依赖问题。 Docker 提供了一种轻量级、可移植和自包含的解决方案,使开发人员能够更加高效地构建、交付和管理应用程序。

Docker 特点

Docker的特点和容器化的特点基本一致,大致如下:

docker有比虚拟机更少的抽象层。docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的是实际物理机的硬件资源。因此在cpu、内存利用率上docker将会在效率上有明显的优势。docker利用的是宿主机的内核,而不需要Guest OS,节省了Guest OS占用的资源。

docker不需要Guest OS,创建一个容器时,不需要和虚拟机一样重新加载一个操作系统内核。从而避免引寻、加载操作系统内核返回时耗时耗资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,返回新建过程是分钟级别的。而新建一个docker容器只需要几秒钟。

在这里插入图片描述

Docker 架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。Docker 容器通过 Docker 镜像来创建。了解Docker 架构是使用Docker的前提。

例如国内企业的架构:
在这里插入图片描述
Docker 仓库(Registry)
Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub 供了庞大的镜像集合供使用。

Docker daemon
Docker daemon 是服务器组件,是 Docker 最核心的后台进程,我们也把它称为守护进程。

Docker 客户端(Client)
Docker 客户端通过命令行或者其他工具使用 Docker API 与 Docker 的守护进程通信。

Docker 主机(Host)
一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。

Docker 镜像(Images)
Docker 镜像是用于创建 Docker 容器的模板。

Docker 容器(Container)
容器是独立运行的一个或一组应用。

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

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

相关文章

【人工智能Ⅱ】实验7:目标检测算法2

实验7:目标检测算法2 一:实验目的与要求 1:了解一阶段目标检测模型-YOLOv3模型的原理和结构. 2:学习通过YOLOv3模型解决目标检测问题。 二:实验资源 pytorch代码各文件夹内容介绍 1. data_loader.py:能…

【Kali Linux工具篇】wpscan的基本介绍与使用

介绍 WPScan是Kali Linux默认自带的一款漏洞扫描工具,它采用Ruby编写,能够扫描WordPress网站中的多种安全漏洞,其中包括主题漏洞、插件漏洞和WordPress本身的漏洞。最新版本WPScan的数据库中包含超过18000种插件漏洞和2600种主题漏洞&#x…

LeetCode 力扣题目:买卖股票的最佳时机 III

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣! 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航: LeetCode解锁100…

template——模板进阶(C++)

在之前的文章中,介绍了模板初阶:Cpp_桀桀桀桀桀桀的博客-CSDN博客 在本篇中将会对模板进一步的讲解。本篇中的主要内容为:非类型模板参数、函数模板的特化、类模板的特化(其中包含全特化和偏特化),最后讲解…

什么是数据中心?关于数据中心的这些知识一定要知道

在数字化时代,数据已成为企业最宝贵的资产之一。数据中心,作为支撑海量数据存储、处理和分发的基础设施,其战略地位日益凸显。它们不仅是信息技术的心脏,更是推动现代商业决策、创新和运营的核心引擎。随着云计算、大数据、物联网…

React 第三十章 React 和 Vue 描述页面的区别

面试题:React 和 Vue 是如何描述 UI 界面的?有一些什么样的区别? 标准且浅显的回答: React 中使用的是 JSX,Vue 中使用的是模板来描述界面 前端领域经过长期的发展,目前有两种主流的描述 UI 的方案&#xf…

英语学习笔记12——名词所有格的运用

Whose is this … ? This is my/your/his/her … 这……是谁的?这是我的 / 你的 / 他的 / 她的…… Whose is that … ? That is my/your/his/her … 那……是谁的?那是我的 / 你的 / 他的 / 她的…… 词汇 Vocabulary father n. 爸爸 口语&#xf…

ICode国际青少年编程竞赛- Python-6级训练场-多次递归

ICode国际青少年编程竞赛- Python-6级训练场-多次递归 1、 def recur(n):# 边界条件if n<1:return# 额外动作Dev.turnLeft()Dev.step(n)Dev.turnRight()Dev.step(n)Dev.step(-n)Dev.turnRight()Dev.step(2*n)Dev.turnLeft()Dev.step(n)# 递归调用recur(n-1) recur(4)2、 d…

详解xlswriter 操作Excel的高级应用conditional_format

在文章详解xlsxwriter 操作Excel的常用API-CSDN博客 我们介绍了xlswriter 基础api的使用情况&#xff0c;在实际工作中我们经常会遇到下面的需求&#xff0c;cell满足某某条件时&#xff0c;进行对应的格式化处理。这时候我们可以使用conditional_format的函数&#xff0c;他允…

Softing dataFEED OPC Suite通过OPC UA标准加速数字化转型

数字化转型的关键在于成功将信息技术&#xff08;IT&#xff09;与运营技术&#xff08;OT&#xff09;相融合&#xff0c;例如将商业应用程序和服务器与可编程逻辑控制器&#xff08;PLC&#xff09;和设备传感器相融合&#xff0c;为此&#xff0c;各种设备和系统必须能够相互…

ERP系统为何适合电子元件行业?

在快速发展的电子元件行业中&#xff0c;高效、精确的管理系统对于企业的成功至关重要。IC设计ERP系统&#xff0c;作为一套高度集成的企业管理解决方案&#xff0c;其独特的特性和功能使其特别适用于电子元件行业。 首先&#xff0c;ERP系统(Enterprise Resource Planning&…

钽酸锂集成光子芯片:引领光电集成新纪元

在信息技术飞速发展的今天&#xff0c;光电集成技术已成为推动全球集成电路产业持续创新的重要力量。随着全球集成电路产业发展步入“后摩尔时代”&#xff0c;芯片性能提升的难度和成本不断攀升&#xff0c;业界急需寻找新的技术突破口。在这一背景下&#xff0c;中国科学院上…

【深度学习目标检测】二十六、基于深度学习的垃圾检测系统-含数据集、GUI和源码(python,yolov8)

设计垃圾检测系统的意义在于多个方面&#xff0c;这些方面不仅关乎环境保护和城市管理&#xff0c;还涉及到技术进步和社会效益。以下是设计垃圾检测系统的主要意义&#xff1a; 环境保护与资源回收&#xff1a; 垃圾检测系统能够有效地识别不同种类的垃圾&#xff0c;帮助人们…

江苏省人大财经委主任委员谢志成一行莅临聚合数据走访调研

4月18日&#xff0c;江苏省人大财经委主任委员谢志成莅临聚合数据展开考察调研。省人大财经委副主任委员&#xff08;正厅&#xff09;周毅、省人大常委会办公厅一级巡视员吕小鹏、外事委委员赵正驰、省数据局副局长王万军&#xff1b;苏州市人大常委会副秘书长毛元龙、数据局副…

快手二面:你有没有调用过第三方接口?碰到过哪些坑?

在我们的业务开发中&#xff0c;调用第三方接口已经成为常态&#xff0c;比如对接一些ERP系统、WMS系统、一些数据服务系统等&#xff0c;它极大地扩展了我们应用的功能和服务范围。然而&#xff0c;实际对接过程中&#xff0c;我们往往会在这一环节遇到各种意想不到的问题&…

【自动驾驶技术栈学习】1-硬件《大话自动驾驶》| 综述要点总结 by.Akaxi

----------------------------------------------------------------------------------------------------------------- 致谢&#xff1a;感谢十一号线人老师的《大话自动驾驶》书籍&#xff0c;收获颇丰 链接&#xff1a;大话自动驾驶 (豆瓣) (douban.com) -------------…

【科学研究】 女性主义:网络中的性别歧视现象

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验&#xff0c;帮助大家尽早适应研究生生活&#xff0c;尽快了解科研的本质。祝一切顺利&#xff01;—…

##20 实现图像风格迁移:使用PyTorch深入学习的艺术之旅

文章目录 前言项目概述准备阶段图像处理模型选择风格和内容特征提取风格迁移算法优化过程结果展示完整代码与实验项目结论参考文献 前言 图像风格迁移是一种使一幅图像呈现另一幅画作风格的技术&#xff0c;通过深度学习&#xff0c;我们能够捕捉到内容图像的结构信息和风格图…

函数memcpy的实现及详解

前言 今天我们来了解一下memcpy函数和它的作用吧&#xff0c;咋们之前已经熟悉了strcpy的使用&#xff0c;它的作用是字符串的拷贝&#xff0c;那么当我们要拷贝其他类型的数据时&#xff0c;应该使用什么函数呢&#xff0c;我们今天给大家介绍的就是memcpy函数&#xff0c;他可…

1960—2021年中国月日均温降水时间序列

基于均质级数&#xff08;MASH&#xff09;和气候多元分析方法&#xff0c;首先对1960—2021年中国366个站点的日均气温、最高气温、最低气温和降水量进行不均匀性检测、估计和调整&#xff0c;建立均质化日气温和降水数据集。所有数据集均由希腊&#xff08;帕特雷大学物理系大…