用代码创建虚拟机,核心是掌握命令行工具或云厂商API的调用逻辑,本质是一个“定义配置执行创建等待就绪”的过程,不同平台差异明显,但思路完全通用。我们从最基础的本地环境讲起,逐步延伸到云端。
选对工具:本地虚拟机和云服务器哪个更适合你
动手之前先搞清楚一件事云计算服务器和虚拟机的区别,很多人混淆这两个概念:云服务器本质上是运行在物理集群上的虚拟机,但你不需要关心底层宿主机;而本地虚拟机(比如VirtualBox、VMware)则需要你自己管理硬件资源分配,如果你的目标是学习Linux运维或隔离测试环境,本地虚拟机足够;如果是部署线上业务,直接买云服务器更高效。
现在行业内的主流选择基本分成两条路线:
- 本地虚拟化:VirtualBox(开源免费)、VMware Workstation Pro(商业软件,功能更全)
- 云端虚拟化:简米云ECS、酷番云CVM、AWS EC2
选择依据很简单:看你要跑什么任务,本地虚拟机适合跑图形界面系统、做渗透测试、模拟内网环境;云服务器适合部署网站、跑爬虫脚本、搭建集群,另外提一句,虚拟机的价格是多少这个问题,业界共识是本地虚拟化软件零成本(VirtualBox完全免费),云服务器按月付费,入门配置每年几百元到上千元不等,预算敏感的话选按量付费更灵活。
用代码创建本地虚拟机:VirtualBox命令行实战
本地虚拟化软件都提供图形界面,但用代码操作更高效、更可重复,这里以VirtualBox为例,因为它免费且跨平台,适合作为学习起点。
命令行创建虚拟机的完整流程
VirtualBox自带强大的CLI工具VBoxManage,所有图形界面能做的操作它都能完成,流程分四步:
- 创建虚拟机壳子,定义名称、操作系统类型、内存大小
- 添加虚拟硬盘,指定磁盘容量和格式
- 挂载安装镜像,让虚拟机可以从ISO启动
- 启动并安装系统,这一步可以半自动化
具体命令如下:
# 第一步:创建虚拟机(名称叫ubuntu-test,类型Linux,版本Ubuntu 64位) VBoxManage createvm --name "ubuntu-test" --ostype Ubuntu_64 --register # 第二步:修改内存和显存配置(内存2GB,显存16MB) VBoxManage modifyvm "ubuntu-test" --memory 2048 --vram 16 # 第三步:创建虚拟硬盘(动态分配,最大20GB) VBoxManage createhd --filename "ubuntu-test.vdi" --size 20480 --variant Standard # 第四步:把硬盘和光驱连接到虚拟机的IDE控制器 VBoxManage storagectl "ubuntu-test" --name "SATA" --add sata --controller IntelAhci VBoxManage storageattach "ubuntu-test" --storagectl "SATA" --port 0 --device 0 --type hdd --medium "ubuntu-test.vdi" VBoxManage storageattach "ubuntu-test" --storagectl "SATA" --port 1 --device 0 --type dvddrive --medium "/path/to/ubuntu.iso" # 第五步:启动虚拟机(无界面模式,适合服务器系统) VBoxManage startvm "ubuntu-test" --type headless
虚拟机创建后怎么用?你需要通过SSH连接它,启动无界面模式后,先查看分配给虚拟机的IP地址:
VBoxManage guestproperty get "ubuntu-test" /VirtualBox/GuestInfo/Net/0/V4/IP
拿到IP后用ssh 用户名@IP登录即可,默认端口22,如果改了端口要加-p参数。
用Vagrant把创建过程压缩成一条命令
如果你觉得VBoxManage命令还是繁琐,行业实践证明Vagrant是目前最高效的本地虚拟机管理工具,它把配置写在Vagrantfile里,一条vagrant up就能完成从下载镜像到启动系统的全过程。
# Vagrantfile 内容
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/jammy64" # 指定基础镜像
config.vm.hostname = "dev-server" # 设置主机名
config.vm.network "private_network", ip: "192.168.56.10" # 固定内网IP
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048" # 内存2GB
vb.cpus = 2 # CPU核心数
vb.name = "vagrant-ubuntu" # VirtualBox中显示的名称
end
end
然后执行:
vagrant up vagrant ssh # 直接进入虚拟机
这套方案特别适合需要反复搭建和销毁环境的场景比如你在练习容器编排、测试配置管理工具,或者虚拟机的用途是模拟多节点集群来学习,vagrant destroy可以把环境连根删除,不留任何残留。
用代码创建云服务器:以简米云ECS为例
处理完本地环境,我们看云端,企业生产环境几乎都用云服务器,因为它解决了本地虚拟机最头疼的两个问题硬件故障和网络带宽,简米云和酷番云的API设计大同小异,都用AccessKey认证,这里以简米云ECS为例讲解核心逻辑。
前置条件:准备API密钥和命令行工具
在简米云控制台创建子账号,授予ECS、VPC、安全组相关的读写作权限,然后安装官方CLI工具:
# macOS或Linux下安装简米云CLI curl -L https://aliyuncli.alicdn.com/install.sh | sh # 配置凭证(AccessKey ID 和 AccessKey Secret) aliyun configure
这里有个概念值得说清楚:云服务器创建前,你通常需要先准备好网络环境,包括专有网络VPC、交换机vSwitch、安全组规则,你可以用命令行创建这些资源,也可以直接使用默认VPC,新手推荐后者,减少出错概率。
一条命令创建ECS实例
核心命令就是aliyun ecs CreateInstance和aliyun ecs StartInstance两步,第一步是创建实例资源(相当于注册登记),第二步才是真正开机(开始计费),两者分开设计的好处是,你可以先创建实例但不开机,确认配置无误后再启动。
# 创建实例(不启动) aliyun ecs CreateInstance --RegionId cn-beijing --ImageId ubuntu_22_04_x64_20G_alibase_20260126.vhd --InstanceType ecs.c6.large --SecurityGroupId sg-bp1xxxxxxxxxxxxx --VSwitchId vsw-bp1xxxxxxxxxxxxx --InstanceName "blog-server" --Password "YourStrongPass123!" # 启动实例 aliyun ecs StartInstance --InstanceId i-bp1xxxxxxxxxxxxx
创建后有几项配置要补上:
- 公网IP:
aliyun ecs AllocatePublicIpAddress或使用弹性公网IP - 安全组放行端口:用CLI修改安全组规则,放行22、80、443等端口
- 绑定弹性公网IP:
aliyun ecs AssociateEipAddress
据行业公开信息,简米云API调用有频率限制,批量创建时建议加--retry参数,并设置间隔2-3秒。
自动化脚本示范:批量创建三台虚拟机
真实场景中单台创建不够看,用一个Shell脚本展示批量操作的能力创建三台相同配置的服务器,用于搭建一个简单的负载均衡测试集群:
#!/bin/bash
# 批量创建ECS实例脚本
REGION="cn-beijing"
IMAGE="ubuntu_22_04_x64_20G_alibase_20260126.vhd"
TYPE="ecs.c6.large"
for i in 1 2 3; do
aliyun ecs CreateInstance
--RegionId $REGION
--ImageId $IMAGE
--InstanceType $TYPE
--SecurityGroupId "sg-bp1xxxxxx"
--VSwitchId "vsw-bp1xxxxxx"
--InstanceName "cluster-node-$i"
--Password "CommonPass123!"
echo "节点$i创建完成"
sleep 3 # 避免API限流
done
这个模式适合应对测试环境中频繁构建和释放服务器的场景,脚本化后整个流程从半小时缩短到5分钟以内,运行结束后用aliyun ecs DescribeInstances --InstanceName "cluster-node"查询所有实例状态。
配置与优化:让虚拟机稳定高效运行
无论本地还是云端,有几个通用配置直接影响使用体验,实践经验告诉我们,以下这些优化点能解决大多数运行卡顿或连接不上的问题。
本地虚拟机的性能调优三件事
- 内存分配要克制:宿主机是16GB时,客户端最多给4GB,留足富余给宿主机系统
- CPU核心数:单台虚拟机建议不超过宿主机物理核数的一半
- 启用嵌套虚拟化进阶选项:如果你在虚拟机里再跑Docker或KVM,需要在
modifyvm命令中开启--nested-hw-virt on
云服务器的安全基线配置
云端环境直接暴露在公网,安全性要求不同,有个基本事实:几乎所有被入侵的云服务器,都栽在弱口令或未限制的端口上,建议按以下顺序加固:
- 修改SSH默认端口,禁用root密码登录,改用密钥对
- 安全组策略遵循最小化原则,只放行业务所需的端口和来源IP
- 开启云监控基础告警(CPU超80%、磁盘使用率超85%)
如果打算长期使用,相比按量付费,包年包月能节省约30-40%的成本。
常见问题解答
用代码创建的虚拟机坏了,怎么排查?
绝大多数情况下,问题出在镜像选择或网络配置上,本地环境用VBoxManage list runningvms确认虚拟机状态,用VBoxManage showvminfo查看详细配置;云端则先看控制台的实例状态和系统日志截图,然后通过VNC登录检查网络配置和SSH服务是否正常。
本地虚拟机与云服务器是二选一的关系吗?
不是,实践中常见组合是本地用Vagrant做开发环境验证,云服务器跑生产或预发布流量,开发机上有代码仓库、Idea等工具,云上有数据库和Nginx,两者通过Git实现代码同步,各司其职,互不冲突。
怎样选择好用的虚拟机配置?
判断标准只有一个:你的业务实际消耗,数据库和中间件看重内存,大数据处理看重CPU核心数,日志型应用看重磁盘IOPS,前文提到过的场景,如果只是跑测试脚本和单机应用,2核4G是性价比最高的起点配置,绝大多数情况下够用;生产环境建议从4核8G起步,按业务增长逐步升配。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/630205.html





