Docker_基础初识

news2024/11/15 18:01:26

文章目录

  • 初识Docker
    • 什么是虚拟化、容器化
    • 为什么要虚拟化、容器化?
    • 虚拟化实现方式
      • 应用程序执行环境分层
      • 虚拟化常见类别
    • 常见虚拟化实现
      • 主机虚拟化(虚拟机)实现
        • Hypervisor
      • 容器虚拟化实现
    • namespace隔离实操
      • 基础知识
        • dd命令
          • 语法
          • 参数
        • mkfs 命令
          • 语法
          • 参数
        • df 命令
          • 语法
          • 参数
        • mount 命令
          • 语法
          • 参数
        • unshare 命令
          • 语法
          • 参数

初识Docker

什么是虚拟化、容器化

  • 物理机:实际的服务器或者计算机。相对于虚拟机而言的对实体计算机的称呼。物理机提供给虚拟机以硬件环境,有时也称为“寄主”或“宿主”。
  • 虚拟化:是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
  • 容器化:容器化是一种虚拟化技术,又称操作系统层虚拟化(Operating system level virtualization),这种技术将操作系统内核虚拟化,可以允许用户空间软件实例(instances)被分割成几个独立的单元,在内核中运行,而不是只有一个单一实例运行。这个软件实例,也被称为是一个容器(containers)。对每个实例的拥有者与用户来说,他们使用的服务器程序,看起来就像是自己专用的。容器技术是虚拟化的一种。docker 是现今容器技术的事实标准。

通俗一点的例子:

  • 物理机就像一个庄园,独立占用了一块土地,花园都是自己的,其他人无法共享使用。

  • 虚拟机相当于开发商的一个楼盘,一栋楼一套房子一户人家,共享一块宅基地,共享小区的设施。

  • 小区的花园,共享小区的游乐设施。容器相当于在 1 个房子里面,开辟出来一个又一个的胶囊公寓,共享这套房子的卫生

    间、共享厨房、共享 WiFi,只有衣服、电脑等私人物品是你自己的。

为什么要虚拟化、容器化?

  • 资源利用率高:比如我们在某云上买了一个1核2G的服务器,另一个人买了一个2核4G的服务器,它并不是真的是给你买了一个真实的电脑放在那里,而是一个很大的服务器,直接切出来,1核2G给我,2核4G给他,当这些资源不用了,还能收回来。
  • 环境标准化:一次构建,随处执行。实现执行环境的标准化发布,部署和运维。开发过程中一个常 见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境, 确保了应用运行环境一致性
  • 资源弹性伸缩:根据业务情况,动态调整计算、存储、网络等硬件及软件资源。比如遇到双 11 了,把服务扩容
  • 差异化环境提供:比如我的服务一个依赖 Ubuntu 操作系统,一个服务依赖 CentOS 操作系统,但是没有预算购买两个物理机,这个时候容器化就能很好的提供多种不同的环境。
  • 沙箱安全:为避免不安全或不稳定软件对系统安全性,稳定性造成影响,可使用虚拟化技术构建 虚拟执行环境
  • 容器对比虚拟机更轻量,启动更快: 传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。docker 不需要虚拟内核,所以启动可以更快,相当于 windows 的开机时间省去了
  • 维护和扩展容易:Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得 应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单

虚拟化实现方式

应用程序执行环境分层

在这里插入图片描述

  • 硬件层:提供硬件抽象,包括指令集架构、硬件设备及硬件访问接口
  • 操作系统层 :提供系统调用接口,管理硬件资源
  • 程序库层:提供数据结构定义及函数调用接口

虚拟化常见类别

  1. 虚拟机: 存在于硬件层和操作系统层间的虚拟化技术。虚拟机通过“伪造”一个硬件抽象接口
  2. 容器:存在于操作系统层和函数库层之间的虚拟化技术。容器通过“伪造”操作系统的接口
  3. JVM 之类的虚拟机:存在于函数库层和应用程序之间的虚拟化技术

常见虚拟化实现

主机虚拟化(虚拟机)实现

主机虚拟化的原理是通过在物理服务器上安装一个虚拟化层来实现。这个虚拟化层可 以在物理服务器和客户操作系统之间建立虚拟机,使得它们可以独立运行。从软件框架的角度上,根据虚拟化层是直接位于硬件之上还是在一个宿主操作系统之上,将虚拟化划分为两种类型

在这之前要知道一个东西:Hypervisor,那么这个东西是什么呢?

Hypervisor

Hypervisor 又称虚拟机监视器(VMM),是一种可以创建和管理虚拟环境的软件或硬件技术。

主要功能

  1. 资源隔离 - 它能够将物理硬件资源(如 CPU、内存、存储和网络接口等)进行划分和隔离,使多个虚拟机(VM)可以在同一台物理主机上独立运行,互不干扰。每个虚拟机都认为自己独占了整个物理系统资源。 - 例如,一个物理服务器上运行着多个虚拟机,其中一个虚拟机的崩溃不会影响其他虚拟机的正常运行。
  2. 资源分配 - Hypervisor 负责为每个虚拟机分配适当的资源,如 CPU 时间、内存大小和磁盘空间等。可以根据不同虚拟机的需求动态调整资源分配,以提高资源利用率。 - 比如,对于需要大量计算资源的虚拟机,可以分配更多的 CPU 核心和内存;而对于资源需求较低的虚拟机,则可以减少分配,从而使物理资源得到更有效的利用。
  3. 虚拟机管理 - 提供虚拟机的创建、启动、停止、暂停、恢复和删除等操作。用户可以通过 Hypervisor 的管理界面方便地管理多个虚拟机。 - 例如,管理员可以在不中断物理服务器运行的情况下,快速创建新的虚拟机以满足业务增长的需求,或者停止不再需要的虚拟机以节省资源。

再回到虚拟化的两种类型

  • 类型一: 类型一的Hypervisor是一种系统软件,它充当计算机硬件和虚拟机之间的中介,负责有效地分配和利用由各个虚拟机使用的硬件资源,这些虚拟机在物理主 机上单独工作,直接运行在硬件之上,没有宿主机操作系统,Hypervisor 直接控制硬件资源和客户机。
  • 类型二:类型二的 Hypervisor 运行在一个宿主机操作系统之上或者系统里面,Hypervisor 作为宿主机操作系统中的一个应用程序,客户机就是在宿主机操作系统上的一个进程

容器虚拟化实现

容器虚拟化实现原理

容器虚拟化,有别于主机虚拟化,是操作系统层的虚拟化。通过 namespace 进行各程序的隔离,加上 cgroups 进行资源的控制,以此来进行虚拟化

容器虚拟化基础之 NameSpace

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

namespace系统调用参数被隔离的全局系统资源引入内核版本
UTSCLONE_NEWUTS主机名和域名2.6.19
IPCCLONE_NEWIPC信号量、消息队列和共享内存 ,进程间通信2.6.19
PIDCLONE_NEWPID进程编号2.6.24
NetworkCLONE_NEWNET网络设备、网络栈、端口等2.6.29
MountCLONE_NEWNS文件系统挂载点2.4.19
UserCLONE_NEWUSER用户和用户组3.8

namespace隔离实操

基础知识

dd命令

Linux dd 命令用于读取、转换并输出数据。 dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设 备或标准输出。

语法
dd OPTION
参数
  • if=文件名:输入文件名,默认为标准输入。即指定源文件。
  • of=文件名:输出文件名,默认为标准输出。即指定目的文件。
  • ibs=bytes:一次读入 bytes 个字节,即指定一个块大小为 bytes 个字节。
  • obs=bytes:一次输出 bytes 个字节,即指定一个块大小为 bytes 个字节。
  • bs=bytes:同时设置读入/输出的块大小为 bytes 个字节。
  • cbs=bytes:一次转换 bytes 个字节,即指定转换缓冲区大小。
  • skip=blocks:从输入文件开头跳过 blocks 个块后再开始复制。
  • seek=blocks:从输出文件开头跳过 blocks 个块后再开始复制。
  • count=blocks:仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。
  • conv=<关键字>,关键字可以有以下 11 种
  • conversion:用指定的参数转换文件。
  • ascii:转换 ebcdic 为 ascii
  • ebcdic:转换 ascii 为 ebcdic
  • ibm:转换 ascii 为 alternate ebcdic
  • block:把每一行转换为长度为 cbs,不足部分用空格填充
  • unblock:使每一行的长度都为 cbs,不足部分用空格填充
  • lcase:把大写字符转换为小写字符
  • ucase:把小写字符转换为大写字符
  • swap:交换输入的每对字节
  • noerror:出错时不停止
  • notrunc:不截短输出文件
  • sync:将每个输入块填充到 ibs 个字节,不足部分用空(NUL)字符补齐。

创建一个指定大小的空文件

在这里插入图片描述

小写转大写
在这里插入图片描述

mkfs 命令

用于在设备上创建 Linux 文件系统,俗称格式化,比如我们使用 U 盘的时候可以格式化。

语法
mkfs [-V] [-t fstype] [fs-options] filesys [blocks]
参数

-t fstype:指定要建立何种文件系统;如 ext3,ext4

filesys :指定要创建的文件系统对应的设备文件名;
blocks:指定文件系统的磁盘块数。
-V : 详细显示模式
fs-options:传递给具体的文件系统的参数

例如 格式化镜像文件为 ext4

在这里插入图片描述

df 命令

Linux df(英文全拼:disk free) 命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计。

语法
df [OPTION]... [FILE]...
参数

常见参数

  • -a, --all 包含所有的具有 0 Blocks 的文件系统
  • -h, --human-readable 使用人类可读的格式(预设值是不加这个选项的…)
  • -H, --si 很像 -h, 但是用 1000 为单位而不是用 1024
  • -t, --type=TYPE 限制列出文件系统的 TYPE
  • -T, --print-type 显示文件系统的形式

在这里插入图片描述

mount 命令

mount 命令用于加载文件系统到指定的加载点。此命令的也常用于挂载光盘,使我们可以访问光盘中的数据,因为你将光盘插入光驱中,Linux 并不会自动挂载,必须使用Linux mount 命令来手动完成挂载。
Linux 系统下不同目录可以挂载不同分区和磁盘设备,它的目录和磁盘分区是分离的,可以自由组合(通过挂载)
不同的目录数据可以跨越不同的磁盘分区或者不同的磁盘设备

挂载的实质是为磁盘添加入口(挂载点)。

语法
mount [-l]
mount [-t vfstype] [-o options] device dir
参数

-l:显示已加载的文件系统列表;
-t: 加载文件系统类型支持常见系统类型的 ext3,ext4,iso9660,tmpfs,xfs 等,大部分情况可以不指定,mount 可以自己识别
-o options 主要用来描述设备或档案的挂接方式。
loop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
device: 要挂接(mount)的设备。
dir: 挂载点的目录

在这里插入图片描述

unshare 命令

unshare 主要能力是使用与父程序不共享的名称空间运行程序。

语法
unshare [options] program [arguments]
参数
参数含义
-i, --ipc不共享 IPC 空间
-m, --mount不共享 Mount 空间
-n, --net不共享 Net 空间
-p, --pid不共享 PID 空间
-u, --uts不共享 UTS 空间
-U, --user不共享用户
-V, --version版本查看
–fork执行 unshare 的进程 fork 一个新的子进程,在子进程里执行 unshare 传入的参数。
–mount-proc执行子进程前,将 proc 优先挂载过去

不共享用户空间,这里相当于创建了一个子进程

在这里插入图片描述

另起一个会话

在这里插入图片描述

退出启动的子进程后,又回到宿主机的命名空间

在这里插入图片描述

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

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

相关文章

视觉距离与轴距离的转换方法

1.找一个明显的参照物&#xff0c;用上方固定的相机拍一下。保存好图片 2.轴用定长距离如1mm移动一下。 3.再用上相机再取一张图。 4.最后用halcon 将两图叠加 显示 效果如下 从图上可以明显的看出有两个图&#xff0c;红色标识的地方。 这时可以用halcon的工具画一个长方形…

深度学习-卷积神经网络(CNN)

文章目录 一、网络构造1. 卷积层&#xff08;Convolutional Layer&#xff09;&#xff08;1&#xff09;卷积&#xff08;2&#xff09;特征图计算公式&#xff08;3&#xff09;三通道卷积 2. 激活函数&#xff08;Activation Function&#xff09;3. 池化层&#xff08;Pool…

Elasticsearch不停机切换(上云)方案

如何给飞行中的飞机换引擎? 背景 业务背景 略 技术背景 线下集群40个索引左右&#xff0c;总数据量不大,不到100G因为ES承担的业务鉴权业务&#xff0c;所以不能接受停机割接 还有就是ES中数据来自各个业务方&#xff0c;推送的时机不定&#xff0c;也没有完备的重推机制&…

漏洞复现_永恒之蓝

1.概述 永恒之蓝&#xff08;EternalBlue&#xff09;是一个影响Windows操作系统的远程代码执行漏洞&#xff0c;编号为CVE-2017-0144&#xff0c;最初由美国国家安全局&#xff08;NSA&#xff09;开发并利用&#xff0c;后来被黑客组织Shadow Brokers泄露。该漏洞存在于SMBv…

『功能项目』QFrameWork制作背包界面UGUI【72】

本章项目成果展示 我们打开上一篇71QFrameWork更新道具图片UGUI的项目&#xff0c; 本章要做的事情是制作背包UI界面&#xff0c;实现道具栏与背包道具的互通 首先将以下资源图片放进Art文件夹 将UICanvas的UISlot对象复制一份放在Image下 创建Scrollbar View 设置Scrollbar V…

数据处理与统计分析篇-day08-apply()自定义函数与分组操作

一. 自定义函数 概述 当Pandas自带的API不能满足需求, 例如: 我们需要遍历的对Series中的每一条数据/DataFrame中的一列或一行数据做相同的自定义处理, 就可以使用Apply自定义函数 apply函数可以接收一个自定义函数, 可以将Series对象的逐个值或DataFrame的行/列数据传递给自…

Object类代码结构

Object Object是所有类的父类。 方法结构如下 一些不知道的方法 private static native void registerNatives(); * JNI机制 * 这里定义了一个 native 方法 registerNatives()&#xff0c;它没有方法体。 * native 关键字表示这个方法的实现是由本地代码 * &#xff08;通常…

传输层 IV(TCP协议——流量控制、拥塞控制)【★★★★】

&#xff08;★★&#xff09;代表非常重要的知识点&#xff0c;&#xff08;★&#xff09;代表重要的知识点。 一、TCP 流量控制&#xff08;★★&#xff09; 1. 利用滑动窗口实现流量控制 一般说来&#xff0c;我们总是希望数据传输得更快一些。但如果发送方把数据发送得…

java基础知识20 Intern方法的作用

一 Intern方法作用 1.1 Intern方法 1.在jdk1.6中&#xff1a; intern()方法&#xff1a;在jdk1.6中&#xff0c;根据字符串对象&#xff0c;检查常量池中是否存在相同字符串对象 如果字符串常量池里面已经包含了等于字符串X的字符串&#xff0c;那么就返回常量池中这个字符…

基于高维多目标优化的无人机三维航迹规划,MATLAB代码

高维多目标优化问题是指目标数量大于3的优化问题&#xff0c;这类问题在实际应用中非常普遍&#xff0c;如工业生产、资源管理、工程设计等领域。随着目标数量的增加&#xff0c;问题的求解难度也随之增大&#xff0c;传统的多目标优化算法在处理高维多目标问题时面临着选择压力…

window系统DockerDesktop 部署windows容器

目录 参考文献1、安装Docker Desktop1.1 下载安装包1.2 安装教程1.3 异常解决 2、安装windows容器2.1 先启动DockerDesktop 软件界面2.2 检查docker版本2.3 拉取windows镜像 参考文献 windows容器docker中文官网 Docker: windows下跑windows镜像 1、安装Docker Desktop 1.1 …

Llama3.1的部署与使用

✨ Blog’s 主页: 白乐天_ξ( ✿&#xff1e;◡❛) &#x1f308; 个人Motto&#xff1a;他强任他强&#xff0c;清风拂山冈&#xff01; &#x1f4ab; 欢迎来到我的学习笔记&#xff01; 什么是Llama3.1&#xff1f; Llama3.1 是 Meta&#xff08;原 Facebook&#xff09;公…

java项目之线上辅导班系统的开发与设计

项目简介 基于springboot的线上辅导班系统的开发与设计的主要使用者分为&#xff1a; 管理员在后台主要管理字典管理、论坛管理、公开课管理、课程管理、课程报名管理、课程收藏管理、课程留言管理、师资力量管理、用户管理、管理员管理等。 &#x1f495;&#x1f495;作者&a…

二分查找算法(2) _在排序数组中查找元素的第一个和最后一个_模板

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 二分查找算法(2) _在排序数组中查找元素的第一个和最后一个_模板 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评…

算法-K个一组翻转链表

// 要实现没k个节点进行翻转的操作&#xff0c;可以按照一下步骤进行 // 1.计算链表长度 // 2.分组反转 // 3. 使用一个虚拟头节点来处理边界情况 // 4.每次处理k个节点进行反转 // 5.如果剩余节点不足k个 则保持原有顺序 // 6.依次反转每组中的节点 // 1.使用prevGroupEEnd追…

EvilScience靶机详解

主机发现 arp-scan -l 得到靶机ip 192.168.229.152 端口扫描 nmap -sV -A -T4 192.168.1.20 这段代码使用 nmap 命令来扫描目标主机 192.168.1.20&#xff0c;并执行以下操作&#xff1a;-sV&#xff1a;探测开放的端口&#xff0c;以确定服务/版本信息。-A&#xff1a;启…

[大语言模型] LINFUSION:1个GPU,1分钟,16K图像

1. 文章 2409.02097 (arxiv.org)https://arxiv.org/pdf/2409.02097 LINFUSION: 1 GPU, 1 MINUTE, 16K IMAGE 摘要 本文介绍了一种新型的扩散模型LINFUSION&#xff0c;它能够在保持高分辨率图像生成性能的同时显著降低时间和内存复杂度。该模型采用了基于Transformer的UNet进…

常用卫星学习

文章目录 Landsat-8 Landsat-8 由一台操作陆地成像仪 &#xff08;OLI&#xff09; 和一台热红外传感器 &#xff08;TIRS&#xff09;的卫星&#xff0c;OLI 提供 9 个波段&#xff0c;覆盖 0.43–2.29 μm 的波长&#xff0c;其中全色波段&#xff08;一般指0.5μm到0.75μm左…

Java的IO流(二)

目录 Java的IO流&#xff08;二&#xff09; 字节缓冲流 基本使用 使用缓冲流复制文件 字符缓冲流 缓冲流读取数据原理 字符编码 字符集 转换流 序列化流与反序列化流 基本使用 禁止成员被序列化 序列号不匹配异常 打印流 基本使用 系统打印流与改变流向 Prop…

【kaggle竞赛】毒蘑菇的二元预测题目相关信息和思路求解代码

毒蘑菇的二元预测 您提供了很多关于不同二元分类任务的资源和链接&#xff0c;看起来这些都是Kaggle竞赛中的参考资料和高分解决方案。为了帮助您更好地利用这些资源&#xff0c;这里是一些关键点的总结&#xff1a; Playground Season 4 Episode 8 主要关注的竞赛: 使用银行…