45、虚拟化环境探索:容器与软件包管理

容器与Snap包管理详解

虚拟化环境探索:容器与软件包管理

1. 虚拟化环境基础

在虚拟化环境中,如果发现所需的虚拟机管理程序模块未加载,可以使用 modprobe 命令插入它们。例如,加载所需的 KVM 虚拟机管理程序模块的命令如下:

sudo modprobe kvm-amd

同时,要确保系统启动固件中启用了虚拟化功能,否则即使服务器具备运行虚拟机的所有条件,也无法正常工作。可以查看系统固件文档来确认并启用虚拟化。

2. 容器概述

容器是虚拟实体,与虚拟机不同,其用途也不同。虚拟机提供完整的客户操作系统,而容器通常专注于单个应用程序、应用程序栈或环境。容器收集运行应用程序所需的所有文件,包括运行时文件、库文件、数据库文件和特定于操作系统的文件,使应用程序能够独立运行,所需的一切都存储在容器内。

容器由容器引擎管理,而非虚拟机管理程序。物理机的操作系统由多个容器共享,但每个容器都有自己的二进制文件和所需的库来支持其应用程序、应用程序栈或环境。

3. 容器类型
  • 应用容器 :专注于单个应用程序或应用程序栈,如 Web 服务器。在开发和运维(DevOps)中广泛使用,可消除生产和开发环境的差异,为应用程序用户提供几乎无停机时间的体验,因此在持续软件部署环境中很受欢迎。
  • 操作系统容器 :系统管理员也可以利用容器。可以使用提供完整功能的 Linux 操作系统空间且与主机隔离的容器。系统管理员可以使用容器在各种 Linux 发行版上测试应用程序和所需的库,或者在升级主机系统发行版之前,在升级后的 Linux 发行版上测试环境。与虚拟机相比,容器部署更快、更轻量级。

需要注意的是,虚拟化应用程序通常不会使其运行更快,不应将其作为将应用程序迁移到虚拟化环境的主要动机。

4. 容器软件

在 Linux 中,常用的两种容器软件如下:
| 容器软件 | 描述 |
| ---- | ---- |
| LXC | 作为创建容器的开源标准开发。每个 LXC 容器比标准轻量级应用容器更复杂,但不如完整虚拟机重。LXC 容器包含自己的基本操作系统,可直接与主机系统硬件交互,但仍需要主机操作系统才能运行。 |
| Docker | 由 Docker 公司开发并作为开源项目发布。非常轻量级,允许在同一主机 Linux 系统上运行多个容器。使用单独的守护进程来管理安装的 Docker 镜像,该守护进程监听来自各个容器以及 Docker 命令行界面的请求。 |

5. 在 Linux 系统上试用 Docker

以下是在 CentOS 发行版上安装 Docker 引擎并尝试使用基本命令管理容器环境的步骤:
1. 使用 sysadmin 账户和密码登录 CentOS Linux 系统。
2. 安装 docker 包:
- 如果 sysadmin 账户未配置使用 sudo ,使用 su - 命令和 root 密码登录 root 账户,输入 dnf install docker 并按 Enter 键。
- 如果 sysadmin 账户配置使用 sudo ,输入 sudo dnf install docker 并按 Enter 键。
- 输入 y 回答任何问题,然后按 Enter 键。
- 如果使用 root 账户进行权限提升,输入 exit 并按 Enter 键退出该账户。
3. 安装完成后,输入 docker run hello-world 并按 Enter 键测试 Docker。可能会看到一些错误消息,但当收到类似以下消息及其他信息时,说明安装成功:

Hello from Docker! 
This message shows that your installation appears to be working correctly. 
  1. 执行上述命令时,实际上创建了一个名为 Hello-World 的容器。输入 docker ps -a 并按 Enter 键查看该容器的信息。
  2. 从上述命令的输出中找到容器 ID 号并记录下来。
  3. 输入 docker rm Container-ID 并按 Enter 键删除 Hello-World 容器,其中 Container-ID 是上一步记录的号码。
  4. 在 CentOS 系统上启动一个 Ubuntu 容器,输入 docker run -it ubuntu bash 并按 Enter 键。该命令不仅会启动容器,还会进入容器。 -it 选项允许进入交互模式并使用伪终端。进入容器后,提示符将类似于:
root@8a7a39343829:/#
  1. 在容器提示符下,输入 whoami 并按 Enter 键,会发现以 root 用户身份登录。
  2. 输入 pwd 并按 Enter 键查看在容器虚拟目录系统中的位置,应该会看到位于目录结构的根目录 /
  3. 输入 cat /etc/debian_version 并按 Enter 键查看正在运行的 Ubuntu 版本,并记录结果。
  4. 输入 exit 并按 Enter 键离开 Ubuntu 容器,提示符会发生变化。
  5. 输入 whoami 并按 Enter 键再次确认已退出容器,此时应该以 sysadmin 账户登录。
  6. 输入 docker ps -a 并按 Enter 键查看可用的容器,应该只看到一个容器,记录其容器 ID。
  7. 输入 docker start Container-ID 并按 Enter 键启动上一步查看的容器,其中 Container-ID 是记录的号码。
  8. 输入 docker attach Container-ID 并按 Enter 键重新进入 Ubuntu 容器,提示符会再次变化。
  9. 在容器提示符下,输入 whoami 并按 Enter 键,应该会看到以 root 用户身份登录。
  10. 输入 cat /etc/debian_version 并按 Enter 键查看正在运行的 Ubuntu 版本,检查版本信息是否与第 10 步记录的一致。
  11. 如果需要,可以在容器中进行一些探索,尝试使用不同的命令并查看 Linux 虚拟目录结构。
  12. 输入 exit 并按 Enter 键离开 Ubuntu 容器,提示符会发生变化。
  13. 输入 docker rm Container-ID 并按 Enter 键删除 Ubuntu 容器,其中 Container-ID 是第 13 步记录的号码。
6. 容器编排

由于容器在计算领域相对较新,容器包常与 Linux 编排包混淆。以下是几种常见的容器编排系统:
- Kubernetes :由 Google 最初设计和使用的开源编排系统,被许多人视为事实上的标准。具有高度可扩展性、容错性且易于学习。每个由 Kubernetes 管理的服务或应用程序主要包含以下组件:
- 集群服务:使用标记语言文件来部署和管理应用程序 Pod。
- Pod:包含一个或多个正在运行的应用程序容器。
- 工作节点:使用 kubelet (代理)与集群服务通信的 Pod 主机系统。
- YAML 文件:包含特定应用程序容器的自动化配置管理和所需状态设置。
- Docker Swarm :Docker 创建的编排系统,用于管理 Docker 容器集群。可以监控集群的健康状况,并在集群内的容器出现故障时将集群恢复到所需状态。在部署额外的 Docker 容器时,通常比 Kubernetes 更快。适用于刚接触编排且熟悉 Docker 工具的用户。
- Mesos :即 Apache Mesos,是加州大学伯克利分校创建的分布式系统内核,类似于 Linux 内核,但操作级别更高。它本身不是容器编排系统,但与 Marathon 结合可提供一种容器编排系统框架,具有高可用性和健康监控集成功能,可支持 Mesos 和 Docker 容器。

7. 软件包管理

传统软件包管理存在一些问题,例如安装 PostgreSQL 时需要安装多个依赖包,如果依赖项不可用或版本错误,数据库可能无法正常或安全运行,且数据库服务器运行时未与系统上的其他软件和服务完全隔离。

为了解决这些问题,出现了容器化的软件包管理系统,如 Snap 和 Flatpak。这里主要介绍 Snap 包系统。

8. Ubuntu Snap 包系统
  • Snap 包 :以 Snap 格式的软件包称为 snaps,专注于单个软件应用程序。下载为单个自包含的压缩包文件,包含应用程序运行所需的所有二进制文件和依赖项。Snaps 独立于发行版,无需修改即可在不同的 Linux 发行版上运行,但并非所有 Linux 发行版都支持 Snap。此外,运行从 snap 包安装的应用程序时,它在沙箱中运行,与 Linux 系统上的其他数据和应用程序隔离,包括其他正在运行的 snaps。
  • Snap 通道 :用于管理系统应用程序时,可帮助维护应用程序的旧版本。Snap 通道是 snap 交付途径,可通过设置通道更新 snap 包,也可根据需要切换通道。通道名称采用 track/risk/branch 格式, track 通常设置为 latest 用于正常生产更新,或 insider 供应用程序开发人员使用; risk 分为 stable candidate beta edge 等; branch 是用于快速修复的临时通道名称,通常在 30 天无更新后关闭。
  • Snap 守护进程 snapd 是 Snap 包管理框架的包名,也是 snap 守护进程的名称。其主要职责之一是检查 snaps 通道的应用程序更新,通常每天进行多次检查。
  • snap 命令 :是管理 snaps 的入口。使用该命令行界面,可以安装和删除 snaps,查看可用的 snaps 并获取详细信息,如当前的 snap 通道和发布者,甚至可以在安装后管理整个 Snap 框架。
9. 安装 Snap 框架
  • Ubuntu :现代 Ubuntu 发行版预装了 Snap 包管理框架。可以使用 dpkg -s 命令检查 snapd 包的状态:
$ dpkg -s snapd
Package: snapd
Status: install ok installed
  • CentOS :需要安装 epel 存储库,因为 snapd 在标准存储库中不可用。以下是使用 root 账户安装的示例:
# dnf install epel-release
Is this ok [y/N]: y
Downloading Packages:
Installed:
  epel-release-8-8.el8.noarch
Complete!
# dnf install snapd
Install  3 Packages
Upgrade  2 Packages
Total download size: 39 M
Is this ok [y/N]: y
Importing GPG key [...]:
Userid     : "Fedora EPEL [...]"
Fingerprint: [...]
From       : [...]
Is this ok [y/N]: y
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Installed:
  snap-confine-2.49-2.el8.x86_64
  snapd-2.49-2.el8.x86_64
  snapd-selinux-2.49-2.el8.noarch
Complete!

安装完成后,使用 systemctl 命令启用并启动 snapd

# systemctl enable snapd
# systemctl start snapd
10. 使用基本命令

snap 命令有许多子命令,以下是一些基本子命令的说明:
| 子命令 | 描述 |
| ---- | ---- |
| find query | 在 snap 商店中搜索描述中包含 query 的 snaps。 |
| info snaps-name | 显示名为 snaps-name 的 snap 包的详细信息。 |
| install snaps-name | 安装名为 snaps-name 的 snap 包,需要使用超级用户权限。 |
| list | 显示已安装的 snaps 列表,包括其版本、修订号、通道、发布者和任何注释。 |
| remove snaps-name | 卸载名为 snaps-name 的 snap 包,需要使用超级用户权限。 |

11. 在 Linux 系统上使用 Snap

以下是在 Ubuntu 发行版上安装 Docker snap 并使用基本命令管理容器环境的步骤:
1. 使用 sysadmin 账户和密码登录 Ubuntu Linux 系统。
2. 输入 sudo snap install docker 并按 Enter 键安装 Docker snap 包。如果提示输入密码,输入 sysadmin 账户的密码。如果有询问,输入 y 并按 Enter 键。
3. 安装完成后,输入 sudo docker run hello-world 并按 Enter 键测试 Docker。可能会看到一些错误消息,但当收到类似以下消息及其他信息时,说明安装成功:

Hello from Docker! 
This message shows that your installation appears to be working correctly. 
  1. 执行上述命令时,实际上创建了一个名为 Hello-World 的容器。输入 sudo docker ps -a 并按 Enter 键查看该容器的信息。
  2. 从上述命令的输出中找到容器 ID 号并记录下来。
  3. 输入 sudo docker rm Container-ID 并按 Enter 键删除 Hello-World 容器,其中 Container-ID 是上一步记录的号码。
  4. 在 Ubuntu 系统上启动一个 CentOS 容器,输入 sudo docker run -it centos bash 并按 Enter 键。该命令不仅会启动容器,还会进入容器。进入容器后,提示符将类似于:
[root@8a7a39343829 /]#
  1. 在容器提示符下,输入 whoami 并按 Enter 键,会发现以 root 用户身份登录。
  2. 输入 pwd 并按 Enter 键查看在容器虚拟目录系统中的位置,应该会看到位于目录结构的根目录 /
  3. 输入 cat /etc/redhat-release 并按 Enter 键查看正在运行的 CentOS 版本,并记录结果。
  4. 输入 exit 并按 Enter 键离开 CentOS 容器,提示符会发生变化。
  5. 输入 whoami 并按 Enter 键再次确认已退出容器,此时应该以 sysadmin 账户登录。

通过以上步骤,我们可以在 Linux 系统中有效地使用容器和软件包管理工具,提高开发和运维的效率。

12. 查看 snap 目录

安装并试用 snap 包后,可以查看其文件位置。使用 find 命令示例如下:

$ sudo find / -name cvescan
/snap/bin/cvescan
/snap/cvescan
/snap/cvescan/281/bin/cvescan
/snap/cvescan/281/lib/python3.6/site-packages/cvescan
/home/sysadmin/snap/cvescan
/var/snap/cvescan

安装 snaps 时,其文件位置与传统包略有不同:
- 二进制文件存储在 /snap/bin/ 目录。
- 所需的库和配置文件位于 /snap/snap-name/ 目录树中。
- 与 snap 应用程序关联的用户数据存储在用户 $HOME 目录下的 snap 子目录中。
- 非 snap 应用程序通常存储在 /var/ 目录中的可变数据,对于 snaps 则存储在 /var/snap/snap-name/ 目录中。

需要注意的是,snaps 是单个自包含的压缩包文件,不会被解包,始终保持压缩格式,存放在 /var/lib/snapd/ 目录,例如:

$ ls -Fw 50 /var/lib/snapd/snaps/
core18_1988.snap  lxd_19647.snap
core18_1997.snap  partial/
cvescan_281.snap  snapd_11402.snap
lxd_19188.snap    snapd_11588.snap

snap 包文件具有 .snap 文件扩展名,包名中的数字是修订号,可以使用 snap list 命令查看:

$ snap list cvescan
Name     Version  Rev  Tracking       Publisher   Notes
cvescan  2.5.0    281  latest/stable  canonical✓  -

使用 snap list 命令还可以查看 cvescan 应用程序设置的更新通道,这里使用的是 latest/stable snap 通道。

13. 构建 Snaps

创建 snaps 的工具和框架是 snapcraft 。如果既是系统管理员又是软件发布者,可以访问 snapcraft.io/docs/snapcraft-overview 了解更多信息,开始构建 snaps 并将其加载到 snap 商店。

14. Snap 商店

可以将 snap 商店视为一种包存储库,它是发布者共享 snaps 和系统管理员查看可用软件的中心位置。snap 商店是一个基于 GUI 的应用程序,需要安装在 Linux 桌面系统上使用,但也可以使用 snap 命令在无 GUI 的服务器上查看可用的 snaps。

不过,使用 snap 也有一些潜在的缺点。例如,无法停止 snap 通道上的更新,只能延迟;更新 snap 时会收到全新的 snap 包,有些包可能较大。此外,虽然发布者可能是一个团队,但通常是个人,与发行版维护的软件包相比,代码审查可能不够严格,需要注意安全漏洞问题。

15. 总结与操作流程回顾

为了更清晰地展示整个虚拟化环境探索过程,下面总结关键操作流程。

15.1 Docker 安装与使用流程
graph LR
    A[登录 CentOS 系统] --> B[安装 docker 包]
    B --> C[测试 Docker]
    C --> D[创建 Hello-World 容器]
    D --> E[查看容器信息]
    E --> F[记录容器 ID]
    F --> G[删除 Hello-World 容器]
    G --> H[启动 Ubuntu 容器]
    H --> I[进入容器操作]
    I --> J[离开容器]
    J --> K[确认退出容器]
    K --> L[查看可用容器]
    L --> M[启动容器]
    M --> N[重新进入容器]
    N --> O[查看 Ubuntu 版本]
    O --> P[再次离开容器]
    P --> Q[删除 Ubuntu 容器]
15.2 Snap 安装与使用流程
graph LR
    A[登录 Ubuntu 系统] --> B[安装 Docker snap 包]
    B --> C[测试 Docker]
    C --> D[创建 Hello-World 容器]
    D --> E[查看容器信息]
    E --> F[记录容器 ID]
    F --> G[删除 Hello-World 容器]
    G --> H[启动 CentOS 容器]
    H --> I[进入容器操作]
    I --> J[查看 CentOS 版本]
    J --> K[离开容器]
    K --> L[确认退出容器]

通过以上对虚拟化环境中容器和软件包管理的详细介绍,我们了解了从虚拟机管理程序模块加载、容器类型与软件、容器编排系统,到软件包管理和 Snap 包系统的完整知识体系。在实际操作中,我们可以根据不同的需求和场景,灵活运用这些技术,提高系统的管理效率和软件的部署灵活性。例如,在开发和运维中使用应用容器和 Docker 进行快速部署和测试;在系统管理中使用 Snap 包系统解决软件包依赖和隔离问题。希望这些知识和操作流程能帮助你更好地管理和优化虚拟化环境。

内容概要:本文设计了一种基于PLC的全自动洗衣机控制系统内容概要:本文设计了一种,采用三菱FX基于PLC的全自动洗衣机控制系统,采用3U-32MT型PLC作为三菱FX3U核心控制器,替代传统继-32MT电器控制方式,提升了型PLC作为系统的稳定性自动化核心控制器,替代水平。系统具备传统继电器控制方式高/低水,实现洗衣机工作位选择、柔和过程的自动化控制/标准洗衣模式切换。系统具备高、暂停加衣、低水位选择、手动脱水及和柔和、标准两种蜂鸣提示等功能洗衣模式,支持,通过GX Works2软件编写梯形图程序,实现进洗衣过程中暂停添加水、洗涤、排水衣物,并增加了手动脱水功能和、脱水等工序蜂鸣器提示的自动循环控制功能,提升了使用的,并引入MCGS组便捷性灵活性态软件实现人机交互界面监控。控制系统通过GX。硬件设计包括 Works2软件进行主电路、PLC接梯形图编程线关键元,完成了启动、进水器件选型,软件、正反转洗涤部分完成I/O分配、排水、脱、逻辑流程规划水等工序的逻辑及各功能模块梯设计,并实现了大形图编程。循环小循环的嵌; 适合人群:自动化套控制流程。此外、电气工程及相关,还利用MCGS组态软件构建专业本科学生,具备PL了人机交互C基础知识和梯界面,实现对洗衣机形图编程能力的运行状态的监控操作。整体设计涵盖了初级工程技术人员。硬件选型、; 使用场景及目标:I/O分配、电路接线、程序逻辑设计及组①掌握PLC在态监控等多个方面家电自动化控制中的应用方法;②学习,体现了PLC在工业自动化控制中的高效全自动洗衣机控制系统的性可靠性。;软硬件设计流程 适合人群:电气;③实践工程、自动化及相关MCGS组态软件PLC的专业的本科生、初级通信联调工程技术人员以及从事;④完成PLC控制系统开发毕业设计或工业的学习者;具备控制类项目开发参考一定PLC基础知识。; 阅读和梯形图建议:建议结合三菱编程能力的人员GX Works2仿真更为适宜。; 使用场景及目标:①应用于环境MCGS组态平台进行程序高校毕业设计或调试运行验证课程项目,帮助学生掌握PLC控制系统的设计,重点关注I/O分配逻辑、梯形图实现方法;②为工业自动化领域互锁机制及循环控制结构的设计中类似家电控制系统的开发提供参考方案;③思路,深入理解PL通过实际案例理解C在实际工程项目PLC在电机中的应用全过程。控制、时间循环、互锁保护、手动干预等方面的应用逻辑。; 阅读建议:建议结合三菱GX Works2编程软件和MCGS组态软件同步实践,重点理解梯形图程序中各环节的时序逻辑互锁机制,关注I/O分配硬件接线的对应关系,并尝试在仿真环境中调试程序以加深对全自动洗衣机控制流程的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值