一篇覆盖虚拟化、容器化与远程运维的动手指南
阅读本文大约需要15分钟,完成后你将拥有一套完整的本地Linux开发环境。
一、为什么还需要自己搭环境
云服务器便宜,按量付费的ECS一小时几分钱。但云服务器有天然短板:依赖公网延迟、磁盘IO被邻居挤占、内网隔离测试不方便。Docker Desktop for Windows乍看省事,实则Hyper-V与VMware互斥、WSL2的内存泄漏问题常年未修。本地跑一套VMware+CentOS 7虚拟机,网络可控、快照秒级恢复,训练和测试的效率远超云上。
这篇教程给出了一条可复现的路径:从VMware创建虚拟机、CentOS 7系统初始化、Docker CE安装到XShell远程管理,每一步附带可执行的命令和踩坑记录。
二、环境准备:三个必要组件
2.1 VMware Workstation
VMware Workstation 17 Pro 已于2024年5月对个人用户免费开放,直接从 Broadcom 官网下载。Windows端安装过程为标准的下一步操作,注意取消勾选"加入VMware客户体验改善计划"即可。
安装完成后打开虚拟网络编辑器(编辑 → 虚拟网络编辑器),确认VMnet8(NAT模式)的网段。默认通常是192.168.x.0/24,本文假设为192.168.80.0/24。如果计划让虚拟机对外暴露服务(如搭建Web演示环境),可以额外配置桥接模式让虚拟机获得与宿主机同网段的IP。
2.2 CentOS 7 镜像
CentOS 7 已于2024年6月30日进入EOL(End of Life),上游不再发布安全更新。那么为什么仍然推荐CentOS 7而非CentOS Stream 9或Rocky Linux?
| 维度 | CentOS 7 | CentOS Stream 9 | Rocky Linux 9 |
|---|---|---|---|
| 生态兼容性 | 仍有大量企业生产环境在线,教程和第三方仓库最丰富 | 滚动更新,yum仓库偶有断裂 | 与RHEL 9 1:1二进制兼容 |
| 资源占用 | 最小安装512MB内存可跑 | 建议2GB以上 | 建议2GB以上 |
| 包版本 | Docker CE官方仓库支持到最后一个7.x版本 | 持续更新 | 持续更新 |
| 学习曲线 | 入门友好,资料最多 | 偏离传统CentOS体验 | 接近传统CentOS |
| 适合场景 | 学习、本地开发、Docker宿主 | 预研RHEL新特性 | 生产环境替代CentOS 7 |
结论:若目标是学习Linux基础操作和搭建Docker实验环境,CentOS 7的资料丰富度和低资源占用仍然是不可替代的优势。EOL不是报废——本地隔离的虚拟机不存在暴露面,安全风险可控。如果部署面向公网的服务,选择Rocky Linux 9。
镜像获取:CentOS官方已下线7.x的ISO,推荐从阿里云开源镜像站或清华TUNA镜像站下载CentOS-7-x86_64-Minimal-2009.iso。
2.3 XShell
XShell 7 个人/教育版免费,从NetSarang官网下载即可。下文使用XShell配合VMware的NAT网络实现SSH连接。PuTTY、MobaXterm、Windows Terminal的SSH客户端均可替代,但XShell的会话管理、多标签和rz/sz文件传输是比竞品更完整的体验。
三、创建虚拟机:七个关键配置
打开VMware,文件 → 新建虚拟机 → 典型(推荐)。按以下顺序操作:
第1步:选择镜像。选择"稍后安装操作系统"可以跳过简易安装的干扰,确保分区和软件包完全由自己控制。后续再挂载CentOS 7的ISO。
第2步:客户机操作系统。选择Linux → CentOS 7 64位。这一步告诉VMware使用哪个虚拟硬件兼容性级别。
第3步:命名与位置。虚拟机名称填CentOS7-Docker,位置选择一个非系统盘的目录(虚拟磁盘写入量大,放在SSD上性能更好,但注意容量)。
第4步:磁盘容量。分配40GB。选择"将虚拟磁盘存储为单个文件"(性能优于拆分为多个文件)。如果硬盘空间充裕,建议50GB——Docker镜像和容器积累起来速度比预期快得多。
第5步:自定义硬件。创建完成后不要立刻启动,右键虚拟机 → 设置。以下是关键调整:
内存:2GB(4GB更佳,Docker运行多个容器时2GB会触发OOM Killer)
处理器:2核,勾选"虚拟化Intel VT-x/EPT或AMD-V/RVI"(嵌套虚拟化,Docker依赖此特性)
网络适配器:NAT模式(默认)。NAT模式下虚拟机通过宿主机IP访问外网,宿主机可通过端口转发访问虚拟机服务,对开发最友好
CD/DVD:挂载下载好的CentOS-7-x86_64-Minimal-2009.iso
第6步:VMware网络模式对比。理解三种模式对后续XShell连接至关重要:
| 网络模式 | 虚拟机与外网 | 宿主机与虚拟机 | 其他物理机 | IP分配 | 适用场景 |
|---|---|---|---|---|---|
| 桥接(Bridged) | 直接通信,等同于局域网一台独立设备 | 直接通信 | 直接通信 | DHCP或静态,与宿主机同网段 | 对外提供Web服务、与团队共享虚拟机 |
| NAT | 通过宿主机NAT转发 | 可通信(宿主机通过VMnet8的IP访问) | 不可直接访问 | DHCP(192.168.x.0/24),静态需手动配置 | 本地开发、Docker实验 |
| 仅主机(Host-Only) | 不可上网 | 可通信 | 不可通信 | DHCP或静态,独立网段 | 内网渗透实验、隔离网络测试 |
本教程使用NAT模式。NAT对初学者最友好:虚拟机自动获得192.168.x.0/24段IP,可访问外网,宿主机SSH到192.168.x.128(默认网关后的第一个DHCP地址)即可连接。
四、安装CentOS 7:最小化安装与首次配置
启动虚拟机,进入安装引导。
4.1 安装选项
语言选择English(避免中文locale带来的终端乱码问题,后续可装中文语言包)
SOFTWARE SELECTION选择 Minimal Install(最小化安装,无GUI,内存占用低至300MB)
INSTALLATION DESTINATION选中40GB磁盘,分区方案选"Automatically configure partitioning"
NETWORK & HOST NAME打开以太网开关(关键步骤:默认是OFF,不打开安装后需手动修改ONBOOT=yes)
点击Begin Installation后设置root密码(建议包含大小写和数字,本地环境不需要太复杂),等待安装完成,Reboot。
4.2 首次登录与基础配置
以root登录。执行以下初始化:
# 1. 更新系统(首次更新建议执行,修复已知漏洞) yum update -y # 2. 安装基础工具 yum install -y vim wget curl net-tools bash-completion # 3. 关闭SELinux(开发环境简化权限管理,生产环境请保留) setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config # 4. 关闭防火墙(同样仅限开发环境) systemctl stop firewalld systemctl disable firewalld
注意:第3步和第4步仅适用于隔离的本地开发虚拟机。如果虚拟机暴露在公网或公司内网中,应保留防火墙并只开放SSH(22)和Docker API(2375,如果需远程管理)端口。
4.3 配置静态IP(NAT模式)
DHCP分配的IP可能每次启动变化,对XShell连接造成不便。推荐配置固定IP:
# 查看当前网络接口名称(通常是ens33) ip addr
编辑网卡配置文件:
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改为以下内容(假设VMnet8网段为192.168.80.0/24,网关为192.168.80.2):
TYPE=Ethernet BOOTPROTO=static NAME=ens33 DEVICE=ens33 ONBOOT=yes IPADDR=192.168.80.100 NETMASK=255.255.255.0 GATEWAY=192.168.80.2 DNS1=114.114.114.114 DNS2=8.8.8.8
执行systemctl restart network使配置生效。用ip addr确认IP已变为192.168.80.100,ping baidu.com确认DNS和路由正常。
踩坑提示:如果
systemctl restart network后ip addr仍显示旧IP,检查虚拟机设置中网络适配器是否处于"已连接"状态。VMware偶尔在虚拟机重启后断开虚拟网卡。
五、安装Docker CE
5.1 为什么是Docker CE而非Podman
CentOS 7上可选Docker CE和Podman两种容器方案。Podman是Red Hat主推的无守护进程方案,但生态差距显著:
| 维度 | Docker CE | Podman |
|---|---|---|
| 守护进程 | dockerd常驻,资源占用约80MB | 无守护进程,按需启动 |
| docker-compose | 完整支持 | 通过podman-compose兼容,部分语法不兼容 |
| 镜像生态 | Docker Hub全网通用 | 兼容OCI格式但pull体验略差 |
| 学习资料 | 极其丰富 | 中文资料偏少 |
| K8s兼容性 | 原生,kubelet默认CRI | 需CRI-O适配 |
对学习和本地开发场景,Docker CE仍然是事实标准。
5.2 使用官方仓库安装
# 1. 卸载旧版本(如果存在) yum remove -y docker docker-client docker-client-latest docker-common \ docker-latest docker-latest-logrotate docker-logrotate docker-engine # 2. 安装依赖 yum install -y yum-utils device-mapper-persistent-data lvm2 # 3. 添加Docker官方仓库 yum-config-manager --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo # 4. 安装Docker CE yum install -y docker-ce docker-ce-cli containerd.io # 5. 启动并设置开机自启 systemctl start docker systemctl enable docker # 6. 验证安装 docker version docker run hello-world
docker run hello-world若能成功拉取并输出欢迎信息,Docker安装即告完成。
5.3 配置镜像加速
Docker Hub在国内的直接拉取速度常年不理想。截至2025年上半年,国内的镜像加速器服务经历了多次政策调整,部分公共加速器已停止服务或转为受限模式。以下记录几种可行的方案:
mkdir -p /etc/docker cat > /etc/docker/daemon.json <<EOF { "registry-mirrors": [ "https://docker.1ms.run", "https://docker.xuanyuan.me" ], "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } } EOF systemctl daemon-reload systemctl restart docker注意:镜像加速器地址随时可能变化。如果
docker pull速度仍然缓慢,可以考虑两个备选方案:一是在宿主机上运行HTTP代理并配置Docker使用代理(/etc/systemd/system/docker.service.d/http-proxy.conf);二是直接使用阿里云容器镜像服务的个人加速地址(登录阿里云容器镜像服务控制台即可获取)。
5.4 允许非root用户运行Docker
将常用用户加入docker组,避免每次敲sudo:
# 创建普通用户(如果尚未创建) useradd dev passwd dev # 加入docker组 usermod -aG docker dev # 验证(需要重新登录或newgrp docker) su - dev docker ps
六、使用XShell通过SSH连接虚拟机
6.1 确认SSH服务状态
CentOS 7最小化安装默认包含OpenSSH Server,但须确认已启动:
systemctl status sshd # 如果是inactive: systemctl start sshd systemctl enable sshd
检查监听端口(默认22):
netstat -tlnp | grep 22
6.2 XShell新建会话
打开XShell,新建会话:
| 配置项 | 值 |
|---|---|
| 名称 | CentOS7-Docker |
| 协议 | SSH |
| 主机 | 192.168.80.100(你的虚拟机静态IP) |
| 端口 | 22 |
点击"用户身份验证",方法选择Password,填入用户名root(或上面创建的dev)。首次连接会弹出主机密钥提示,点击"接受并保存"。
连接成功后你会看到熟悉的CentOS命令行提示符。此时可以用docker ps验证Docker守护进程状态。
6.3 常见连接失败的排查
| 现象 | 可能原因 | 解决 |
|---|---|---|
| Connection refused | sshd未启动 | systemctl start sshd |
| Connection timed out | IP不通或VMnet8未启用 | 检查VMware虚拟网络编辑器中VMnet8是否启用,检查虚拟机IP是否与VMnet8同一网段 |
| Permission denied | 密码错误或SSH不允许root登录 | 检查/etc/ssh/sshd_config中PermitRootLogin yes |
6.4 SSH免密登录(可选)
# 在Windows的XShell中生成密钥对: # 工具 → 用户密钥管理者 → 生成 → RSA 2048位 → 保存私钥 # 复制公钥到虚拟机: # 在虚拟机中: mkdir -p ~/.ssh chmod 700 ~/.ssh # 将XShell生成的公钥内容粘贴到以下文件: vim ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
在XShell会话属性中,用户身份验证方法选择Public Key,选择对应的私钥即可免密登录。
七、验证与收尾:跑一个Nginx测试
以下命令组合验证网络、Docker和SSH三者的协同工作:
# 1. 启动一个Nginx容器,映射到虚拟机80端口 docker run -d --name test-nginx -p 80:80 nginx:alpine # 2. 在虚拟机内测试 curl http://localhost # 3. 回到Windows宿主机浏览器,访问 http://192.168.80.100 # 应看到Nginx欢迎页 # 4. 停止并删除测试容器 docker stop test-nginx && docker rm test-nginx
如果curl http://localhost返回Nginx的HTML但宿主机浏览器无法访问,排查方向:iptables规则(iptables -L -n)、虚拟机防火墙状态、VMware NAT端口转发设置。
八、方案对比:四种搭建Linux开发环境的方式
很多人会问:为什么不用WSL2?为什么不用云服务器?以下表格给出客观评估:
| 方案 | 部署成本 | 网络灵活性 | 资源隔离 | Docker兼容性 | 适用人群 |
|---|---|---|---|---|---|
| VMware + CentOS 7(本文方案) | 约30分钟配置 | NAT/桥接/仅主机三模切换 | 完全隔离 | 原生支持,嵌套虚拟化可用 | 需要完整Linux环境、做网络实验、Docker深度用户 |
| WSL2 + Docker Desktop | 5分钟 | 仅NAT,端口需转发 | 与Windows共享内核 | Docker Desktop依赖WSL2后端,偶发dockerd崩溃 | 轻量Docker使用、VS Code远程开发 |
| 云服务器(ECS/Lightsail) | 按量付费,1核2G约0.1元/小时 | 仅公网IP,内网需同VPC | 物理隔离 | 原生支持 | 需公网访问、团队协作、临时测试 |
| VirtualBox + CentOS 7 | 约25分钟配置 | 与VMware类似但CPU虚拟化性能差约15-20% | 完全隔离 | 支持,但嵌套虚拟化偶有bug | 追求完全免费开源方案 |
选择本方案的理由:VMware的网络模式切换比WSL2灵活一个量级,比VirtualBox稳定一个量级,比云服务器便宜一个量级。免费、离线、快照秒回——对需要频繁做"危险操作"(rm -rf /、内核编译、Docker网络实验)的学习场景,这三条就是全部理由。
九、总结
本文覆盖了从零到拥有一套可用的本地Docker开发环境的完整工作流:VMware虚拟机创建 → CentOS 7安装与网络配置 → Docker CE部署与镜像加速 → XShell远程管理。核心在于三点:(1)NAT模式下静态IP的配置决定了后续SSH连接的稳定性;(2)Docker CE的官方仓库安装避免了EPEL源版本滞后的问题;(3)关闭SELinux和防火墙仅限于本地隔离环境,任何面向网络的部署都不应照搬。
这套环境的实战价值体现在:Kubernetes的minikube/k3s实验、Docker Compose多容器编排练习、CTF靶场搭建、以及所有需要在Linux下完成的开发任务都可以在同一台虚拟机上完成,快照机制让试错成本归零。
本文环境版本:VMware Workstation 17 Pro、CentOS-7-x86_64-Minimal-2009、Docker CE 24.x、XShell 7。命令和配置在以上版本中验证通过。