Docker 基础认识

文章目录

  • 概念铺垫(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)
容器是独立运行的一个或一组应用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【前端】CSS基础(2)

文章目录 前言1、CSS选择器1.1选择器的功能1.2 选择器的种类1.2.1 基础选择器1.2.1.1 标签选择器1.2.1.2 类选择器1.2.1.3 id选择器1.2.1.4 通配符选择器1.2.1.5 伪类选择器 1.2.2 复合选择器1.2.2.1 后代选择器1.2.2.2 子选择器1.2.2.3 并集选择器 前言 这篇博客仅仅是对CSS的…

vue3自定义指令​(通过指令钩子获得dom和钩子参数)

实现文本框自动获得焦点 Index.vue: <script setup> import { ref, onMounted } from vue import ./index.cssconst vFocus {mounted: (el, binding) > {el.focus()console.log(binding)} }onMounted(() > {}) </script><template><div class&qu…

JSPfilters过滤技术

1.创建动态web项目 2.创建filters的文件 3.创建主页面 4.配置xml项目 总结构 主页面代码 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%><!DOCTYPE html><html><head><meta cha…

C++学习第二十九课:C++ 输入输出流详解:从基础到高级应用

在 C 中&#xff0c;流&#xff08;stream&#xff09;是一种用于实现输入输出操作的抽象概念。流可以看作是字节的流动&#xff0c;这些字节可以从一个地方流向另一个地方&#xff0c;例如从键盘输入到程序中&#xff0c;或者从程序输出到屏幕。C 提供了一套完整的流库来处理各…

灵卡科技HDMI音视频采集及H.264编码一体化采集卡—LCC260

推荐一款由灵卡科技倾力打造的高品质HDMI音视频采集卡——LCC260。以创新的技术&#xff0c;精湛的工艺和卓越的性能&#xff0c;为您提供全方位的音视频解决方案。 LCC260是一款集HDMI音视频采集与H.264编码于一身的全功能采集卡。它的输入端配备了最先进的HDMI 1.4a标准接口&…

扩散模型diffusion model

一 什么是扩散模型 1.1 现有生成模型 已经有大量的方法证明深度生成模型能够模拟人类的想象思维&#xff0c;生成人类难以分辨真伪的内容&#xff0c;主要方法如下&#xff1a; 1、GAN&#xff1a;用神经网络训练生成器和判别器 GAN 的主要思想&#xff1a; GAN 就是一个互搏的…

ChatGPT-4o发布了,所有人都可以免费用

前言 美国时间 5 月 13 日&#xff0c;在 Sam Altman 缺席的情况下&#xff08;为什么缺席&#xff0c;猜测是可能后面还有更重磅的消息&#xff0c;这次的产品只是一个中间过渡产品&#xff09;&#xff0c;OpenAI CTO Mira Murati 介绍了新的 ChatGPT 产品 ChatGPT-4o。这个…

go语言基础1

1.token token是构成源程序的基本不可在分割单元。编译器编译源程序的第一步就是将源程序分割为一个个独立的token&#xff0c;这个过程就是词法分析。Go语言的token可以分为关键字、标识符、操作符、分隔符和字面常量等&#xff0c;如图所示&#xff1a; Go token分隔符有两类…

Vscode编辑器 js 输入log自动补全

最近换了新电脑&#xff0c;新下载了Vscode&#xff0c;记录一下设置项。 Vscode 版本 想要的效果 js文件中输入log&#xff08;点击tab键&#xff09;&#xff0c;自动补全为 console.log() Vscode 文件》首选项》设置 搜索&#xff1a;snippets Emmet: Show Suggestions…

计算机毕业设计源码 | 基于SpringBoot的线上教学系统 答疑辅导网站(附源码)

1&#xff0c;项目介绍 1.1 项目背景 网络问答平台经历了多年的发展&#xff0c;目前处于一个日益成熟的状态。最早的网络问答平台是知乎&#xff0c;知乎的创立者认为有许多信息在互联网上没有被记录和共享&#xff0c;于是他们决定创造一个平台&#xff0c;能够让更多人可以…

【强训笔记】day22

NO.1 思路&#xff1a;将情况全部枚举出来。 代码实现&#xff1a; #include <iostream> #include<string> using namespace std;string a,b; int main() {cin>>a>>b;int ma.size(),nb.size();int retm;for(int i0;i<n-m;i){int tmp0;for(int j…

软文撰写注意事项有哪些?

软文&#xff0c;作为一种隐性的广告形式&#xff0c;越来越受到企业的青睐。一篇高质量的软文&#xff0c;不仅能吸引读者的眼球&#xff0c;还能在潜移默化中传递品牌价值。撰写一篇高质量的软文&#xff0c;并非一蹴而就。从开头到发布&#xff0c;每一个环节都需要精心打磨…

Charger之二输入电压动态电源原理(VIN-DPM)

主要内容 Charger的VIN-DPM 前篇内容&#xff1a;电池管理IC&#xff08;Charger&#xff09;了解一下&#xff1f; 领资料&#xff1a;点下方↓名片关注回复&#xff1a;粉丝群 正文 一、 VIN-DPM概念 VIN-DPM是指输入电压动态电源管理&#xff08;Input voltage dynamic…

C++ QT设计模式 (第二版)

第3章 Qt简介 3.2 Qt核心模块 Qt是一个大库&#xff0c;由数个较小的库或者模块组成&#xff0c;最为常见的如下&#xff1a;core、gui、xml、sql、phonon、webkit&#xff0c;除了core和gui&#xff0c;这些模块都需要在qmake的工程文件中启用 QTextStream 流&#xff0c;Qdat…

表现孤独的短视频:成都鼎茂宏升文化传媒公司

表现孤独的短视频&#xff1a;孤独之美与心灵的对话 在短视频的浪潮中&#xff0c;有一种特殊的情感表达形式逐渐崭露头角——那就是表现孤独的短视频。这些视频以其独特的视角和深刻的情感内涵&#xff0c;引发了广大观众的共鸣。表现孤独的短视频&#xff1a;成都鼎茂宏升文…

activiti——网关配置

文章目录 前言网关介绍代码案例测试各项网关排他网关 ExclusiveGateway1、绘制流程图2、编写测试代码 并行网关ParallelGateway1、绘制流程图2、编写测试代码 包含网关InclusiveGateway1、绘制流程图2、编写测试代码 前言 在activiti工作流中&#xff0c;还有一个组件也很重要…

代码随想录算法训练营第五十三天

今天同事说他要离职啦&#xff0c;还挣挺多的&#xff0c;我也慢慢努力吧&#xff01;&#xff01; 儿子似乎有点斜颈&#xff0c;还好不是很大的病&#xff0c;儿子也开始面对人生的苦难啦。都好好加油生活&#xff01; 1143.最长公共子序列 二维可以理解一点。 class Solut…

Meilisearch使用过程趟过的坑

Elasticsearch 做为老牌搜索引擎&#xff0c;功能基本满足&#xff0c;但复杂&#xff0c;重量级&#xff0c;适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求&#xff0c;极快&#xff0c;单文件&#xff0c;超轻量。 所以&#xff0c;对于中小型项目来说…

解决springboot+vue静态资源刷新后无法访问的问题

一、背景 原项目是有前后端分离设计&#xff0c;测试环境是centos系统&#xff0c;采用nginx代理和转发&#xff0c;项目正常运行。 项目近期上线到正式环境&#xff0c;结果更换了系统环境&#xff0c;需要放到一台windows系统中&#xff0c;前后端打成一个jar包&#xff0c;…

使用vue3+ts+vite从零开始搭建bolg(五):layout(持续更新中)

五、layout搭建 5.1静态搭建 在src下创建如图文件夹 这里用logo举例&#xff0c;在scripts里export <script lang"ts">export default {name: Logo,}</script> 然后在layout里引入 //引入左侧菜单顶部用户信息 import Logo from ./logo/index.vue 接…