在文章开始之前熊猫想先问一下大家,不知道大家日常使用是Docker用的比较多还是虚拟机用的比较多呢?
每次提起虚拟化,各个平台都会有不同的声音,到底是选择docker-compose.yml还是用VM快照,亦或者双修?这个应用应该部署在Docker还是虚拟机呢?两者其实都能做到“隔离与效率”,Docker凭借着"集装箱思维"颠覆了传统虚拟化技术,如今如果谁家NAS自带没有Docker套件,那么销量一定是不高的;而虚拟机技术则是硬件级的虚拟化,拥有更强的安全性和稳定性,不过独立的操作系统和资源也带来了更大的性能负担,这也是为什么很多NAS玩家在使用虚拟机时会选择精简的操作系统镜像的原因。
其实这是上个月有粉丝问我的问题,他在考虑他部署的项目是直接用虚拟机部署还是通过Docker实现,而今天熊猫借着粉丝这个问题,也就和大家一起探讨一下这两者的区别以及各自的优势特点。
本次使用的机型为铁威马的F6-424MAX,熊猫家里很多NAS设备,之所以考虑用铁威马来作为例子,其实更多的是考虑目前我所知道的NAS中只有铁威马的虚拟机应用VBOX没有进行大量魔改,拥有原生的一些特性和功能,而在Docker方面铁威马自身的Docker Manager拥有完善的功能、极强的管理以及深度的权限。
首先来说说虚拟机应用,铁威马用到的为VirtualBOX,经常玩虚拟机的相信对这个软件并不陌生,作为一款开源的虚拟机软件,VirtualBOX拥有非常强的兼容性,图形化的界面也非常易用,对于资源的分配也很灵活,加上扩展性非常强,能直接利用到F6-424MAX的外置界面实现更丰富的扩展性,所以其实很多NAS的虚拟机都用的VirtualBOX进行再次开发,不过铁威马保留了VirtualBOX原生性。
通过TOS的应用商店下载应用,打开会自动弹出新的窗口,默认账号和密码都为admin。VirtualBOX的整个管理都在新的界面进行,默认是英文界面,需要我们点击右上角的File-Preferences-Language去切换一下语言。
虚拟机的创建非常简单,将下载好的ISO镜像文件放在“VirtualBox”的虚拟机文件夹中,回到VirtualBOX虚拟机界面,点击新建,根据自己想创建的虚拟机环境选择对应的类型和版本即可,例如熊猫这里用到的为Win10系统。
随后分配虚拟机的内存大小、虚拟硬盘大小。
在虚拟硬盘的文件类型上我们选择VirtualBOX的原生格式VDI就行,存储分配的话选择动态分配即可。
最后创建完成会得到这样的画面,是不是很像PVE的管理界面。因为默认创建是没有加载ISO镜像的,所以我们还需要给虚拟机指定镜像文件。右键虚拟机选择设置,在弹出的界面选择存储,默认是没有光盘,所以我们需要选择我们的ISO镜像文件。
网络设置选择桥接网卡,根据需求选择对应的网口。
这时候就可以直接启动虚拟机了,启动之后VirtualBOX会给虚拟机生成一个远程端口,点击端口会自动下载.DRP文件,通过这个文件就能直接联通远程桌面协议访问虚拟机了。
剩下的Win系统安装步骤就不需要我多介绍了,至此一个虚拟化的操作系统也便完成了。
其实创建虚拟机很简单,但对于NAS而言虚拟机能做才是重点。
铁威马因为用的是原生VirtualBOX应用,所以在虚拟机的支持上会比其他NAS要好很多,同时在设置的灵活性上也要更为方便。在设置中能看到对于系统、显示、存储、声音、网络以及串口和USB设备的设置修改项,这其实在很多其他NAS是不能进行修改的,往往在创建之后就定死了。
但如果要用虚拟机来进行Windows Server或者Ikuai的部署,那必定需要用到网口配置,亦或者你需要用NAS搭建虚拟机作为沙盒使用,需要进行自己的程序验证测试等工作,那么USB的设置也就非常重要。
VirtualBOX让我最喜欢的点其实是他的快照功能,熊猫使用虚拟机的一般都是用来进行项目测试,因为搭建环境、应用安全性的各种原因,折腾的过程其实很多时候系统容易崩掉,VirtualBOX不管是创建还是恢复都非常方便快捷。
总的来说虚拟机更适合运行多个不同操作系统,对隔离性和安全性要求较高的任务,不过因为其占用资源比较大,所以如果真的要使用虚拟机建议NAS至少保留8G及以上的内存,以确保系统运行流畅。
和虚拟机应用VirtualBOX一样,铁威马的Docker除了提供了自身体验不错的Docker Manager使用,还在应用商店内置了Portainer,不过建议后续铁威马能把这个应用换成中文镜像,默认英文操作起来还是比较麻烦。
Portainer相对更为偏向于团队管理,日常使用其实更多的还是用Docker Manager,功能齐全且界面UI操作也更为直观,加上铁威马拥有完全开放的Docker权限,Docker Manager的体验个人觉得是非常不错的,单说权限开放这一点很多非专业性的NAS就满足不了。
Docker Manager支持Docker-compose容器堆栈,对于一些大型项目的部署效率能提高不少,同时docker-compose的部署方式也利于后期容器的修改和迁移,即便是容器出问题也能通过docker-compose.yml及时恢复。
Docker Manager的堆栈支持本地yml和上传yml文件,也支持直接创建,创建之后可通过验证来检查语法是否错误,不过这里还是给铁威马提一个意见,目前镜像源不支持加速镜像地址设置,非常不方便,建议后期可以更改一下。
根据虚拟机和Docker容器的各种特性,熊猫这里也做了个图表来进行对比。
从两者的特性对比可以得到结论,虚拟机更适合多个不同操作系统的使用,同时在隔离性和安全性上虚拟机会有更好的保障,比较适用于传统IT环境中的服务器虚拟化项目;而Docker容器则拥有快速开发、测试和部署应用的特性,加上堆栈的功能更适用于分布式应用的部署。
最后还是要说明,这两者并不冲突,虚拟机能提供强隔离性、多操作系统支持和稳定的基础环境,而Docker提供轻量化、高效利用资源和快速部署的能力,通过两者的结合可以实现混合部署、多操作系统支持、混合工作负载等等场景。