【菜鸟不菜系列】Linux 基础教程:第十一章:容器化与虚拟化

Linux 基础教程:从零到进阶,成为最强管理员

由 linux.mba「Most Badass Admin」最强管理员社区撰写

第三部分:Linux 高级应用

第十一章: 容器化与虚拟化

11.1 Docker 基础与容器管理

:red_question_mark: 什么是 Docker?

你有没有想过,如果每次安装一个新的服务(比如数据库、Web 服务器等),都得配置一堆环境、依赖,做起来复杂且容易出错?Docker 就是为了解决这个问题的。

Docker 是一个容器化平台,它通过容器技术将应用和它的依赖环境打包在一起,容器就像一个隔离的小“沙盒”,确保在任何地方运行都能一致。

:white_check_mark: Docker 的核心概念

  • 容器:类似于虚拟机,但比虚拟机更轻量。容器不需要虚拟整个操作系统,它只是应用和依赖环境的一种封装。
  • 镜像:是容器的模板,它定义了容器里运行的应用环境。镜像可以从 Docker Hub(一个公共的镜像仓库)下载,或者自己创建。
  • Docker 引擎:是管理容器和镜像的工具,可以理解为“容器的管理器”。

:white_check_mark: 安装 Docker

Ubuntu:

sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce -y

CentOS:

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce -y

安装完成后启动 Docker:

sudo systemctl start docker
sudo systemctl enable docker

:white_check_mark: Docker 常用命令

  • 查看 Docker 版本
docker --version
  • 查看 Docker 运行状态
sudo systemctl status docker
  • 拉取镜像
docker pull ubuntu

这会从 Docker Hub 拉取最新的 Ubuntu 镜像。镜像相当于一个“程序包”,你可以将它比作是操作系统的 ISO 文件。

  • 查看本地镜像
docker images

:white_check_mark: 运行一个容器

假设你刚拉取了 Ubuntu 镜像,你想运行一个容器。只需要这样简单的命令:

docker run -it ubuntu /bin/bash
  • -it:这是两个选项,-i 让容器保持打开,-t 让容器分配一个伪终端。
  • ubuntu:指定运行的镜像。
  • /bin/bash:指定启动容器后要执行的命令,这里是打开 bash 命令行。

运行命令后,你会进入容器的命令行环境,你可以在里面执行任何命令。

:white_check_mark: 停止和删除容器

  • 查看正在运行的容器
docker ps
  • 停止一个容器
docker stop <容器ID>
  • 删除一个容器
docker rm <容器ID>

注意:删除容器前要先停止它。


11.2 创建与管理 Docker 容器

:red_question_mark: 创建容器的步骤是什么?

  1. 拉取镜像:从 Docker Hub 上下载你需要的镜像(比如 Web 服务器 Nginx、数据库 MySQL 等)。
  2. 运行容器:根据你的需求运行容器,运行时可以指定端口映射、数据卷挂载等。
  3. 停止容器:通过 docker stop 命令停止运行中的容器。
  4. 删除容器:通过 docker rm 命令删除容器。

:white_check_mark: 使用 Docker 创建 Web 服务器容器(以 Nginx 为例)

我们来一步步创建一个简单的 Web 服务器容器,运行 Nginx。

  • 拉取 Nginx 镜像
docker pull nginx
  • 运行 Nginx 容器
docker run -d -p 8080:80 --name mynginx nginx

解释:

  • -d:让容器在后台运行。
  • -p 8080:80:将本地的 8080 端口映射到容器的 80 端口。
  • --name mynginx:给容器起个名字,方便以后管理。

此时,如果你在浏览器中访问 http://localhost:8080,你会看到默认的 Nginx 欢迎页面。

  • 查看容器状态
docker ps
  • 停止并删除容器
docker stop mynginx
docker rm mynginx

11.3 Kubernetes 简介

:red_question_mark: 什么是 Kubernetes?

在上面我们讲到的 Docker 里,每次创建一个容器都需要手动操作。这对于大规模的系统就不太适用了。如果你有成百上千的容器要管理,手动操作就很麻烦,这时 Kubernetes 就发挥作用了。

Kubernetes 是一个开源的容器编排平台,帮助你管理大量的容器,自动化地部署、扩展和管理应用程序。

:white_check_mark: Kubernetes 主要功能

  • 自动部署和回滚:你只需要定义好容器的配置,Kubernetes 会自动将其部署到集群中。如果有问题,它还可以回滚到上一个正常状态。
  • 负载均衡:Kubernetes 会根据需要,自动将请求分配到不同的容器上,确保系统的高可用性。
  • 服务发现和集成:容器与容器之间的通信可以由 Kubernetes 自动配置,不需要你手动设置。

:white_check_mark: Kubernetes 的核心概念

  • Pod:Kubernetes 的最小部署单元,一个 Pod 是一个或多个容器的集合,它们共享同一个网络和存储。
  • Node:Kubernetes 集群中的一个工作节点,可以是物理机,也可以是虚拟机。每个 Node 上可以运行多个 Pod。
  • Service:定义一个负载均衡器,允许不同的 Pod 之间进行通信。

11.4 虚拟化技术:使用 KVM 和 VirtualBox

:red_question_mark: 什么是虚拟化?

虚拟化技术允许你在一台物理主机上运行多个虚拟机(VM),每个虚拟机都像是一个独立的计算机,拥有自己的操作系统、硬件资源和网络配置。这种技术对于服务器资源的优化利用、软件测试、开发环境的搭建非常有用。

:white_check_mark: KVM(Kernel-based Virtual Machine)

KVM 是 Linux 内核的一部分,是一种开源的虚拟化技术。通过 KVM,你可以在支持虚拟化的硬件上创建虚拟机,它提供了对 Linux 的完美支持,同时也支持其他操作系统如 Windows 和 BSD。

:white_check_mark: 安装 KVM

在 Ubuntu 上安装 KVM:

sudo apt update
sudo apt install qemu-kvm libvirt-bin bridge-utils virt-manager -y

在 CentOS 上安装 KVM:

sudo yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install -y

安装完后,启动并启用 libvirtd 服务,这个服务是管理虚拟机的关键:

sudo systemctl start libvirtd
sudo systemctl enable libvirtd

:white_check_mark: 创建虚拟机

你可以使用 virt-manager(图形界面)或者命令行工具 virt-install 来创建虚拟机。

使用 virt-install 创建虚拟机:

virt-install \
  --name test-vm \
  --vcpus 2 \
  --memory 2048 \
  --cdrom /path/to/iso/file.iso \
  --disk path=/var/lib/libvirt/images/test-vm.qcow2,size=10 \
  --os-type linux \
  --os-variant ubuntu20.04 \
  --network bridge=virbr0 \
  --graphics vnc \
  --noautoconsole

解释:

  • --name:虚拟机名称。
  • --vcpus:虚拟机 CPU 数量。
  • --memory:虚拟机内存大小(单位:MB)。
  • --cdrom:安装镜像路径。
  • --disk:磁盘文件路径及大小。
  • --os-type:操作系统类型。
  • --network bridge:网络类型,bridge=virbr0 是一个默认的网络桥接模式。
  • --graphics vnc:使用 VNC 显示图形界面。

如果一切顺利,虚拟机会启动并开始安装操作系统。

:white_check_mark: 管理虚拟机

  • 查看虚拟机状态
sudo virsh list --all
  • 启动虚拟机
sudo virsh start test-vm
  • 停止虚拟机
sudo virsh shutdown test-vm

:white_check_mark: VirtualBox

VirtualBox 是由 Oracle 提供的一个免费的开源虚拟化软件,适用于多种操作系统。它不依赖于硬件虚拟化支持,所以即使是普通的计算机,也能运行 VirtualBox。

:white_check_mark: 安装 VirtualBox

在 Ubuntu 上安装 VirtualBox:

sudo apt update
sudo apt install virtualbox -y

在 CentOS 上安装 VirtualBox:

sudo yum install https://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox-6.1-6.1.20_143896_el7-1.x86_64.rpm

安装完成后,启动 VirtualBox 图形界面即可创建虚拟机。

:white_check_mark: 创建虚拟机

  1. 打开 VirtualBox,点击 “新建” 按钮,选择操作系统类型和版本。
  2. 设置虚拟机的内存大小、硬盘大小等。
  3. 安装操作系统:你可以选择安装镜像或从已有的虚拟机镜像启动。

:white_check_mark: 使用 VirtualBox 启动、停止虚拟机

  • 启动虚拟机
VBoxManage startvm "test-vm" --type headless
  • 停止虚拟机
VBoxManage controlvm "test-vm" poweroff
  • 查看虚拟机状态
VBoxManage list runningvms

:white_check_mark: 虚拟机管理工具

VirtualBox 还提供了很多命令行工具(如 VBoxManage)来管理虚拟机,设置网络、存储等配置。


:white_check_mark: KVM 和 VirtualBox 的区别

特性 KVM (Kernel-based Virtual Machine) VirtualBox
类型 基于 Linux 内核 独立的虚拟化软件
支持平台 仅支持 Linux 和一些开源操作系统 Windows、Linux、Mac
性能 性能较高,适合生产环境 适合开发和测试环境
管理方式 命令行或使用 virt-manager 图形界面和命令行
硬件要求 需要支持虚拟化的硬件 无需硬件虚拟化支持
使用难度 高,适合生产环境 低,适合个人和开发者

:white_check_mark: 总结

  • Docker:适用于快速部署、轻量化的应用。适合在同一台机器上运行多个应用或服务,避免环境依赖问题。
  • KVM:适合大规模的虚拟化,可以在物理服务器上虚拟出多个虚拟机。
  • VirtualBox:适合个人开发和测试环境,简单易用,适合虚拟化小规模的环境。