1. 为什么选择VMware + CentOS 8 + Docker这个组合?

如果你是一个开发者,尤其是做后端或者运维的,肯定遇到过这样的场景:想在自己的电脑上快速搭建一个和线上服务器环境一模一样的测试环境,但又不想把本地系统搞得一团糟。或者,你刚学Docker,想找个干净的系统来折腾,但又怕把主力机搞崩了。这时候,虚拟机就成了你的“后悔药”和“试验田”。

我选择VMware Workstation Pro,是因为它足够稳定,功能也全,快照功能简直就是“时光机”,手滑了也能一键回档。而CentOS 8,虽然官方支持已经结束,转向了Stream版本,但它在很多老项目、企业内部依然有大量的应用,生态成熟,资料也多。更重要的是,它的稳定性和对服务器环境的模拟,是很多开发者的首选。至于Docker,那就不用多说了,现在搞微服务、CI/CD,不会用Docker简直寸步难行,它能把应用和依赖打包成一个轻量级的“集装箱”,在任何地方都能以相同的方式运行。

把这三位“大佬”组合在一起,目标就非常明确了:在本地电脑上,快速构建一个隔离的、网络可达的、软件安装飞快的CentOS服务器,并且预装好Docker,让你拿到手就能直接跑容器,投入到真正的开发工作中去。 这整个过程,我会带你从虚拟机创建、系统安装,一路配置到Docker跑起来,中间所有可能踩的坑,比如网络连不上、YUM源慢到哭、SSH登录不了,我都会把解决方案揉碎了讲给你听。咱们不搞那些华而不实的理论,就讲怎么一步步做,怎么快速搞定。

2. 手把手创建你的第一个CentOS 8虚拟机

万事开头难,但跟着我做,第一步其实很简单。首先,你得准备好两样东西:VMware Workstation Pro(建议17或以上版本)CentOS 8.2的ISO镜像文件。镜像可以去国内的一些开源镜像站找,比如阿里云镜像站,搜索“CentOS-8.2.2004-x86_64-dvd1.iso”下载就行,速度会快很多。

打开VMware,点击“创建新的虚拟机”。这里有个小技巧,我推荐选择“自定义(高级)”,而不是“典型”。虽然多点击几下,但你能更精细地控制虚拟机的配置,避免后续一些奇怪的问题。

在硬件兼容性页面,选你VMware版本对应的最高选项就行。接着是关键一步:选择安装来源。这里要选“稍后安装操作系统”,先别急着挂载ISO。为什么?因为如果先选了ISO,VMware可能会帮你做一些自动化的安装配置,但有时候这些配置并不符合我们的需求,尤其是网络部分,手动控制更靠谱。

操作系统类型选“Linux”,版本下拉找到“CentOS 8 64位”。给虚拟机起个名字,比如“MyCentOS8-Docker”,位置选一个你硬盘空间充足、路径里没有中文和特殊字符的文件夹,这是好习惯。

处理器和内存配置,取决于你电脑的配置。如果你是16G内存的电脑,分给虚拟机2GB(2048MB) 内存就足够流畅运行CentOS 8和几个Docker容器了。处理器数量,给1个处理器、2个核心通常也够用。这里有个非常重要的选项:一定要勾选“虚拟化Intel VT-x/EPT或AMD-V/RVI”。这个选项是后续在虚拟机里顺利运行Docker等虚拟化技术的基础,如果不打开,Docker可能会报错。

网络连接类型,这里我们先选“使用网络地址转换(NAT)”。NAT模式相当于让虚拟机共享你主机的IP上网,虚拟机可以访问外网,但外部网络不能直接访问虚拟机,比较安全,也省去了配置路由的麻烦。我们后面会再细调。

创建虚拟磁盘,大小建议20GB,选“将虚拟磁盘拆分为多个文件”,这样迁移和备份会灵活一些。最后,在自定义硬件界面里,找到“新CD/DVD”,选择“使用ISO映像文件”,浏览并选中你下载好的CentOS 8 ISO文件。检查一遍所有配置,没问题就点击“完成”。

这时候先别急着启动!我们还有一件小事要做:配置VMware的虚拟网络。点击VMware菜单栏的“编辑” -> “虚拟网络编辑器”。找到“VMnet8”(这就是NAT模式对应的虚拟网卡),确保它的子网IP段不是你公司或家里局域网正在用的(比如默认的192.168.xx.xx可能冲突)。你可以改成不那么常见的,比如192.168.99.0。记住这里的子网IP网关IP(通常是子网网段的第一个或第二个地址,比如192.168.99.2),等下配置CentOS静态IP要用到。配置好后,点击“应用” -> “确定”。

现在,可以放心地点击“开启此虚拟机”了。虚拟机会从ISO镜像启动,进入CentOS 8的安装界面。

3. 详解CentOS 8系统安装与初始设置

虚拟机启动后,你会看到CentOS 8的安装引导界面。直接用键盘上下键选择第一项“Install CentOS Linux 8”,按回车。第二项是测试安装介质,一般不需要,除非你怀疑镜像文件损坏。

等待一会儿,会进入语言选择。这里我个人的建议是:选择英语(English)。虽然选中文更亲切,但在命令行环境下,中文路径、中文提示有时会带来意想不到的编码问题,尤其是后续一些脚本和配置,用英文环境能避免很多麻烦。当然,这只是建议,如果你习惯中文,选择“中文(简体)”也可以。

接下来是安装信息摘要页面,这是配置的核心。你需要关注这几项:

  1. 安装目的地(INSTALLATION DESTINATION):点击进入,你会看到我们之前分配的20GB虚拟磁盘。直接点击左上角的“Done”就行,系统会自动完成分区,这对新手来说最安全省心。
  2. 网络和主机名(NETWORK & HOST NAME):点击进入,右上角先把以太网连接(通常是ens160或ens33)的开关从“OFF”拨到“ON”。这样安装程序就会尝试通过DHCP获取一个临时IP,方便我们后续测试。在下方主机名输入框里,可以起个名字,比如“centos-docker”,然后点击“Apply”。先不要在这里配置静态IP,我们留到系统安装完后再用命令行精细配置。
  3. 软件选择(SOFTWARE SELECTION):这是决定你系统“体型”的关键。对于我们的Docker开发环境,强烈建议选择“Minimal Install(最小化安装)”。这个选项只安装最基本的系统组件,没有图形界面,非常轻量、安全,也更像一台真正的服务器。所有我们需要的工具(如vim、网络工具)都可以后续用命令轻松安装。如果你实在离不开图形界面,可以选择“Server with GUI”,但会占用更多磁盘空间和内存。

其他设置保持默认即可。点击右下角的“Begin Installation”,安装就开始了。在安装过程中,你需要设置root管理员密码和创建一个普通用户

Root密码:务必设置一个足够复杂的密码,并牢记。在下方点击“ROOT PASSWORD”进行设置。 创建用户:点击“USER CREATION”,创建一个普通用户,比如用户名“dev”,并勾选“Make this user administrator”,这样这个用户就有sudo权限了。为这个用户也设置一个密码。

等待安装进度条走完,点击右下角的“Reboot”重启。重启后,会有一个初始设置界面,接受一下许可协议,就可以用你创建的用户(比如dev)或root用户登录了。首次登录后,建议先更新一下系统:sudo dnf update -y。然后,我们就可以关机,在VMware里为这个纯净的系统拍一个快照,命名为“Clean Install”。这个快照就是我们的“安全屋”,以后任何时候玩坏了,都可以瞬间回到这个干净的状态。

4. 搞定网络:配置静态IP并确保内外畅通

系统装好了,但默认通过DHCP获取的IP可能会变,这对于我们后续用SSH远程连接非常不友好。所以,配置一个固定的静态IP是首要任务。

首先,登录系统(建议用root用户,方便操作)。我们需要先搞清楚虚拟机的网卡名称。在终端输入 ip addrnmcli device status,你会看到一个活跃的网络设备,名字通常是 ens160ens33eth0。记住它,我们以ens160为例。

CentOS 8默认使用NetworkManager管理网络,我们通过修改网卡配置文件来设置静态IP。配置文件路径在 /etc/sysconfig/network-scripts/ 下,文件名是 ifcfg-你的网卡名,比如 ifcfg-ens160

先用vim编辑这个文件:vim /etc/sysconfig/network-scripts/ifcfg-ens160。文件内容大概长这样,我们需要修改几处关键地方:

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp # 这里要改!
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens160
UUID=bd96502e-d5df-4213-9d53-03136177df84
DEVICE=ens160
ONBOOT=yes # 确保这里是yes,开机自启
# 我们需要添加下面几行
IPADDR=192.168.99.110 # 你想要的静态IP,必须在之前VMnet8的子网内,且不冲突
PREFIX=24 # 子网掩码,24对应255.255.255.0
GATEWAY=192.168.99.2 # 网关,就是之前记下的VMnet8的网关IP
DNS1=192.168.99.2 # DNS,可以设成网关,或者公共DNS如114.114.114.114
DNS2=8.8.8.8

具体修改和添加如下:

  • BOOTPROTO=dhcp 改为 BOOTPROTO=staticBOOTPROTO=none
  • 确保 ONBOOT=yes
  • 在文件末尾添加 IPADDRPREFIXGATEWAYDNS1 等参数。IP地址192.168.99.110需要确保在你的局域网中没有其他设备使用。

编辑完成后,按 Esc,输入 :wq 保存退出。然后重启网络服务让配置生效:systemctl restart NetworkManager

现在,用 ip addr show ens160 命令检查,你应该能看到inet后面跟着你刚设置的静态IP了。再试试 ping www.baidu.com,看是否能通外网。如果ping不通,检查一下网关和DNS设置是否正确,以及主机的VMware相关服务(如VMware NAT Service)是否在运行。

注意:配置静态IP后,你的主机(Windows/Mac)和虚拟机之间应该是可以互相ping通的。你可以在主机命令行里 ping 192.168.99.110 测试一下。这是后续SSH连接的基础。

5. 开启远程大门:配置并优化SSH服务

有了固定IP,我们就可以从主机通过SSH远程连接到虚拟机了,这样操作起来比在VMware窗口里方便得多。CentOS 8默认已经安装了SSH服务(openssh-server),我们只需要进行一些安全性和便利性的配置。

首先,编辑SSH服务的配置文件:vim /etc/ssh/sshd_config。我们需要关注并修改以下几个参数:

# 找到并确保以下行没有被注释(即行首没有#号)
Port 22 # SSH端口,默认22,如果考虑安全可以改成其他高端口,如2222
PermitRootLogin yes # 是否允许root用户直接登录,学习环境可以设为yes,生产环境务必设为no
PasswordAuthentication yes # 是否允许使用密码认证,设为yes方便初学
# 可以添加或修改以下行提升体验
ClientAliveInterval 60 # 服务器每60秒向客户端发送一次保活消息
ClientAliveCountMax 3 # 客户端连续3次无响应则断开连接

修改完成后,保存退出。然后重启SSH服务使配置生效:systemctl restart sshd。可以用 systemctl status sshd 查看服务状态,确认是“active (running)”。

现在,回到你的主机电脑。如果你用的是Windows,可以使用 PuTTY 或者 Windows Terminal(Win10/11自带,商店可更新);如果是Mac或Linux,直接打开终端就行。使用ssh命令连接:ssh dev@192.168.99.110,然后输入用户dev的密码。或者用root连接:ssh root@192.168.99.110。如果连接成功,恭喜你,你已经可以摆脱VMware的窗口,在一个更舒服的终端里操作你的虚拟机了!

提示:为了更安全,后续你可以学习配置SSH密钥对登录,完全禁用密码登录,这样即使端口暴露在公网,安全性也极高。

6. 为软件安装插上翅膀:替换YUM/DNF源为国内镜像

CentOS默认的软件源服务器在国外,用dnf install安装软件时,速度可能慢如蜗牛,甚至经常超时失败。解决办法就是把它替换成国内的镜像源,比如清华大学、阿里云、网易的镜像站,速度会有质的飞跃。

由于CentOS 8官方已经停止维护,标准的mirror.centos.org源已经不可用。我们需要使用针对历史版本的vault归档源。以清华大学镜像站为例,操作如下:

  1. 备份原有源配置:这是一个好习惯,万一新源有问题可以快速还原。

    cd /etc/yum.repos.d/
    sudo mkdir -p backup
    sudo cp *.repo backup/
    
  2. 获取系统精确版本号:因为vault源需要精确的版本路径。

    cat /etc/redhat-release
    # 输出类似:CentOS Linux release 8.2.2004 (Core)
    # 提取版本号,比如 8.2.2004
    minorver=8.2.2004
    # 或者用命令自动提取
    minorver=$(cat /etc/redhat-release | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
    
  3. 执行替换命令:这条命令会批量修改 /etc/yum.repos.d/ 目录下所有 CentOS-*.repo 文件,将基础URL指向清华大学的vault镜像。

    sudo sed -e "s|^mirrorlist=|#mirrorlist=|g" \
         -e "s|^#baseurl=http://mirror.centos.org/\$contentdir/\$releasever|baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/$minorver|g" \
         -i.bak \
         /etc/yum.repos.d/CentOS-*.repo
    

    命令解释:-i.bak 参数表示直接修改原文件,并生成一个 .bak 后缀的备份文件。

  4. 清理并重建缓存

    sudo dnf clean all
    sudo dnf makecache
    

    执行 dnf makecache 时,你会看到从 mirrors.tuna.tsinghua.edu.cn 下载元数据的速度非常快。

  5. 测试一下:可以尝试安装一个小工具来测试源是否正常工作。

    sudo dnf install -y wget
    

    如果安装迅速完成,没有报错,说明源替换成功了。

有时候,某些公共镜像源因为访问量过大,可能会对单个IP进行临时限流。如果你在执行 dnf makecache 时遇到403错误,可以尝试换成阿里云或网易的镜像源,替换命令中的URL即可。例如阿里云vault源:baseurl=https://mirrors.aliyun.com/centos-vault/$minorver

7. 搭建容器世界的基石:安装与配置Docker

环境配置妥当,终于来到重头戏——安装Docker。在CentOS 8上,我们可以使用DNF包管理器,通过添加Docker官方仓库来安装最新稳定版的Docker CE(社区版)。

  1. 卸载旧版本(如果有):为了保证干净的安装,先移除可能存在的旧版本。

    sudo dnf remove -y docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine
    
  2. 安装必要的依赖包:这些工具用于管理仓库和存储驱动。

    sudo dnf install -y yum-utils device-mapper-persistent-data lvm2
    
  3. 添加Docker的官方仓库:这里我们使用阿里云的镜像仓库,速度更快。

    sudo dnf config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    

    如果提示 command not found: config-manager,需要先安装 dnf-plugins-coresudo dnf install -y dnf-plugins-core

  4. 移除可能冲突的容器工具:CentOS 8默认安装了Podman和Buildah,它们与Docker功能类似,可能会产生冲突,建议移除。

    sudo dnf remove -y podman buildah
    
  5. 安装Docker引擎:安装包含Docker CLI、容器运行时等核心组件。

    sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
    

    这里我们一并安装了 docker-compose-plugin,它是新版Docker集成的Compose工具(命令是 docker compose),比独立的 docker-compose 软件包更方便。

  6. 启动并设置开机自启

    sudo systemctl start docker
    sudo systemctl enable docker
    
  7. 验证安装

    sudo docker --version
    sudo docker compose version
    sudo systemctl status docker
    

    如果都能正确输出版本信息,并且Docker服务状态是 active (running),那么安装就成功了!

  8. (可选但推荐)配置非root用户运行Docker:默认情况下,运行Docker命令需要sudo权限。为了方便,我们可以将当前用户加入 docker 用户组。

    sudo usermod -aG docker $USER
    

    重要:执行此命令后,你需要完全退出当前SSH会话(关闭终端窗口),然后重新登录,这个组权限变更才会生效。重新登录后,你就可以直接使用 docker ps 等命令,而不需要加 sudo 了。

  9. 测试运行一个容器:让我们跑一个最经典的Hello World容器来验收成果。

    docker run hello-world
    

    如果看到一段欢迎信息,最后有 “Hello from Docker!”,那么恭喜你,一个完整的、网络通畅的、带Docker的CentOS 8开发环境已经全部就绪!

8. 环境验收与日常使用技巧

环境搭建好了,最后我们来做一次完整的验收,并分享几个让这个环境更好用的小技巧。

验收清单

  • [ ] 网络互通:主机能ping通虚拟机IP(192.168.99.110),虚拟机也能ping通外网(如 www.baidu.com)。
  • [ ] SSH连接:能从主机通过SSH(如 ssh dev@192.168.99.110)稳定连接到虚拟机。
  • [ ] 软件源:执行 sudo dnf install -y net-tools(安装ifconfig等工具)速度飞快,无报错。
  • [ ] Docker运行:执行 docker ps 无报错,执行 docker run hello-world 成功输出欢迎信息。
  • [ ] 服务自启:重启虚拟机(sudo reboot)后,Docker服务能自动启动。

实用技巧

  1. VMware工具安装:虽然CentOS 8镜像可能自带open-vm-tools,但安装VMware官方提供的VMware Tools能获得更好的图形性能、共享文件夹和剪贴板同步支持。在VMware菜单点击“虚拟机” -> “安装VMware Tools”,然后在虚拟机内挂载并安装ISO里的工具即可。
  2. 共享文件夹:在VMware虚拟机设置中,可以添加主机上的某个文件夹作为共享文件夹,这样在虚拟机里就能直接访问主机文件,传代码、配 置文件非常方便。挂载点通常在 /mnt/hgfs/ 下。
  3. 快照策略:养成好习惯,在完成一个关键阶段(如系统初始化、安装完Docker、配置好核心服务)后,就拍一个快照,并附上清晰的描述。比如“Base with Docker Installed”。这样在后续学习Kubernetes或者部署复杂应用时,一旦环境混乱,可以迅速回到一个干净的起点。
  4. 资源调整:如果你后续需要运行多个容器,感觉虚拟机卡顿,可以随时在虚拟机关机状态下,调整它的CPU核心数和内存大小。VMware的热添加功能可能有限制,关机调整最稳妥。

走到这一步,你已经拥有了一个完全受控的、可复现的Linux开发环境。它就像你的一个专属“服务器”,随开随用,玩坏了也能秒恢复。接下来,你就可以在这个环境里,放心大胆地学习Dockerfile编写、Docker Compose编排,甚至搭建更复杂的服务栈了。记住,这个环境的核心价值在于“隔离”和“可重复”,它能让你在主系统之外,拥有一片任意折腾的技术自留地。

更多推荐