赞
踩
利用以下指令安装KVM、QUME等相关组件,
apt‐get install kvm qemu libvirt‐bin virtinst virt‐manager virt‐viewer
安装完成后,使用以下两条指令检查相关组件是否已经正确安装,
kvm-ok
virsh -c qemu:///system list
校验结果如图1和图2所示:
图 1 KVM、QUME等组件成功安装
图 2 查看 Hypervisor上虚拟机的列表来确认相关组件已经正确安装
利用以下指令在当前目录下创建虚拟机磁盘文件,
qemu-img create -f qcow2 ubuntu.img 10G
该指令的作用为创建一个格式为qcow2、大小为10G、文件名为ubuntu的镜像文件。
该步骤结果如图3所示。
图 3 创建虚拟机磁盘文件
首先使用以下指令下载ubuntu-20.04.4-live-server-amd64系统盘,
wget https://mirrors.aliyun.com/ubuntu-releases/focal/ubuntu-20.04.4-live-server-amd64.iso
然后使用以下指令启动虚拟机,并插入系统盘,安装操作系统,
machines/ubuntu.img -cdrom /home/huyu/virtual\ machines/ubuntu-20.04.4-live-server-amd64.iso -enable-kvm -boot d -m 1024
部分安装过程如图4所示。
图 4 在虚拟机中安装操作系统
在第三步中我们已经成功安装虚拟机了,因此可以使用以下指令以命令行的形式配置虚拟机的启动参数并启动虚拟机。
qemu-system-x86_64 ubuntu.img -m 1024
启动过程如图5所示。
图 5 启动虚拟机
为了采用libvirt来管理虚拟机,首先我们要使用vim编辑配置文件demo.xml,指定虚拟机的最大内存、VCPU的个数等详细启动参数。
紧接着使用下列指令定义虚拟机,即从xml配置文件创建虚拟机,
sudo virsh define demo.xml
随后使用以下指令启动虚拟机,
sudo virsh start demo
通过以下指令可以查看虚拟机是否启动成功,
sudo virsh -c qemu:///system list
最后,可以使用以下指令操作虚拟机,
virt-viewer -c qemu:///system [Id]
从图6和图7中可以看出该步骤已成功实现。
图 6 虚拟机启动成功
图 7 通过virt-viewer使用虚拟机
执行以下指令打开Virtual Machine Manager来安装虚拟机,
sudo virt-manager
从图8中可以看出该步骤已顺利完成。
图 8 使用Virtual Machine Manager来安装虚拟机
使用以下指令可以查看镜像信息,
qemu-img info ubuntu.img
使用以下指令可以转换镜像格式,
qemu‐img convert ‐f qcow2 –O raw ubuntu.img Ubuntu‐raw.img
图9展示了两种镜像格式的详细信息。
raw和qcow2这两种镜像格式之间的比较将在第三部分思考题及答案中给出。
图 9 两种格式的镜像的信息
问题:提示“错误: 将插槽连接到 ‘/var/run/libvirt/libvirt-sock’ 失败: 权限不够”。
解决方案:重启虚拟机。
问题:在转换镜像格式时提示磁盘空间不足。
解决方案:使用Gparted拓展磁盘。
在该部分实验中,我顺利在装有Ubuntu14.04操作系统的VMware虚拟机上:
通过该部分实验,我更加清楚了kvm和qemu这两者之间的关系。kvm是内核虚拟化支持的模块,而qemu是用户层的模拟虚拟机的仿真软件,并没有内核支持。虽然后来的qemu版本已经集成了kvm module,但是在实验中我也体会到了有没有kvm模块支持(即--enable-kvm
)的qemu之间的性能差距。同时,通过亲手实验虚拟机镜像的制作、安装以及启动,我对虚拟化技术也有了更深的了解。
利用以下指令安装 Docker 环境所需的依赖包,
apt-get update
apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
注意:需要更新apt软件包索引并安装软件包以允许apt通过HTTPS使用存储库
执行以下指令添加GPG证书秘钥并验证是否拥有带有指纹的密钥,
sudo curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg |
sudo apt-key add –apt-key fingerprint 0EBFCD88
执行以下指令写入软件源信息
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
按顺序执行以下三条指令,以安装docker,并运行hello-world容器,
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
docker run hello‐world
从图10中可以看出hello-world容器已经成功运行。
图 10 hello-world容器成功运行
执行以下指令从Docker-hub上下载ubuntu 20.04镜像,
sudo docker pull ubuntu:focal
执行以下指令以进行创建一个新的容器等操作,
sudo docker run -it --name my-container ubuntu:focal bash
从图11中可以看出,利用ubuntu:focal镜像创建的容器已经成功运行,并且能够执行Linux命令。
图 11 运行容器并执行任意Linux指令
在第五步运行的容器中任意安装一个软件(例如OpenSSH-server),结果如图12所示。
再利用以下指令可以从容器创建一个新的镜像,并给出镜像名称和标签,
sudo docker commit -m "Just installed a new software" -a "hy" my-container my-image1
从图13中可以看出已经成功从上述容器创建出新的镜像my-image1了。
图 12 在容器中安装任意软件
图 13 创建新的镜像
首先使用touch创建Dockerfile并使用vim编辑。
随后使用下列指令进行基于上述Dockerfile创建镜像的操作,
docker build -t my-image2 .
图14显示了使用docker commit创建的镜像和基于Dockerfile创建的镜像的区别,详细的区别介绍将在第三部分思考题及答案中给出。
图 14 使用docker commit创建的镜像,以及其与基于Dockerfile创建的镜像的区别
问题:安装Docker时提示“E: 未发现软件包 docker-ce-cli”。
解决方案:运行以下代码即可正确安装Docker。
sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" && sudo apt-get update && sudo apt-get install -y docker-ce
问题:运行任何docker指令时均会提示“Got permission denied while trying to connect to the Docker daemon socket at …”。
解决方案:运行docker指令时均添加sudo
以使其拥有相应权限。
在该部分的实验中,通过亲手制作各种Docker容器、镜像,我很好地掌握了Docker的基本使用方法,也明白了利用Docker commit和利用Dockerfile构建镜像之间的区别。同时,通过与实验一所耗费的时间以及宿主机的开销进行比较,我很明显地感受到Docker的便利性、轻量性,我将在第三部分思考题及答案中详细比较虚拟机和容器的镜像大小、启动速度等方面的区别。
答:虚拟机镜像格式包括raw、vmdk、cow、qcow以及qcow2等,其中raw和qcow2是目前最主流的两种格式。下面将详细比较这两种格式的区别。
答:docker制作镜像的方式主要有经过docker commit制作镜像、经过docker build制作镜像(也就是实验中的Dockerfile)这两种方法。这两种方法都是经过改进已有的镜像来达到本身的目的。
docker history
指令打印出来的历史版本信息中可以看到详细的例如apt-get install
的操作,可理解性较好,而使用docker commit方法创建出来的镜像的历史信息则是不可见的;综上,利用docker build和docker commit创建镜像各有优劣,需要结合实际状况来具体选择其中一种方法进行镜像构建。
答:总体来说,容器相对于虚拟机具有很多优势:
即便如此,我们也不能完全否定虚拟机,因为在实际应用中二者是适用于自己的场景的。虚拟机更擅长于彻底隔离整个运行环境,例如云计算服务提供商通常采用虚拟机技术隔离不同的用户。而docker通常用于隔离不同的应用,例如前端,后端以及数据库。
通过本次虚拟化技术课程实践,
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。