3819 字
19 分钟

Linux虚拟化和容器命令和技巧

2026-02-06
浏览量 加载中...

Linux虚拟化和容器命令和技巧#

虚拟化和容器概述#

虚拟化和容器技术是现代Linux系统中非常重要的技术,它们可以帮助用户更高效地利用硬件资源、隔离应用环境、简化部署和管理。本文将介绍Linux系统中常用的虚拟化和容器命令和技巧,帮助用户更好地理解和使用这些技术。

虚拟化技术#

KVM虚拟化#

KVM(Kernel-based Virtual Machine)是Linux内核的一个模块,它允许Linux系统作为虚拟机监控程序(hypervisor)运行其他操作系统。

安装KVM#

Terminal window
# 检查系统是否支持KVM
lsmod | grep kvm
# 检查CPU是否支持虚拟化
lscpu | grep -E '(vmx|svm)'
# 安装KVM及相关工具(Debian/Ubuntu)
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
# 安装KVM及相关工具(RHEL/CentOS)
sudo yum install -y qemu-kvm libvirt virt-install bridge-utils virt-manager
# 启动并启用libvirt服务
sudo systemctl start libvirtd
sudo systemctl enable libvirtd
# 将用户添加到libvirt组
sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER

virsh命令#

virsh是libvirt的命令行工具,用于管理虚拟机。

Terminal window
# 列出所有虚拟机
virsh list --all
# 启动虚拟机
virsh start vm_name
# 关闭虚拟机
virsh shutdown vm_name
# 强制关闭虚拟机
virsh destroy vm_name
# 暂停虚拟机
virsh suspend vm_name
# 恢复虚拟机
virsh resume vm_name
# 重启虚拟机
virsh reboot vm_name
# 查看虚拟机信息
virsh dominfo vm_name
# 查看虚拟机CPU信息
virsh domcpustats vm_name
# 查看虚拟机内存信息
virsh dommemstat vm_name
# 查看虚拟机磁盘信息
virsh domblklist vm_name
# 查看虚拟机网络信息
virsh domiflist vm_name
# 编辑虚拟机配置
virsh edit vm_name
# 导出虚拟机配置
virsh dumpxml vm_name > vm_name.xml
# 导入虚拟机
virsh define vm_name.xml
# 删除虚拟机
virsh undefine vm_name
# 克隆虚拟机
virt-clone --original vm_name --name new_vm_name --auto-clone
# 创建快照
virsh snapshot-create-as vm_name snapshot_name
# 列出快照
virsh snapshot-list vm_name
# 恢复快照
virsh snapshot-revert vm_name snapshot_name
# 删除快照
virsh snapshot-delete vm_name snapshot_name

virt-install命令#

virt-install命令用于创建新的虚拟机。

Terminal window
# 创建虚拟机(使用ISO镜像)
virt-install \
--name vm_name \
--ram 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/vm_name.qcow2,size=20 \
--cdrom /path/to/iso/file.iso \
--network network=default \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole \
--os-type linux \
--os-variant ubuntu20.04
# 创建虚拟机(使用网络安装)
virt-install \
--name vm_name \
--ram 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/vm_name.qcow2,size=20 \
--location http://archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/ \
--network network=default \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole \
--os-type linux \
--os-variant ubuntu20.04 \
--extra-args "console=ttyS0,115200n8 serial"

qemu-img命令#

qemu-img命令用于管理虚拟机磁盘镜像。

Terminal window
# 创建磁盘镜像
qemu-img create -f qcow2 /var/lib/libvirt/images/vm_name.qcow2 20G
# 查看磁盘镜像信息
qemu-img info /var/lib/libvirt/images/vm_name.qcow2
# 调整磁盘镜像大小
qemu-img resize /var/lib/libvirt/images/vm_name.qcow2 +10G
# 转换磁盘镜像格式
qemu-img convert -f qcow2 -O raw /var/lib/libvirt/images/vm_name.qcow2 /var/lib/libvirt/images/vm_name.raw
# 压缩磁盘镜像
qemu-img convert -c -f qcow2 -O qcow2 /var/lib/libvirt/images/vm_name.qcow2 /var/lib/libvirt/images/vm_name-compressed.qcow2
# 检查磁盘镜像
qemu-img check /var/lib/libvirt/images/vm_name.qcow2
# 备份磁盘镜像
qemu-img backup -f qcow2 /var/lib/libvirt/images/vm_name.qcow2 /var/lib/libvirt/images/vm_name-backup.qcow2

Xen虚拟化#

Xen是一个开源的虚拟机监控程序,它可以在同一台物理服务器上运行多个操作系统。

安装Xen#

Terminal window
# 安装Xen(Debian/Ubuntu)
sudo apt install -y xen-hypervisor-amd64 xen-tools xen-utils-common
# 安装Xen(RHEL/CentOS)
sudo yum install -y xen xen-libs xen-dom0-libs xen-doc xen-utils
# 启动并启用Xen服务
sudo systemctl start xencommons
sudo systemctl enable xencommons
# 检查Xen状态
xl list

xl命令#

xl是Xen的命令行工具,用于管理虚拟机。

Terminal window
# 列出所有虚拟机
xl list
# 启动虚拟机
xl create /etc/xen/vm_name.cfg
# 关闭虚拟机
xl shutdown vm_name
# 强制关闭虚拟机
xl destroy vm_name
# 暂停虚拟机
xl pause vm_name
# 恢复虚拟机
xl unpause vm_name
# 查看虚拟机信息
xl info vm_name
# 查看虚拟机CPU信息
xl vcpu-list
# 查看虚拟机内存信息
xl meminfo vm_name
# 编辑虚拟机配置
vim /etc/xen/vm_name.cfg
# 重启虚拟机
xl reboot vm_name
# 克隆虚拟机
xl clone vm_name new_vm_name

容器技术#

Docker容器#

Docker是一个开源的容器化平台,它可以帮助用户打包、分发和运行应用程序。

安装Docker#

Terminal window
# 安装Docker(Debian/Ubuntu)
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
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 -y docker-ce docker-ce-cli containerd.io
# 安装Docker(RHEL/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 -y docker-ce docker-ce-cli containerd.io
# 启动并启用Docker服务
sudo systemctl start docker
sudo systemctl enable docker
# 将用户添加到docker组
sudo usermod -aG docker $USER
# 验证Docker安装
docker --version
docker run hello-world

Docker命令#

Terminal window
# 查看Docker版本
docker --version
# 查看Docker信息
docker info
# 搜索镜像
docker search image_name
# 拉取镜像
docker pull image_name:tag
# 列出本地镜像
docker images
# 删除镜像
docker rmi image_name:tag
# 构建镜像
docker build -t image_name:tag .
# 运行容器
docker run --name container_name -d image_name:tag
# 运行容器(映射端口)
docker run --name container_name -p 8080:80 -d image_name:tag
# 运行容器(挂载卷)
docker run --name container_name -v /host/path:/container/path -d image_name:tag
# 运行容器(设置环境变量)
docker run --name container_name -e KEY=value -d image_name:tag
# 运行容器(交互式)
docker run --name container_name -it image_name:tag /bin/bash
# 列出容器
docker ps -a
# 查看容器日志
docker logs container_name
# 实时查看容器日志
docker logs -f container_name
# 查看容器信息
docker inspect container_name
# 查看容器进程
docker top container_name
# 进入运行中的容器
docker exec -it container_name /bin/bash
# 停止容器
docker stop container_name
# 启动容器
docker start container_name
# 重启容器
docker restart container_name
# 删除容器
docker rm container_name
# 删除所有停止的容器
docker container prune
# 删除所有未使用的镜像
docker image prune -a
# 删除所有未使用的资源
docker system prune -a
# 查看容器资源使用情况
docker stats
# 查看容器网络
docker network ls
# 创建网络
docker network create network_name
# 连接容器到网络
docker network connect network_name container_name
# 断开容器与网络的连接
docker network disconnect network_name container_name

Docker Compose#

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。

Terminal window
# 安装Docker Compose
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# 验证Docker Compose安装
docker-compose --version
# 定义多容器应用(docker-compose.yml)
# version: '3'
# services:
# web:
# build: .
# ports:
# - "8080:80"
# volumes:
# - ./code:/code
# depends_on:
# - db
# db:
# image: mysql:5.7
# environment:
# MYSQL_ROOT_PASSWORD: password
# MYSQL_DATABASE: example
# 启动应用
docker-compose up -d
# 停止应用
docker-compose down
# 查看应用状态
docker-compose ps
# 查看应用日志
docker-compose logs
# 构建应用
docker-compose build
# 扩展服务
docker-compose up -d --scale web=3

Podman容器#

Podman是一个无守护进程的容器引擎,它可以运行和管理OCI容器。

安装Podman#

Terminal window
# 安装Podman(Debian/Ubuntu)
sudo apt install -y podman
# 安装Podman(RHEL/CentOS)
sudo yum install -y podman
# 验证Podman安装
podman --version

Podman命令#

Podman的命令与Docker非常相似,许多命令可以直接替换。

Terminal window
# 查看Podman版本
podman --version
# 搜索镜像
podman search image_name
# 拉取镜像
podman pull image_name:tag
# 列出本地镜像
podman images
# 删除镜像
podman rmi image_name:tag
# 构建镜像
podman build -t image_name:tag .
# 运行容器
podman run --name container_name -d image_name:tag
# 运行容器(映射端口)
podman run --name container_name -p 8080:80 -d image_name:tag
# 运行容器(挂载卷)
podman run --name container_name -v /host/path:/container/path -d image_name:tag
# 运行容器(交互式)
podman run --name container_name -it image_name:tag /bin/bash
# 列出容器
podman ps -a
# 查看容器日志
podman logs container_name
# 查看容器信息
podman inspect container_name
# 进入运行中的容器
podman exec -it container_name /bin/bash
# 停止容器
podman stop container_name
# 启动容器
podman start container_name
# 删除容器
podman rm container_name
# 查看容器资源使用情况
podman stats
# 查看容器网络
podman network ls
# 创建网络
podman network create network_name

Podman Compose#

Podman Compose是一个用于定义和运行多容器Podman应用程序的工具。

Terminal window
# 安装Podman Compose
pip3 install podman-compose
# 验证Podman Compose安装
podman-compose --version
# 启动应用
podman-compose up -d
# 停止应用
podman-compose down
# 查看应用状态
podman-compose ps

LXC/LXD容器#

LXC(Linux Containers)是一种操作系统级虚拟化技术,它可以在同一台Linux主机上运行多个隔离的Linux系统。LXD是LXC的高级接口,提供了更简单的容器管理体验。

安装LXD#

Terminal window
# 安装LXD(Debian/Ubuntu)
sudo apt install -y lxd
# 安装LXD(RHEL/CentOS)
sudo yum install -y epel-release
sudo yum install -y lxd
# 初始化LXD
sudo lxd init
# 将用户添加到lxd组
sudo usermod -aG lxd $USER

lxc命令#

lxc是LXD的命令行工具,用于管理容器。

Terminal window
# 列出镜像
lxc image list
# 拉取镜像
lxc image copy ubuntu:20.04 local: --alias ubuntu20.04
# 列出容器
lxc list
# 创建容器
lxc launch ubuntu:20.04 container_name
# 启动容器
lxc start container_name
# 停止容器
lxc stop container_name
# 重启容器
lxc restart container_name
# 删除容器
lxc delete container_name
# 进入容器
lxc exec container_name -- /bin/bash
# 查看容器信息
lxc info container_name
# 查看容器日志
lxc logs container_name
# 复制文件到容器
lxc file push /host/path container_name/container/path
# 从容器复制文件
lxc file pull container_name/container/path /host/path
# 修改容器配置
lxc config edit container_name
# 设置容器资源限制
lxc config set container_name limits.cpu 2
lxc config set container_name limits.memory 2GB
# 创建容器快照
lxc snapshot container_name snapshot_name
# 列出容器快照
lxc snapshot list container_name
# 恢复容器快照
lxc restore container_name snapshot_name
# 删除容器快照
lxc snapshot delete container_name snapshot_name
# 克隆容器
lxc copy container_name new_container_name

容器编排#

Kubernetes#

Kubernetes是一个开源的容器编排平台,用于自动化容器的部署、扩展和管理。

安装Kubernetes#

Terminal window
# 安装kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
# 验证kubectl安装
kubectl version --client
# 安装minikube(本地开发环境)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube
sudo mv minikube /usr/local/bin/
# 启动minikube
minikube start
# 查看集群状态
kubectl cluster-info

kubectl命令#

kubectl是Kubernetes的命令行工具,用于管理Kubernetes集群。

Terminal window
# 查看集群信息
kubectl cluster-info
# 查看节点
kubectl get nodes
# 查看命名空间
kubectl get namespaces
# 查看Pod
kubectl get pods -A
# 查看Deployment
kubectl get deployments -A
# 查看Service
kubectl get services -A
# 查看ConfigMap
kubectl get configmaps -A
# 查看Secret
kubectl get secrets -A
# 创建资源
kubectl apply -f resource.yaml
# 查看资源详情
kubectl describe pod pod_name
# 查看资源日志
kubectl logs pod_name
# 进入Pod
kubectl exec -it pod_name -- /bin/bash
# 删除资源
kubectl delete pod pod_name
# 扩展Deployment
kubectl scale deployment deployment_name --replicas=3
# 更新Deployment
kubectl set image deployment deployment_name container_name=image:tag
# 滚动更新
kubectl rollout status deployment deployment_name
# 回滚更新
kubectl rollout undo deployment deployment_name

Docker Swarm#

Docker Swarm是Docker的原生集群管理和编排工具。

Terminal window
# 初始化Swarm集群
docker swarm init
# 添加工作节点
docker swarm join --token token manager_ip:2377
# 添加管理节点
docker swarm join --token token manager_ip:2377
# 查看节点
docker node ls
# 创建服务
docker service create --name service_name --replicas 3 -p 8080:80 nginx
# 查看服务
docker service ls
# 查看服务任务
docker service ps service_name
# 扩展服务
docker service scale service_name=5
# 更新服务
docker service update --image nginx:latest service_name
# 删除服务
docker service rm service_name
# 离开Swarm集群
docker swarm leave --force

虚拟化和容器管理工具#

Virt-Manager#

Virt-Manager是一个图形化的虚拟机管理工具,它基于libvirt库,可以管理KVM、Xen等虚拟化技术。

Terminal window
# 启动Virt-Manager
virt-manager

Cockpit#

Cockpit是一个Web-based的服务器管理工具,它可以管理虚拟机、容器、存储等。

Terminal window
# 安装Cockpit(Debian/Ubuntu)
sudo apt install -y cockpit cockpit-machines
# 安装Cockpit(RHEL/CentOS)
sudo yum install -y cockpit cockpit-machines
# 启动并启用Cockpit服务
sudo systemctl start cockpit
sudo systemctl enable cockpit
# 访问Cockpit
# https://server_ip:9090

Portainer#

Portainer是一个轻量级的Docker管理UI,它可以管理Docker容器、镜像、网络等。

Terminal window
# 运行Portainer容器
docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
# 访问Portainer
# http://server_ip:9000

性能优化#

虚拟化性能优化#

  1. CPU优化

    • 启用CPU透传(CPU passthrough)
    • 使用CPU亲和性
    • 启用KVM嵌套虚拟化
  2. 内存优化

    • 启用内存大页(hugepages)
    • 调整内存气球(ballooning)设置
    • 合理分配内存资源
  3. 存储优化

    • 使用SSD存储
    • 使用qcow2格式的磁盘镜像
    • 启用磁盘缓存
    • 使用LVM或RAID提高I/O性能
  4. 网络优化

    • 使用桥接网络
    • 启用VirtIO网络驱动
    • 调整MTU大小
    • 使用SR-IOV(单根I/O虚拟化)

容器性能优化#

  1. 镜像优化

    • 使用 Alpine或Distroless基础镜像
    • 减少镜像层数
    • 使用多阶段构建
    • 清理不必要的文件和依赖
  2. 容器配置优化

    • 限制容器资源(CPU、内存)
    • 使用适当的网络模式
    • 优化存储挂载
    • 减少容器启动时间
  3. 运行时优化

    • 使用最新版本的Docker或Podman
    • 启用容器运行时接口(CRI)
    • 优化容器调度
    • 使用容器健康检查

安全最佳实践#

虚拟化安全#

  1. 隔离

    • 使用不同的虚拟网络
    • 限制虚拟机之间的通信
    • 启用SELinux或AppArmor
  2. 访问控制

    • 使用强密码
    • 限制管理接口的访问
    • 定期更新系统和应用
  3. 监控

    • 监控虚拟机资源使用情况
    • 监控虚拟机网络流量
    • 监控虚拟机日志

容器安全#

  1. 镜像安全

    • 使用官方或可信的镜像
    • 定期扫描镜像漏洞
    • 签名和验证镜像
  2. 容器配置安全

    • 以非root用户运行容器
    • 限制容器权限
    • 禁用不必要的功能
    • 使用只读文件系统
  3. 运行时安全

    • 监控容器行为
    • 限制容器网络访问
    • 定期更新容器
    • 使用容器安全工具
  4. 编排安全

    • 保护Kubernetes集群
    • 使用RBAC(基于角色的访问控制)
    • 加密敏感数据
    • 定期备份集群配置

常见问题及解决方案#

虚拟化问题#

虚拟机无法启动#

症状:运行virsh start vm_name时失败。

解决方案

  • 检查虚拟机配置文件
  • 检查磁盘镜像是否存在
  • 检查网络配置
  • 检查libvirt服务状态

虚拟机网络不可用#

症状:虚拟机无法访问网络。

解决方案

  • 检查虚拟机网络配置
  • 检查主机网络配置
  • 检查防火墙规则
  • 重启网络服务

容器问题#

容器无法启动#

症状:运行docker run时失败。

解决方案

  • 检查镜像是否存在
  • 检查容器配置
  • 检查端口是否被占用
  • 检查卷权限

容器网络不可用#

症状:容器无法访问网络。

解决方案

  • 检查容器网络配置
  • 检查主机网络配置
  • 检查防火墙规则
  • 重启Docker服务

容器资源使用过高#

症状:容器CPU或内存使用过高。

解决方案

  • 限制容器资源
  • 优化应用程序
  • 检查容器日志
  • 重启容器

总结#

本文介绍了Linux系统中常用的虚拟化和容器命令和技巧,包括KVM虚拟化、Xen虚拟化、Docker容器、Podman容器、LXC/LXD容器、Kubernetes容器编排等方面的内容。通过掌握这些命令和技巧,用户可以更高效地管理虚拟化环境和容器,提高系统的可靠性和安全性。

虚拟化和容器技术是现代IT基础设施的重要组成部分,它们正在改变着我们部署和管理应用程序的方式。随着这些技术的不断发展,我们需要不断学习和更新知识,以适应新的挑战和机遇。

练习#

  1. 安装KVM并创建一个虚拟机。
  2. 使用Docker运行一个Nginx容器,并映射端口。
  3. 使用Docker Compose定义和运行一个多容器应用。
  4. 安装LXD并创建一个容器。
  5. 安装Minikube并部署一个应用。
  6. 使用Virt-Manager管理虚拟机。
  7. 使用Cockpit管理服务器。
  8. 使用Portainer管理Docker容器。
  9. 优化虚拟机性能。
  10. 优化容器性能。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
Linux虚拟化和容器命令和技巧
https://blog.vanilla.net.cn/posts/2026-02-05-linux-virtualization-containers/
作者
鹁鸪
发布于
2026-02-06
许可协议
CC BY-NC-SA 4.0

评论区

目录