虚拟机管理
创建
# 创建一个20G的 qcow2格式磁盘文件
qemu-img create -f qcow2 /var/lib/libvirt/images/centos7.qcow2 20G
# 查看系统支持的os版本
virt-install --osinfo list | grep 'os-you-need'
# 采用已预先创建的磁盘
# 其中cdrom的权限 用户为libvirt-qemu 用户组为kvm
virt-install \
--name centos7 \
--virt-type kvm \
--os-variant=centos7.0 \
--memory 1024 --vcpus 2 \
--cdrom=/data/isos/CentOS-7-x86_64-Minimal-2009.iso \
--disk path=/var/lib/libvirt/images/centos7.qcow2 \
--network network=default \
--graphics vnc,listen=0.0.0.0 --noautoconsole
# 一步创建磁盘+虚拟机
virt-install \
--name centos7 \
--virt-type kvm \
--os-variant=centos7.0 \
--memory 1024 --vcpus 2 \
--cdrom=/data/isos/CentOS-7-x86_64-Minimal-2009.iso \
--disk path=/var/lib/libvirt/images/centos7.qcow2,size=10,format=qcow2,bus=virtio \
--network network=default \
--graphics vnc,listen=0.0.0.0 --autoconsole graphical
复制
磁盘复制实现
cp -a /var/lib/libvirt/images/xxxx.qcow2 \
/var/lib/libvirt/images/xxxxx-2.qcow2
右键clone
virt-clone克隆
virt-clone -o rocky8 -n rocky8-3
-o rocky8 #指已存在的虚拟机的名称
-n rocky8-3 #新虚拟机的名称
-f /var/lib/libvirt/images/rocky8-3.qcow2 #新虚拟机磁盘文件路径,此文件自动生成,不需要事先创建
virtio驱动
virtio 是一种
I/O 半虚拟化
解决方案,是一套通用I/O 设备虚拟化
的程序,是对半虚拟化Hypervisor
中的一组通用I/O 设备的抽象
,提供了一套上层应用与各Hypervisor
虚拟化设备(KVM
,Xen
,VMware
等)之间的通信框架和编程接口,减少跨平台所带来的兼容性问题,大大提高驱动程序开发效率,Windows
系统需要单独安装virtio驱动
,Linux
系统自带virtio驱动
。
安装 virtio 的驱动
- 该驱动安装主要针对
windows
宿主机安装 - 需要在创建虚拟机的时候,创建两个光驱,一个放windows镜像,一个存放virtio驱动软件
- 安装系统时,在
硬盘安装驱动
,先安装virtio
驱动 - 系统安装完成后,对网卡/PCIe等进行
virtio
驱动的安装 - (可选)对于需要
重置
/作为模板
的windwos虚拟机使用sysprep
对其进行重写包括SID
在内的信息
列出主机
virsh list --all
virsh list --uuid --all --name
开启关闭
virsh start centos7
virsh shutdown centos7
virsh reboot centos7
暂停恢复
virsh suspend centos7
virsh resume centos7
开机启动
OR
virsh autostart centos7
OR
通过将配置文件软链接到
/etc/libvirt/qemu/autostart/
目录下
ln -s /etc/libvirt/qemu/centos7.xml /etc/libvirt/qemu/autostart/centos7.xml
删除
virsh undefine centos7 # 删除虚拟机配置,但不删除硬盘文件
virsh undefine centos7 --remove-all-storage # 删除虚拟机包括磁盘文件
磁盘路径
virsh domblklist centos7
冷迁移
- 生成主机的
xml
文件
virsh dumpxml centos7 > centos7.xml
- 编辑按需修改
- id // id是一个递增的唯一数字
- disk.source // 磁盘文件ZQ
- interface.mac //mac地址
- interface.target //网络类型 vnetX
- 将
centos7.xml
文件复制到另外一个主机上 (同系统)
scp centos7.xml root@192.168.1.1:/etc/libvirt/qemu/
重要文件
- 主机配置XML文件
/etc/libvirt/qemu/centos7.xml
- 开机启动的gust host 目录
/etc/libvirt/qemu/autostart/
管理远程主机
- 建立互信 (二选一)
- 通过openssh-askpass包
- apt install -y ssh-askpass / yum -y install openssh-askpass
- 基于本机到远程主机的key验证 ssh-copy-id
- ssh-keygen
- ssh-copy-id 192.168.1.1 #远程主机地址
- 通过openssh-askpass包
- File --> Add Connection
- 添加远程主机
镜像制作
手动制作
基于容器制作
!!! info commit 命令
docker commit --help
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Create a new image from a container's changes
Options:
-a, --author string Author (e.g., "John Hannibal Smith hannibal@a-team.com")
-c, --change list Apply Dockerfile instruction to the created image
-m, --message string Commit message
-p, --pause Pause container during commit (default true)
!!!
制作步骤
- 下载官方镜像
- 前台命令行方式启动
- 安装所需工具或应用包等
- 提交处理好的镜像
- 将新生成的镜像生成容器
操作案例 (nginx容器制作)
1. 拉取centos基础镜像
docker pull rockylinux:9.3
2. 启动基础镜像进入容器
docker run -it --name rockylinux-base rockylinux:9.3 /bin/bash
3. 更改源
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
-i.bak \
/etc/yum.repos.d/rocky-*.repo
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
-i.bak \
/etc/yum.repos.d/rocky.repo
dnf makecache
5. 下载nginx
yum install nginx iproute net-tools -y
6. 清理缓存 (减少空间大小)
rm -rf /var/cache/dnf/*
7. 关闭nginx后台服务
# sed 's!daemon on;!daemon off;!' /etc/nginx/nginx.conf
# 在全局设置 nginx/1.20.1
sed -i '9a\daemon off;' /etc/nginx/nginx.conf
nginx -t
8. 准备自定义页面
echo "<h1>Hello my container</h1>" > /usr/share/nginx/html/index.html
9. 提交镜像
docker commit -a "root@alopex.com" -m "rockylinux nginx v1" -c "EXPOSE 80 443" rockylinux-base alopex/rockylinux-nginx:v1
10. 启动容器
docker run -d -p 8080:80 \
--name rocky-base-nginx \
alopex/rockylinux-nginx:v1 \
/usr/sbin/nginx
11. 测试容器
curl 127.0.0.1:8080