Initial commit

This commit is contained in:
Dichgrem 2024-04-20 20:12:46 +08:00
parent 11f7ac1e45
commit d250ff6b95
15 changed files with 599 additions and 192 deletions

View File

@ -10,11 +10,11 @@ tags = ["Docker"]
<!-- more -->
**什么是容器?**
## **什么是容器?**
容器是轻量级、可移植和隔离的软件环境,允许开发人员跨不同平台一致地运行和打包应用程序及其依赖项。它们有助于简化应用程序开发、部署和管理流程,同时确保应用程序始终如一地运行,而不管底层基础架构如何。
**容器是如何工作的?**
## **容器是如何工作的?**
与传统的虚拟化不同,传统的虚拟化使用硬件资源模拟完整的操作系统,容器共享主机的操作系统内核,并利用轻量级虚拟化技术来创建隔离的进程。这种方法有几个好处,包括:
@ -26,12 +26,12 @@ tags = ["Docker"]
- 一致性:容器为应用程序的开发、测试和生产阶段提供了一致的环境,从而减少了“它在我的机器上工作”的问题。
**容器和 Docker**
## **容器和 Docker**
Docker 是一个简化创建、部署和管理容器过程的平台。它为开发人员和管理员提供了一组工具和 API 来管理容器化应用程序。使用 Docker您可以将应用程序代码、库和依赖项构建并打包到容器映像中该映像可以在任何支持 Docker 的环境中一致地分发和运行。
**对容器的需求**
## **对容器的需求**
在软件开发和部署领域,一致性和效率至关重要。在容器出现之前,开发人员在跨不同环境部署应用程序时经常面临挑战,包括:
@ -40,7 +40,7 @@ Docker 是一个简化创建、部署和管理容器过程的平台。它为开
- 流程缓慢和可伸缩性问题:传统的部署方法具有较慢的上市时间和扩展困难,这阻碍了软件更新的快速交付。
**容器如何应对这些挑战:**
## **容器如何应对这些挑战:**
- 一致的环境:容器通过将应用程序及其依赖项、配置和库捆绑到单个容器中来解决环境不一致问题。这保证了应用程序在不同环境中平稳运行。
- 高效利用资源:与虚拟机不同,容器共享底层系统资源和操作系统内核,这使得它们轻量级且高效。容器旨在使用更少的资源并更快地启动,从而提高资源利用率。
@ -50,7 +50,7 @@ Docker 是一个简化创建、部署和管理容器过程的平台。它为开
总体而言,对于希望快速响应市场变化、提高资源效率并确保可靠和一致的软件交付的组织来说,容器已成为必不可少的工具。它们彻底改变了现代软件开发实践,并在部署和应用程序管理领域产生了持久的影响。
**裸机、虚拟机、容器**
## **裸机、虚拟机、容器**
- 裸机
@ -78,7 +78,7 @@ OCI 有两个主要规范:
- 运行时规范 runtime-spec它定义了通过隔离技术如容器引擎执行容器的规范。Docker 构建的容器运行时称为“containerd”指导了 OCI 运行时规范的开发。
- 镜像规范 image-spec它定义容器镜像格式用于描述容器的内容并可由兼容的运行时运行。Docker 的初始映像格式促成了 OCI 映像规范的创建。
**Docker 和 OCI 之间的兼容性**
## **Docker 和 OCI 之间的兼容性**
Docker 始终致力于支持 OCI 规范,并且自参与 OCI 以来,不断更新其软件以符合 OCI 标准。Docker 的 containerd 运行时和映像格式与 OCI 规范完全兼容,使 Docker 容器能够由其他符合 OCI 标准的容器运行时运行,反之亦然。

103
content/docker-learn-2.md Normal file
View File

@ -0,0 +1,103 @@
+++
title = "Docker学习笔记(二)"
date = 2024-03-26
[taxonomies]
tags = ["Docker"]
+++
前言 了解支持 Docker 的核心技术将有助于更深入地了解 Docker 的工作原理,并更有效地使用该平台。
<!-- more -->
## **Linux 容器 LXC**
Linux 容器 LXC 是 Docker 的基础。LXC 是一种轻量级虚拟化解决方案,它允许多个隔离的 Linux 系统在单个主机上运行而无需成熟的虚拟机管理程序。LXC 以安全和优化的方式有效地隔离应用程序及其依赖项。
## **控制组 cgroups**
控制组 cgroups 是一项 Linux 内核功能,允许将 CPU、内存和 I/O 等资源分配给一组进程并对其进行管理。Docker 利用 cgroups 来限制容器使用的资源,并确保一个容器不会垄断主机系统的资源。
## **联合文件系统 UnionFS**
UnionFS 是一种文件系统服务允许在单个统一视图中叠加多个文件系统。Docker 使用 UnionFS 为镜像和容器创建分层方法,从而实现更好的通用文件共享和更快的容器创建。
## **命名空间**
命名空间是 Docker 用于在容器之间提供隔离的核心技术之一。在本节中,我们将简要讨论什么是命名空间以及它们是如何工作的。
在 Linux 内核中,命名空间是一种允许隔离各种系统资源的功能,使进程及其子进程能够查看与其他进程分开的系统子集。命名空间有助于创建抽象层,以使容器化进程彼此分离并与主机系统分离。
Linux 中有几种类型的命名空间,包括:
- PID进程 ID隔离进程 ID 号空间,这意味着容器中的进程只能看到自己的进程,而看不到主机或其他容器中的进程。
- 网络 NET为每个容器提供单独的网络堆栈视图包括其自己的网络接口、路由表和防火墙规则。
- 挂载 MNT隔离文件系统挂载点使每个容器都有自己的根文件系统并且挂载的资源仅显示在该容器中。
- UTSUNIX 分时系统):允许每个容器拥有自己的主机名和域名,与其他容器和主机系统分开。
- 用户 USER在容器和主机之间映射用户和组标识符以便可以为容器中的资源设置不同的权限。
- IPC进程间通信允许或限制不同容器中进程之间的通信。
## **Docker如何使用命名空间**
Docker 使用命名空间为容器创建隔离环境。启动容器时Docker 会为该容器创建一组新的命名空间。这些命名空间仅适用于容器内,因此在容器内运行的任何进程都可以访问与其他容器以及主机系统隔离的系统资源子集。
Docker 容器和 LXC 容器很相似,所提供的安全特性也差不多。当用 docker run 启动一个容器时,在后台 Docker 为容器创建了一个独立的命名空间和控制组集合。
命名空间提供了最基础也是最直接的隔离,在容器中运行的进程不会被运行在主机上的进程和其它容器发现和作用。
每个容器都有自己独有的网络栈,意味着它们不能访问其他容器的 sockets 或接口。不过,如果主机系统上做了相应的设置,容器可以像跟主机交互一样的和其他容器交互。当指定公共端口或使用 links 来连接 2 个容器时,容器就可以相互通信了(可以根据配置来限制通信的策略)。
从网络架构的角度来看,所有的容器通过本地主机的网桥接口相互通信,就像物理机器通过物理交换机通信一样。
那么,内核中实现命名空间和私有网络的代码是否足够成熟?
内核命名空间从 2.6.15 版本2008 年 7 月发布)之后被引入,数年间,这些机制的可靠性在诸多大型生产系统中被实践验证。
实际上,命名空间的想法和设计提出的时间要更早,最初是为了在内核中引入一种机制来实现 OpenVZ 的特性。 而 OpenVZ 项目早在 2005 年就发布了,其设计和实现都已经十分成熟。
通过利用命名空间Docker 确保容器是真正可移植的,并且可以在任何系统上运行,而不会受到同一主机上运行的其他进程或容器的冲突或干扰。
## **控制组**
cgroups 或控制组是一项 Linux 内核功能,负责实现资源的审计和限制。
它提供了很多有用的特性以及确保各个容器可以公平地分享主机的内存、CPU、磁盘 IO 等资源;当然,更重要的是,控制组确保了当容器内的资源使用产生压力时不会连累主机系统。
尽管控制组不负责隔离容器之间相互访问、处理数据和进程它在防止拒绝服务DDOS攻击方面是必不可少的。尤其是在多用户的平台比如公有或私有的 PaaS控制组十分重要。例如当某些应用程序表现异常的时候可以保证一致地正常运行和性能。
控制组机制始于 2006 年,内核从 2.6.24 版本开始被引入。
- 资源隔离
cgroups 有助于将每个容器限制在一组特定的资源中,从而确保多个容器之间公平共享系统资源。这样可以更好地隔离不同容器,因此行为异常的容器不会消耗所有可用资源,从而对其他容器产生负面影响。
- 限制资源
使用 cgroups可以对容器使用的各种系统资源如 CPU、内存和 I/O设置限制。这有助于防止单个容器消耗过多资源并导致其他容器或主机系统的性能问题。
- 确定容器的优先级
通过分配不同的资源份额cgroups 允许您为某些容器提供优先级或优先级。在某些容器比其他容器更关键的情况下,或者在资源争用高的情况下,这可能很有用。
- Monitoring 监测
cGroups 还提供用于监视单个容器的资源使用情况的机制,这有助于深入了解容器性能并识别潜在的资源瓶颈。
## **Union Filesystems 联合文件系统**
联合文件系统,也称为 UnionFS在 Docker 的整体功能中起着至关重要的作用。联合文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承基于基础镜像没有父镜像可以制作各种具体的应用镜像。它是一种独特的文件系统类型它通过覆盖多个目录来创建虚拟的分层文件结构。UnionFS 无需修改原始文件系统或合并目录,而是支持将多个目录同时挂载到单个挂载点上,同时保持其内容独立。此功能在 Docker 的上下文中特别有用,因为它允许我们通过最小化重复和减小容器映像大小来管理和优化存储性能。
以下是联合文件系统的一些基本特性:
- 分层结构UnionFS 构建了一个分层结构,该结构由多个只读层和一个顶部可写层组成。此结构通过仅更新可写层来有效处理更改,而只读层保留原始数据。
- Copy-on-WriteCOW 机制是 UnionFS 不可或缺的功能。如果容器对现有文件进行更改,系统将在可写层中创建该文件的副本,而只读层中的原始文件保持不变。此过程将修改限制在最顶层,确保快速且资源节约的操作。
- 资源共享:联合文件系统允许多个容器在单独运行时共享公共基础层。此功能可防止资源重复并节省大量存储空间。
- 快速容器初始化:联合文件系统只需在现有只读层上创建新的可写层,就可以立即创建新容器。这种快速初始化减少了重复文件操作的开销,最终提高了性能。
## **Docker 中流行的联合文件系统**
Docker 支持多个联合文件系统,便于构建和管理容器。一些流行的选项包括:
- AUFS高级多层统一文件系统AUFS 被广泛用作 Docker 存储驱动程序,可实现多层的高效管理。
- OverlayFSOverlay FilesystemOverlayFS 是 Docker 支持的另一个联合文件系统。与 AUFS 相比,它使用简化的方法来创建和管理覆盖目录。
- BtrfsB-Tree 文件系统Btrfs 是一种现代文件系统,除了快照和校验和等高级存储功能外,还提供与联合文件系统的兼容性。
- ZFSZ 文件系统ZFS 是一个高容量且强大的存储平台,它提供联合文件系统功能以及数据保护、压缩和重复数据删除。

View File

@ -81,6 +81,16 @@
<ul><li class="post-list">
<a href="https://blog.dich.ink/docker-learn-2/">
<span class="post-date">2024-03-26</span>
:: <span class="post-list-title">Docker学习笔记(二)</span></a>
<span class="post-tags-inline">
::
<a class="post-tag" href="https://blog.dich.ink/tags/docker/">#Docker</a></span>
</li>
<li class="post-list">
<a href="https://blog.dich.ink/docker-learn-1/">
<span class="post-date">2024-03-25</span>
:: <span class="post-list-title">Docker学习笔记(一)</span></a>

View File

@ -5,8 +5,28 @@
<link rel="self" type="application/atom+xml" href="https://blog.dich.ink/atom.xml"/>
<link rel="alternate" type="text/html" href="https://blog.dich.ink"/>
<generator uri="https://www.getzola.org/">Zola</generator>
<updated>2024-03-25T00:00:00+00:00</updated>
<updated>2024-03-26T00:00:00+00:00</updated>
<id>https://blog.dich.ink/atom.xml</id>
<entry xml:lang="en">
<title>Docker学习笔记(二)</title>
<published>2024-03-26T00:00:00+00:00</published>
<updated>2024-03-26T00:00:00+00:00</updated>
<author>
<name>
Unknown
</name>
</author>
<link rel="alternate" type="text/html" href="https://blog.dich.ink/docker-learn-2/"/>
<id>https://blog.dich.ink/docker-learn-2/</id>
<summary type="html">&lt;p&gt;前言 了解支持 Docker 的核心技术将有助于更深入地了解 Docker 的工作原理,并更有效地使用该平台。&lt;&#x2F;p&gt;
</summary>
</entry>
<entry xml:lang="en">
<title>Docker学习笔记(一)</title>
<published>2024-03-25T00:00:00+00:00</published>

View File

@ -94,10 +94,9 @@
<div class="post-content">
<p>前言 Docker 是一个开源平台,通过将应用程序隔离到轻量级、可移植的容器中,自动执行应用程序的部署、扩展和管理。容器是独立的可执行单元,它封装了应用程序在各种环境中一致运行所需的所有必要依赖项、库和配置文件。</p>
<span id="continue-reading"></span>
<p><strong>什么是容器?</strong></p>
<span id="continue-reading"></span><h2 id="shen-me-shi-rong-qi"><strong>什么是容器?</strong></h2>
<p>容器是轻量级、可移植和隔离的软件环境,允许开发人员跨不同平台一致地运行和打包应用程序及其依赖项。它们有助于简化应用程序开发、部署和管理流程,同时确保应用程序始终如一地运行,而不管底层基础架构如何。</p>
<p><strong>容器是如何工作的?</strong></p>
<h2 id="rong-qi-shi-ru-he-gong-zuo-de"><strong>容器是如何工作的?</strong></h2>
<p>与传统的虚拟化不同,传统的虚拟化使用硬件资源模拟完整的操作系统,容器共享主机的操作系统内核,并利用轻量级虚拟化技术来创建隔离的进程。这种方法有几个好处,包括:</p>
<ul>
<li>
@ -113,23 +112,23 @@
<p>一致性:容器为应用程序的开发、测试和生产阶段提供了一致的环境,从而减少了“它在我的机器上工作”的问题。</p>
</li>
</ul>
<p><strong>容器和 Docker</strong></p>
<h2 id="rong-qi-he-docker"><strong>容器和 Docker</strong></h2>
<p>Docker 是一个简化创建、部署和管理容器过程的平台。它为开发人员和管理员提供了一组工具和 API 来管理容器化应用程序。使用 Docker您可以将应用程序代码、库和依赖项构建并打包到容器映像中该映像可以在任何支持 Docker 的环境中一致地分发和运行。</p>
<p><strong>对容器的需求</strong></p>
<h2 id="dui-rong-qi-de-xu-qiu"><strong>对容器的需求</strong></h2>
<p>在软件开发和部署领域,一致性和效率至关重要。在容器出现之前,开发人员在跨不同环境部署应用程序时经常面临挑战,包括:</p>
<ul>
<li>不一致的环境:开发人员通常在不同的环境中工作,与生产服务器相比,这些环境可能具有不同的配置和库。这会导致部署应用程序时出现兼容性问题。</li>
<li>资源利用效率低下:虚拟机 VM 被广泛用于克服环境不一致的问题。但是VM 需要为每个应用程序运行整个操作系统,从而使资源利用率低效。</li>
<li>流程缓慢和可伸缩性问题:传统的部署方法具有较慢的上市时间和扩展困难,这阻碍了软件更新的快速交付。</li>
</ul>
<p><strong>容器如何应对这些挑战:</strong></p>
<h2 id="rong-qi-ru-he-ying-dui-zhe-xie-tiao-zhan"><strong>容器如何应对这些挑战:</strong></h2>
<ul>
<li>一致的环境:容器通过将应用程序及其依赖项、配置和库捆绑到单个容器中来解决环境不一致问题。这保证了应用程序在不同环境中平稳运行。</li>
<li>高效利用资源:与虚拟机不同,容器共享底层系统资源和操作系统内核,这使得它们轻量级且高效。容器旨在使用更少的资源并更快地启动,从而提高资源利用率。</li>
<li>更快的流程和可扩展性:容器可以轻松创建、销毁和替换,从而加快开发和部署周期。由于可以在不消耗大量资源的情况下部署多个容器,因此扩展应用程序变得更加容易。</li>
</ul>
<p>总体而言,对于希望快速响应市场变化、提高资源效率并确保可靠和一致的软件交付的组织来说,容器已成为必不可少的工具。它们彻底改变了现代软件开发实践,并在部署和应用程序管理领域产生了持久的影响。</p>
<p><strong>裸机、虚拟机、容器</strong></p>
<h2 id="luo-ji-xu-ni-ji-rong-qi"><strong>裸机、虚拟机、容器</strong></h2>
<ul>
<li>裸机</li>
</ul>
@ -151,7 +150,7 @@ Docker 是 OCI 的创始成员之一,在制定容器格式和运行时标准
<li>运行时规范 runtime-spec它定义了通过隔离技术如容器引擎执行容器的规范。Docker 构建的容器运行时称为“containerd”指导了 OCI 运行时规范的开发。</li>
<li>镜像规范 image-spec它定义容器镜像格式用于描述容器的内容并可由兼容的运行时运行。Docker 的初始映像格式促成了 OCI 映像规范的创建。</li>
</ul>
<p><strong>Docker 和 OCI 之间的兼容性</strong></p>
<h2 id="docker-he-oci-zhi-jian-de-jian-rong-xing"><strong>Docker 和 OCI 之间的兼容性</strong></h2>
<p>Docker 始终致力于支持 OCI 规范,并且自参与 OCI 以来,不断更新其软件以符合 OCI 标准。Docker 的 containerd 运行时和映像格式与 OCI 规范完全兼容,使 Docker 容器能够由其他符合 OCI 标准的容器运行时运行,反之亦然。</p>
<p>总之Docker 和 Open Container Initiative 共同致力于维护容器行业的标准化和兼容性。Docker 在 OCI 规范的制定中发挥了重要作用,确保容器生态系统保持健康、可互操作,并可供整个行业的广泛用户和平台访问。</p>
@ -171,6 +170,13 @@ Docker 是 OCI 的创始成员之一,在制定容器格式和运行时标准
</a>
</span>
<span class="button next">
<a href="https://blog.dich.ink/docker-learn-2/">
<span class="button__text">Docker学习笔记(二)</span>&nbsp;
<span class="button__icon"></span>
</a>
</span>
</div>
</div>

View File

@ -0,0 +1,220 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Dich&#x27;blog</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5">
<meta name="robots" content="noodp"/>
<link rel="stylesheet" href="https://blog.dich.ink/style.css">
<link rel="stylesheet" href="https://blog.dich.ink/color/blue.css">
<link rel="stylesheet" href="https://blog.dich.ink/color/background_dark.css">
<link rel="stylesheet" href="https://blog.dich.ink/font-hack-subset.css">
<meta name="description" content="">
<meta property="og:description" content="">
<meta property="og:title" content="Dich'blog">
<meta property="og:type" content="article">
<meta property="og:url" content="https://blog.dich.ink/docker-learn-2/">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:description" content="">
<meta name="twitter:title" content="Dich'blog">
<meta property="twitter:domain" content="blog.dich.ink">
<meta property="twitter:url" content="https://blog.dich.ink/docker-learn-2/">
<link rel="alternate" type="application/atom+xml" title="RSS" href="https://blog.dich.ink/atom.xml">
</head>
<body class="">
<div class="container">
<header class="header">
<div class="header__inner">
<div class="header__logo">
<a href="https://blog.dich.ink" style="text-decoration: none;">
<div class="logo">
Dich&#x27;blog
</div>
</a>
</div>
</div>
<nav class="menu">
<ul class="menu__inner">
<li class="active"><a href="https://blog.dich.ink">blog</a></li>
<li><a href="https://blog.dich.ink/tags">tags</a></li>
<li><a href="https://blog.dich.ink/archive">archive</a></li>
<li><a href="https://blog.dich.ink/about">about me</a></li>
<li><a href="https://blog.dich.ink/links">links</a></li>
<li><a href="https://github.com/Dichgrem" target="_blank" rel="noopener noreferrer">github</a></li>
</ul>
</nav>
</header>
<div class="content">
<div class="post">
<h1 class="post-title"><a href="https://blog.dich.ink/docker-learn-2/">Docker学习笔记(二)</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-03-26
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/docker/">#Docker</a></span>
<div class="post-content">
<p>前言 了解支持 Docker 的核心技术将有助于更深入地了解 Docker 的工作原理,并更有效地使用该平台。</p>
<span id="continue-reading"></span><h2 id="linux-rong-qi-lxc"><strong>Linux 容器 LXC</strong></h2>
<p>Linux 容器 LXC 是 Docker 的基础。LXC 是一种轻量级虚拟化解决方案,它允许多个隔离的 Linux 系统在单个主机上运行而无需成熟的虚拟机管理程序。LXC 以安全和优化的方式有效地隔离应用程序及其依赖项。</p>
<h2 id="kong-zhi-zu-cgroups"><strong>控制组 cgroups</strong></h2>
<p>控制组 cgroups 是一项 Linux 内核功能,允许将 CPU、内存和 I/O 等资源分配给一组进程并对其进行管理。Docker 利用 cgroups 来限制容器使用的资源,并确保一个容器不会垄断主机系统的资源。</p>
<h2 id="lian-he-wen-jian-xi-tong-unionfs"><strong>联合文件系统 UnionFS</strong></h2>
<p>UnionFS 是一种文件系统服务允许在单个统一视图中叠加多个文件系统。Docker 使用 UnionFS 为镜像和容器创建分层方法,从而实现更好的通用文件共享和更快的容器创建。</p>
<h2 id="ming-ming-kong-jian"><strong>命名空间</strong></h2>
<p>命名空间是 Docker 用于在容器之间提供隔离的核心技术之一。在本节中,我们将简要讨论什么是命名空间以及它们是如何工作的。
在 Linux 内核中,命名空间是一种允许隔离各种系统资源的功能,使进程及其子进程能够查看与其他进程分开的系统子集。命名空间有助于创建抽象层,以使容器化进程彼此分离并与主机系统分离。</p>
<p>Linux 中有几种类型的命名空间,包括:</p>
<ul>
<li>
<p>PID进程 ID隔离进程 ID 号空间,这意味着容器中的进程只能看到自己的进程,而看不到主机或其他容器中的进程。</p>
</li>
<li>
<p>网络 NET为每个容器提供单独的网络堆栈视图包括其自己的网络接口、路由表和防火墙规则。</p>
</li>
<li>
<p>挂载 MNT隔离文件系统挂载点使每个容器都有自己的根文件系统并且挂载的资源仅显示在该容器中。</p>
</li>
<li>
<p>UTSUNIX 分时系统):允许每个容器拥有自己的主机名和域名,与其他容器和主机系统分开。</p>
</li>
<li>
<p>用户 USER在容器和主机之间映射用户和组标识符以便可以为容器中的资源设置不同的权限。</p>
</li>
<li>
<p>IPC进程间通信允许或限制不同容器中进程之间的通信。</p>
</li>
</ul>
<h2 id="dockerru-he-shi-yong-ming-ming-kong-jian"><strong>Docker如何使用命名空间</strong></h2>
<p>Docker 使用命名空间为容器创建隔离环境。启动容器时Docker 会为该容器创建一组新的命名空间。这些命名空间仅适用于容器内,因此在容器内运行的任何进程都可以访问与其他容器以及主机系统隔离的系统资源子集。</p>
<p>Docker 容器和 LXC 容器很相似,所提供的安全特性也差不多。当用 docker run 启动一个容器时,在后台 Docker 为容器创建了一个独立的命名空间和控制组集合。</p>
<p>命名空间提供了最基础也是最直接的隔离,在容器中运行的进程不会被运行在主机上的进程和其它容器发现和作用。</p>
<p>每个容器都有自己独有的网络栈,意味着它们不能访问其他容器的 sockets 或接口。不过,如果主机系统上做了相应的设置,容器可以像跟主机交互一样的和其他容器交互。当指定公共端口或使用 links 来连接 2 个容器时,容器就可以相互通信了(可以根据配置来限制通信的策略)。</p>
<p>从网络架构的角度来看,所有的容器通过本地主机的网桥接口相互通信,就像物理机器通过物理交换机通信一样。</p>
<p>那么,内核中实现命名空间和私有网络的代码是否足够成熟?</p>
<p>内核命名空间从 2.6.15 版本2008 年 7 月发布)之后被引入,数年间,这些机制的可靠性在诸多大型生产系统中被实践验证。</p>
<p>实际上,命名空间的想法和设计提出的时间要更早,最初是为了在内核中引入一种机制来实现 OpenVZ 的特性。 而 OpenVZ 项目早在 2005 年就发布了,其设计和实现都已经十分成熟。
通过利用命名空间Docker 确保容器是真正可移植的,并且可以在任何系统上运行,而不会受到同一主机上运行的其他进程或容器的冲突或干扰。</p>
<h2 id="kong-zhi-zu"><strong>控制组</strong></h2>
<p>cgroups 或控制组是一项 Linux 内核功能,负责实现资源的审计和限制。</p>
<p>它提供了很多有用的特性以及确保各个容器可以公平地分享主机的内存、CPU、磁盘 IO 等资源;当然,更重要的是,控制组确保了当容器内的资源使用产生压力时不会连累主机系统。</p>
<p>尽管控制组不负责隔离容器之间相互访问、处理数据和进程它在防止拒绝服务DDOS攻击方面是必不可少的。尤其是在多用户的平台比如公有或私有的 PaaS控制组十分重要。例如当某些应用程序表现异常的时候可以保证一致地正常运行和性能。</p>
<p>控制组机制始于 2006 年,内核从 2.6.24 版本开始被引入。</p>
<ul>
<li>资源隔离
cgroups 有助于将每个容器限制在一组特定的资源中,从而确保多个容器之间公平共享系统资源。这样可以更好地隔离不同容器,因此行为异常的容器不会消耗所有可用资源,从而对其他容器产生负面影响。</li>
<li>限制资源
使用 cgroups可以对容器使用的各种系统资源如 CPU、内存和 I/O设置限制。这有助于防止单个容器消耗过多资源并导致其他容器或主机系统的性能问题。</li>
<li>确定容器的优先级
通过分配不同的资源份额cgroups 允许您为某些容器提供优先级或优先级。在某些容器比其他容器更关键的情况下,或者在资源争用高的情况下,这可能很有用。</li>
<li>Monitoring 监测
cGroups 还提供用于监视单个容器的资源使用情况的机制,这有助于深入了解容器性能并识别潜在的资源瓶颈。</li>
</ul>
<h2 id="union-filesystems-lian-he-wen-jian-xi-tong"><strong>Union Filesystems 联合文件系统</strong></h2>
<p>联合文件系统,也称为 UnionFS在 Docker 的整体功能中起着至关重要的作用。联合文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承基于基础镜像没有父镜像可以制作各种具体的应用镜像。它是一种独特的文件系统类型它通过覆盖多个目录来创建虚拟的分层文件结构。UnionFS 无需修改原始文件系统或合并目录,而是支持将多个目录同时挂载到单个挂载点上,同时保持其内容独立。此功能在 Docker 的上下文中特别有用,因为它允许我们通过最小化重复和减小容器映像大小来管理和优化存储性能。</p>
<p>以下是联合文件系统的一些基本特性:</p>
<ul>
<li>
<p>分层结构UnionFS 构建了一个分层结构,该结构由多个只读层和一个顶部可写层组成。此结构通过仅更新可写层来有效处理更改,而只读层保留原始数据。</p>
</li>
<li>
<p>Copy-on-WriteCOW 机制是 UnionFS 不可或缺的功能。如果容器对现有文件进行更改,系统将在可写层中创建该文件的副本,而只读层中的原始文件保持不变。此过程将修改限制在最顶层,确保快速且资源节约的操作。</p>
</li>
<li>
<p>资源共享:联合文件系统允许多个容器在单独运行时共享公共基础层。此功能可防止资源重复并节省大量存储空间。</p>
</li>
<li>
<p>快速容器初始化:联合文件系统只需在现有只读层上创建新的可写层,就可以立即创建新容器。这种快速初始化减少了重复文件操作的开销,最终提高了性能。</p>
</li>
</ul>
<h2 id="docker-zhong-liu-xing-de-lian-he-wen-jian-xi-tong"><strong>Docker 中流行的联合文件系统</strong></h2>
<p>Docker 支持多个联合文件系统,便于构建和管理容器。一些流行的选项包括:</p>
<ul>
<li>AUFS高级多层统一文件系统AUFS 被广泛用作 Docker 存储驱动程序,可实现多层的高效管理。</li>
<li>OverlayFSOverlay FilesystemOverlayFS 是 Docker 支持的另一个联合文件系统。与 AUFS 相比,它使用简化的方法来创建和管理覆盖目录。</li>
<li>BtrfsB-Tree 文件系统Btrfs 是一种现代文件系统,除了快照和校验和等高级存储功能外,还提供与联合文件系统的兼容性。</li>
<li>ZFSZ 文件系统ZFS 是一个高容量且强大的存储平台,它提供联合文件系统功能以及数据保护、压缩和重复数据删除。</li>
</ul>
</div>
<div class="pagination">
<div class="pagination__title">
<span class="pagination__title-h">Thanks for reading! Read other posts?</span>
<hr />
</div>
<div class="pagination__buttons">
<span class="button previous">
<a href="https://blog.dich.ink/docker-learn-1/">
<span class="button__icon"></span>&nbsp;
<span class="button__text">Docker学习笔记(一)</span>
</a>
</span>
</div>
</div>
</div>
</div>
<footer class="footer">
<div class="footer__inner">
<div class="copyright">
<span>©
2024
Dichgrem</span>
<span class="copyright-theme">
<span class="copyright-theme-sep">:: </span>
Theme: <a href="https://github.com/pawroman/zola-theme-terminimal/">Terminimal</a> by pawroman
</span>
</div>
</div>
</footer>
<script async defer src="http://173.249.208.93:12345/tracker.js" data-website-id="cluckwxwg0005qf4n55m737sz"></script>
</div>
</body>
</html>

View File

@ -78,6 +78,40 @@
<div class="posts">
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/docker-learn-2/">Docker学习笔记(二)</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-03-26
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/docker/">#Docker</a></span>
<div class="post-content">
<p>前言 了解支持 Docker 的核心技术将有助于更深入地了解 Docker 的工作原理,并更有效地使用该平台。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/docker-learn-2/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/docker-learn-1/">Docker学习笔记(一)</a></h1>
<div class="post-meta-inline">
@ -176,42 +210,6 @@
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/talk-bios-uefi-mbr-gpt-grub/">BIOS-UEFI-MBR-GPT-GRUB</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-03-15
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/bios/">#BIOS</a>&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/grub/">#GRUB</a>&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/uefi/">#UEFI</a></span>
<div class="post-content">
<p>前言 在计算机领域系统引导和磁盘分区是至关重要的。本文将介绍BIOS与UEFIMBR与GPT以及它们之间的异同点。此外我们还会讨论与这些概念密切相关的引导加载程序——GRUB。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/talk-bios-uefi-mbr-gpt-grub/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="pagination">
<div class="pagination__buttons">

View File

@ -78,6 +78,42 @@
<div class="posts">
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/talk-bios-uefi-mbr-gpt-grub/">BIOS-UEFI-MBR-GPT-GRUB</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-03-15
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/bios/">#BIOS</a>&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/grub/">#GRUB</a>&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/uefi/">#UEFI</a></span>
<div class="post-content">
<p>前言 在计算机领域系统引导和磁盘分区是至关重要的。本文将介绍BIOS与UEFIMBR与GPT以及它们之间的异同点。此外我们还会讨论与这些概念密切相关的引导加载程序——GRUB。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/talk-bios-uefi-mbr-gpt-grub/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/terminal-console-shell/">TerminalConsole and Shell</a></h1>
<div class="post-meta-inline">
@ -179,41 +215,6 @@
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/routing/">路由器原理与组网</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-02-19
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/wifi/">#Wifi</a>&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/route/">#route</a></span>
<div class="post-content">
<p>前言 所谓无线路由,就是具备无线覆盖的路由器,即我们常用的有天线的家用路由器。而家庭组网中,除了选择一个最合适的上网方案,一部好的路由器也是非常重要;那么,如何科学的选购路由器呢?</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/routing/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="pagination">
<div class="pagination__buttons">

View File

@ -78,6 +78,41 @@
<div class="posts">
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/routing/">路由器原理与组网</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-02-19
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/wifi/">#Wifi</a>&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/route/">#route</a></span>
<div class="post-content">
<p>前言 所谓无线路由,就是具备无线覆盖的路由器,即我们常用的有天线的家用路由器。而家庭组网中,除了选择一个最合适的上网方案,一部好的路由器也是非常重要;那么,如何科学的选购路由器呢?</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/routing/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/local-isps-to-cn-report/">MJJ入门国内至国际骨干ISP线路整理</a></h1>
<div class="post-meta-inline">
@ -177,40 +212,6 @@
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/chatogpt/">如何高效地向 ChatGPT 提问</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-01-07
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/prompt/">#Prompt</a></span>
<div class="post-content">
<p>前言 本文翻译自《The Art of Asking ChatGPT for High-Quality Answers A Complete Guide to Prompt Engineering Techniques》</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/chatogpt/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="pagination">
<div class="pagination__buttons">

View File

@ -78,6 +78,40 @@
<div class="posts">
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/chatogpt/">如何高效地向 ChatGPT 提问</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-01-07
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/prompt/">#Prompt</a></span>
<div class="post-content">
<p>前言 本文翻译自《The Art of Asking ChatGPT for High-Quality Answers A Complete Guide to Prompt Engineering Techniques》</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/chatogpt/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/searching/">搜索引擎与爬虫</a></h1>
<div class="post-meta-inline">
@ -177,41 +211,6 @@
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/how-email-works/">电子邮件是如何工作的</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2023-12-24
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/mail/">#Mail</a>&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/smtp/">#SMTP</a></span>
<div class="post-content">
<p>前言 在互联网的日常使用中,电子邮件作为一项基础服务扮演着重要的角色。尽管在过去几十年里出现了各种新型的通讯方式,但电子邮件仍然保持着其不可替代的地位。了解电子邮件的工作原理,有助于更好地理解这一基础服务是如何运作的。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/how-email-works/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="pagination">
<div class="pagination__buttons">

View File

@ -78,6 +78,41 @@
<div class="posts">
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/how-email-works/">电子邮件是如何工作的</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2023-12-24
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/mail/">#Mail</a>&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/smtp/">#SMTP</a></span>
<div class="post-content">
<p>前言 在互联网的日常使用中,电子邮件作为一项基础服务扮演着重要的角色。尽管在过去几十年里出现了各种新型的通讯方式,但电子邮件仍然保持着其不可替代的地位。了解电子邮件的工作原理,有助于更好地理解这一基础服务是如何运作的。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/how-email-works/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/mechrev-keyboard/">机械革命键盘失灵拯救记</a></h1>
<div class="post-meta-inline">
@ -176,40 +211,6 @@
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/calling-cards/">流量卡购买与套路</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2023-08-24
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/calling-cards/">#Calling-cards</a></span>
<div class="post-content">
<p>前言 由于临近升学,校园网不尽人意,因此许多小伙伴有了买一张流量卡的计划。本文以三大运营商为例,说明常见流量卡的套路与选择。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/calling-cards/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="pagination">
<div class="pagination__buttons">

View File

@ -78,6 +78,40 @@
<div class="posts">
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/calling-cards/">流量卡购买与套路</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2023-08-24
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/calling-cards/">#Calling-cards</a></span>
<div class="post-content">
<p>前言 由于临近升学,校园网不尽人意,因此许多小伙伴有了买一张流量卡的计划。本文以三大运营商为例,说明常见流量卡的套路与选择。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/calling-cards/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/kgnl/">快过年了笑话大全</a></h1>
<div class="post-meta-inline">

View File

@ -29,6 +29,10 @@
<loc>https://blog.dich.ink/docker-learn-1/</loc>
<lastmod>2024-03-25</lastmod>
</url>
<url>
<loc>https://blog.dich.ink/docker-learn-2/</loc>
<lastmod>2024-03-26</lastmod>
</url>
<url>
<loc>https://blog.dich.ink/git/</loc>
<lastmod>2024-03-15</lastmod>

View File

@ -81,7 +81,7 @@ Dich&#x27;blog</title>
<div class="post">
<h1 class="post-title">
tag: #Docker
(1 post)
(2 posts)
</h1>
<a href="https://blog.dich.ink/tags">
@ -90,6 +90,16 @@ Dich&#x27;blog</title>
<ul><li class="post-list">
<a href="https://blog.dich.ink/docker-learn-2/">
<span class="post-date">2024-03-26</span>
:: <span class="post-list-title">Docker学习笔记(二)</span></a>
<span class="post-tags-inline">
::
<a class="post-tag" href="https://blog.dich.ink/tags/docker/">#Docker</a></span>
</li>
<li class="post-list">
<a href="https://blog.dich.ink/docker-learn-1/">
<span class="post-date">2024-03-25</span>
:: <span class="post-list-title">Docker学习笔记(一)</span></a>

View File

@ -102,7 +102,7 @@
<li class="tag-list">
<a href="https://blog.dich.ink/tags/docker/">
Docker (1 post)
Docker (2 posts)
</a>
</li>