虚拟化环境探索:容器与软件包管理
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.
-
执行上述命令时,实际上创建了一个名为
Hello-World的容器。输入docker ps -a并按 Enter 键查看该容器的信息。 - 从上述命令的输出中找到容器 ID 号并记录下来。
-
输入
docker rm Container-ID并按 Enter 键删除Hello-World容器,其中Container-ID是上一步记录的号码。 -
在 CentOS 系统上启动一个 Ubuntu 容器,输入
docker run -it ubuntu bash并按 Enter 键。该命令不仅会启动容器,还会进入容器。-it选项允许进入交互模式并使用伪终端。进入容器后,提示符将类似于:
root@8a7a39343829:/#
-
在容器提示符下,输入
whoami并按 Enter 键,会发现以 root 用户身份登录。 -
输入
pwd并按 Enter 键查看在容器虚拟目录系统中的位置,应该会看到位于目录结构的根目录/。 -
输入
cat /etc/debian_version并按 Enter 键查看正在运行的 Ubuntu 版本,并记录结果。 -
输入
exit并按 Enter 键离开 Ubuntu 容器,提示符会发生变化。 -
输入
whoami并按 Enter 键再次确认已退出容器,此时应该以sysadmin账户登录。 -
输入
docker ps -a并按 Enter 键查看可用的容器,应该只看到一个容器,记录其容器 ID。 -
输入
docker start Container-ID并按 Enter 键启动上一步查看的容器,其中Container-ID是记录的号码。 -
输入
docker attach Container-ID并按 Enter 键重新进入 Ubuntu 容器,提示符会再次变化。 -
在容器提示符下,输入
whoami并按 Enter 键,应该会看到以 root 用户身份登录。 -
输入
cat /etc/debian_version并按 Enter 键查看正在运行的 Ubuntu 版本,检查版本信息是否与第 10 步记录的一致。 - 如果需要,可以在容器中进行一些探索,尝试使用不同的命令并查看 Linux 虚拟目录结构。
-
输入
exit并按 Enter 键离开 Ubuntu 容器,提示符会发生变化。 -
输入
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.
-
执行上述命令时,实际上创建了一个名为
Hello-World的容器。输入sudo docker ps -a并按 Enter 键查看该容器的信息。 - 从上述命令的输出中找到容器 ID 号并记录下来。
-
输入
sudo docker rm Container-ID并按 Enter 键删除Hello-World容器,其中Container-ID是上一步记录的号码。 -
在 Ubuntu 系统上启动一个 CentOS 容器,输入
sudo docker run -it centos bash并按 Enter 键。该命令不仅会启动容器,还会进入容器。进入容器后,提示符将类似于:
[root@8a7a39343829 /]#
-
在容器提示符下,输入
whoami并按 Enter 键,会发现以 root 用户身份登录。 -
输入
pwd并按 Enter 键查看在容器虚拟目录系统中的位置,应该会看到位于目录结构的根目录/。 -
输入
cat /etc/redhat-release并按 Enter 键查看正在运行的 CentOS 版本,并记录结果。 -
输入
exit并按 Enter 键离开 CentOS 容器,提示符会发生变化。 -
输入
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 包系统解决软件包依赖和隔离问题。希望这些知识和操作流程能帮助你更好地管理和优化虚拟化环境。
容器与Snap包管理详解
超级会员免费看
1397

被折叠的 条评论
为什么被折叠?



