Docker简介与基础使用¶
约 1251 个字 2 行代码 预计阅读时间 4 分钟
虚拟化与容器化¶
物理机:实际的服务器或者计算机。相对于虚拟机而言的对实体计算机的称呼。物理机提供给虚拟机以硬件环境,有时也称为"寄主"或"宿主"。
虚拟化:是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
容器化:容器化是一种虚拟化技术,又称操作系统层虚拟化,这种技术将操作系统内核虚拟化,可以允许用户空间软件实例被分割成几个独立的单元,在内核中运行,而不是只有一个单一实例运行。这个软件实例,也被称为是一个容器。对每个实例的拥有者与用户来说,他们使用的服务器程序,看起来就像是自己专用的。容器技术是虚拟化的一种。Docker是现今容器技术的事实标准。
容器化实现¶
容器虚拟化,有别于主机虚拟化,是操作系统层的虚拟化。通过 namespace 进行各程序的隔离,加上 cgroups 进行资源的控制,以此来进行虚拟化。
namespace¶
介绍¶
namespace 是 Linux 内核用来隔离内核资源的方式。通过 namespace 可以让一些进程只能看到与自己相关的一部分资源,而另外一些进程也只能看到与它们自己相关的资源,这两拨进程根本就感觉不到对方的存在。具体的实现方式是把一个或多个进程的相关资源指定在同一个 namespace 中。
Linux namespaces 是对全局系统资源的一种封装隔离,使得处于不同 namespace 的进程拥有独立的全局系统资源,改变一个 namespace 中的系统资源只会影响当前 namespace 里的进程,对其他 namespace 中的进程没有影响。
Linux 提供了多个 API 用来操作 namespace,它们是 clone()、setsns() 和 unshare() 函数,为了确定隔离的到底是哪项 namespace,在使用这些 API 时,通常需要指定一些调用参数:CLONE_NEWIPC、CLONE_NEWNET、CLONE_NEWNS、CLONE_NEWPID、CLONE_NEWUSER、CLONE_NEWUTS 和 CLONE_NEWCGROUP。如果要同时隔离多个 namespace,可以使用|组合
基础实战——dd命令¶
dd命令:Linux dd 命令用于读取、转换并输出数据。dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。
dd命令常用选项如下:
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 为 asciiebcdic:转换 ascii 为 ebcdicibm:转换 ascii 为 alternate ebcdicblock:把每一行转换为长度为 cbs,不足部分用空格填充unblock:使每一行的长度都为 cbs,不足部分用空格填充lcase:把大写字符转换为小写字符ucase:把小写字符转换为大写字符swap:交换输入的每对字节noerror:出错时不停止notrunc:不截断输出文件sync:将每个输入块填充到 ibs 个字节,不足部分用空(NUL)字符补齐。
--help:显示帮助信息--version:显示版本信息
Note
对于需要指定转换文件大小的选项,例如ibs、obs、bs等,除了可以指定字节为单位以外,还可以指定下面的单位:
| 后缀 | 含义 | 对应字节数 |
|---|---|---|
c | 字节(Byte) | 1 |
w | 16-bit words | 2 |
b | 块(block) | 512 |
K | 千字节(基于 1024) | 1024 |
M | 兆字节(基于 \(1024^2\)) | 1 048 576 |
G | 吉字节(基于 \(1024^3\)) | 1 073 741 824 |
T, P, E, Z, … | 更大的单位(依次 1024 倍递增) | — |
kB / MB / GB | SI 单位(基于 1000) | 1000 / 1000² / 1000³ |
KiB / MiB / GiB | IEC 单位(基于 1024) | 1024 / 1024² / 1024³ |
例如,创建一个80MB的文件:
| Bash | |
|---|---|
1 | |
将文件内容的小写全部转换为大写,输出到一个新的文件中:
| Bash | |
|---|---|
1 | |