三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

VMware虚拟机CentOS 7环境搭建与Docker安装配置全攻略

VMware虚拟机CentOS 7环境搭建与Docker安装配置全攻略

1. 项目概述与核心价值

最近在社区和群里,经常看到有朋友在问怎么在本地电脑上搭建一个Linux环境来跑Docker。无论是想学习容器技术、做项目开发,还是想搭建一个本地的测试环境,这都算得上是“第一课”。直接用云服务器当然方便,但成本高,而且很多调试和实验在本地虚拟机里折腾更自由,网断了也不怕。所以,今天我就以一个老运维的视角,手把手带你走一遍从零创建Linux虚拟机到成功安装Docker的全过程。这个过程,我会基于最经典的VMware Workstation ProCentOS 7来演示,但其中的思路和方法是通用的,换用 VirtualBox 或者 Ubuntu、Rocky Linux 等其他发行版也大同小异。

为什么是虚拟机加Docker这个组合?对于开发者或运维初学者来说,这相当于构建了一个高度可控、可复现且与宿主机隔离的“沙盒实验室”。在虚拟机里,你可以大胆尝试各种系统配置、软件安装和网络设置,玩坏了直接恢复快照,丝毫不影响你主力机的稳定。而Docker,则是这个实验室里的“标准化集装箱”,它能让你快速部署和运行应用,避免“在我机器上好好的”这种环境问题。无论是后续学习微服务部署、CI/CD流水线,还是单纯想跑个MySQL、Redis服务,这个基础环境都是必备的。

整个流程我会拆解得非常细,从虚拟化软件的安装、Linux镜像的选择与下载,到虚拟机的创建、系统初始化配置,最后完成Docker引擎的安装与基础验证。我会重点讲解那些容易踩坑的环节,比如虚拟化支持是否开启、网络如何配置才能让虚拟机上网、以及如何为Docker配置一个飞快的国内镜像源。只要你跟着步骤走,即使之前没接触过Linux和虚拟化,也能顺利搞定。

2. 环境准备:工具与镜像选择

工欲善其事,必先利其器。在开始动手之前,我们需要准备好两样核心的东西:虚拟化软件和Linux操作系统镜像。

2.1 虚拟化软件选型:VMware Workstation Pro

市面上主流的桌面虚拟化软件主要有 VMware Workstation Pro(或 Player)和 Oracle VirtualBox。这里我选择VMware Workstation Pro作为演示平台,原因有几个:

  1. 性能与稳定性:VMware 在虚拟化性能和与宿主机的集成度(如文件拖拽、剪贴板共享)方面通常表现更优,特别是对于Windows宿主机。
  2. 网络配置灵活:它提供了多种网络模式(NAT、桥接、仅主机等),对于后续需要模拟复杂网络环境的实验非常友好。
  3. 快照功能强大:可以随时保存虚拟机的完整状态,一键恢复,这对于学习和测试来说是“后悔药”,至关重要。

当然,VirtualBox 是免费开源的,对于预算有限的用户也是绝佳选择。两者的核心操作逻辑相似,学会一个,另一个也能快速上手。

注意:安装VMware前,请务必进入你电脑的BIOS/UEFI设置,确保Intel VT-x 或 AMD-V虚拟化技术已经启用。这是虚拟机运行的硬件基础,很多朋友卡在第一步就是因为这个没开。通常在“Advanced”或“Security”设置里可以找到,名称可能是“Virtualization Technology”或“SVM Mode”。

2.2 Linux发行版选择:CentOS 7 vs. 其他

Linux发行版众多,对于新手,我推荐CentOS 7。它源自Red Hat Enterprise Linux (RHEL),以极高的稳定性和长期支持著称,在企业服务器领域应用极广,相关的文档和社区资源也异常丰富。虽然CentOS 8已转向Stream模式,但CentOS 7在其生命周期内(截至2024年6月)依然是学习服务器技术的可靠选择。

如果你追求更前沿的软件包或不同的风格,也可以考虑:

  • Ubuntu Server LTS:用户友好,社区活跃,软件仓库丰富,是另一个绝佳的入门选择。
  • Rocky Linux / AlmaLinux:它们是CentOS的“精神续作”,旨在完全兼容RHEL,是替代CentOS的现代选择。

镜像下载:请务必从官方或可信的镜像站下载ISO文件。对于CentOS,可以去阿里云、网易、清华大学的开源镜像站。例如,在阿里云镜像站搜索“CentOS-7-x86_64-DVD-2009.iso”或类似名称的最小化安装镜像。选择“Minimal ISO”即可,它只包含最基本的系统,更干净,需要我们手动安装更多组件,这个过程本身也是学习。

3. 创建与配置Linux虚拟机

有了工具和镜像,我们就可以开始“组装”我们的虚拟电脑了。

3.1 在VMware中新建虚拟机

  1. 启动VMware,点击“创建新的虚拟机”。选择“典型”配置即可,它会帮我们设置好大部分通用选项。
  2. 安装来源:选择“安装程序光盘映像文件(iso)”,然后点击“浏览”,找到你刚才下载的CentOS 7的ISO文件。
  3. 命名与位置:给你的虚拟机起个名字,比如“CentOS7-Docker-Lab”。位置建议放在一个剩余空间较大的非系统盘分区,比如D:\VMs\。虚拟机文件会随着使用逐渐增大。
  4. 磁盘容量:指定虚拟硬盘大小。对于学习Docker,20-40GB足够。选择“将虚拟磁盘拆分成多个文件”,这样迁移和备份会更灵活。
  5. 自定义硬件(关键步骤):在完成向导前,点击“自定义硬件”。这里有几个重要设置:
    • 内存:至少分配2GB (2048 MB)。如果宿主机内存充足(比如16GB以上),分配4GB体验会更流畅。
    • 处理器:分配2个核心。这能保证虚拟机有足够的计算能力。
    • 网络适配器:模式选择NAT。这是最简单的方式,虚拟机会共享宿主机的IP上网,就像你家路由器下的另一台设备,无需额外配置就能访问外网。
    • 其他:声卡、打印机等不需要的设备可以直接移除,以节省资源。

完成硬件设置后,点击关闭,然后点击“完成”。虚拟机就创建好了,但此时它还是一台“空壳”电脑。

3.2 安装CentOS 7操作系统

现在,我们启动这台虚拟电脑,并为其安装系统。

  1. 在VMware库中选中新创建的虚拟机,点击“开启此虚拟机”。虚拟机会从我们挂载的ISO镜像启动。
  2. 进入安装界面后,选择“Install CentOS 7”并回车。
  3. 语言选择:建议选择English (United States),这样可以避免后续终端出现中文乱码,也便于搜索错误信息。当然,选择中文也可以。
  4. 安装信息摘要:这是配置系统的核心页面。
    • DATE & TIME:点击进入,在地图上选择“Asia/Shanghai”,确保时间正确。
    • SOFTWARE SELECTION:点击进入,这是选择安装包组的地方。对于服务器和我们的用途,务必选择“Minimal Install”(最小化安装)。我们不需要图形界面,所有操作通过命令行完成,这能保证系统最精简、最安全。如果需要图形界面学习,可以选择“Server with GUI”,但会占用更多资源。
    • INSTALLATION DESTINATION:点击进入,这是分区设置。直接点击完成即可,系统会自动为我们配置分区方案。对于初学者,自动分区完全够用。
    • NETWORK & HOSTNAME:点击进入,将右上角的开关从“OFF”拨到“ON”,以在安装时就开启网络连接。同时,在下方主机名处,可以输入一个你喜欢的名字,比如docker-host
  5. 点击右下角的“Begin Installation”开始安装。
  6. 在安装过程中,设置ROOT 密码并创建一个普通用户(可选但推荐)。Root密码请设置得复杂一些,并牢记。创建普通用户是为了日常使用,避免直接使用root权限,更安全。

安装完成后,点击“Reboot”重启。重启后,你会看到一个黑色的命令行登录界面,恭喜你,一个纯净的CentOS 7服务器已经就绪。

4. 虚拟机初始配置与网络调优

刚安装好的最小化系统非常干净,我们需要进行一些基础配置,让它用起来更顺手,并为安装Docker铺平道路。

4.1 系统更新与基础工具安装

首先,使用root账户登录。输入用户名root和你设置的密码(输入时密码不可见)。

登录后第一件事,更新系统到最新状态,并安装一些我们后续会频繁使用的工具。

# 1. 更新系统所有已安装的包到最新版本 yum update -y # 2. 安装常用的工具包 # vim: 强大的文本编辑器(系统自带vi,但vim更好用) # wget: 命令行下载工具 # net-tools: 包含ifconfig等网络诊断工具 # bash-completion: 命令自动补全增强 yum install -y vim wget net-tools bash-completion

-y参数表示对所有询问自动回答“yes”,让安装过程无需手动确认。

4.2 配置静态IP地址(可选但推荐)

安装时我们启用了网络,但默认是DHCP动态获取IP。对于服务器,尤其是我们后续可能要配置端口映射或需要固定IP访问时,设置一个静态IP会更方便。这里我们配置一个在NAT网段内的静态IP。

  1. 查看当前网络配置

    ip addr

    你会看到类似ens33eth0的网络接口名,以及一个由DHCP分配的IP地址(如 192.168.xxx.xxx)。

  2. 编辑网络配置文件

    vim /etc/sysconfig/network-scripts/ifcfg-ens33

    (请将ens33替换为你实际看到的接口名)

  3. 找到并修改以下几行关键参数:

    BOOTPROTO="static" # 将dhcp改为static ONBOOT="yes" # 确保是yes,开机自启 # 在文件末尾添加以下配置(IP地址根据你的VMware NAT网段调整) # 通常VMware NAT的网段是192.168.xxx.0,网关是.2,广播是.255 IPADDR=192.168.137.100 # 你希望设置的静态IP,需在网段内且未被占用 NETMASK=255.255.255.0 # 子网掩码 GATEWAY=192.168.137.2 # 网关地址(通常是VMware NAT的网关) DNS1=114.114.114.114 # 首选DNS DNS2=8.8.8.8 # 备用DNS

    实操心得:如何确定GATEWAY和网段?在VMware主界面,点击“编辑” -> “虚拟网络编辑器”,选中“VMnet8 (NAT模式)”,点击“NAT设置”就能看到网关IP(例如192.168.137.2),子网IP就是网段(例如192.168.137.0)。

  4. 保存退出vim(按Esc,输入:wq,回车)。然后重启网络服务:

    systemctl restart network
  5. 再次使用ip addrping www.baidu.com验证IP是否生效以及网络是否通畅。

4.3 关闭防火墙与SELinux(仅用于学习环境)

在企业生产环境中,防火墙和SELinux是重要的安全组件。但在我们个人的学习测试环境里,它们可能会给后续的Docker容器网络访问带来一些不必要的麻烦。为了方便学习,我们可以暂时关闭它们。

# 1. 停止并禁用防火墙(firewalld) systemctl stop firewalld systemctl disable firewalld # 2. 临时关闭SELinux(重启后失效) setenforce 0 # 3. 永久关闭SELinux(需编辑配置文件并重启) # 编辑SELinux配置文件 vim /etc/selinux/config # 找到 SELINUX=enforcing 这一行,将其改为: SELINUX=disabled # 保存退出。这个修改需要重启系统才能生效。

重要提示SELINUX=disabled的修改必须重启虚拟机才能生效。你可以选择现在重启 (reboot),也可以先继续,在安装完Docker后再重启。但如果不重启,SELinux可能仍处于 enforcing 模式,导致一些权限问题。

5. Docker引擎安装与配置详解

系统基础环境准备好后,我们就可以安装今天的主角——Docker了。在Linux上,我们安装的是Docker Engine,即Docker的守护进程和命令行工具。

5.1 使用官方脚本安装Docker CE

CentOS 7的默认yum仓库里的Docker版本可能很旧。我们采用Docker官方提供的一键安装脚本,这是最方便、能获取最新稳定版的方法。

  1. 下载并运行安装脚本:

    curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh

    这个脚本会自动检测你的系统,添加Docker的官方仓库,并完成所有安装步骤。

  2. 安装完成后,启动Docker服务并设置开机自启:

    systemctl start docker systemctl enable docker
  3. 验证安装是否成功:

    docker version

    如果看到Client和Server的版本信息,说明Docker引擎已经安装并运行起来了。

5.2 配置国内镜像加速器

默认情况下,Docker会从Docker Hub拉取镜像,但在国内速度可能很慢。我们需要配置一个国内的镜像加速器,比如阿里云、腾讯云、中科大等提供的服务。

这里以阿里云镜像加速器为例(需要免费注册阿里云账号获取专属地址):

  1. 登录阿里云容器镜像服务控制台,在“镜像工具” -> “镜像加速器”中,你会看到针对不同系统的配置命令。
  2. 对于CentOS,通常是创建一个daemon配置文件。我们直接编辑它:
    vim /etc/docker/daemon.json
  3. 将以下内容写入该文件(请替换https://xxxx.mirror.aliyuncs.com为你从阿里云控制台复制的专属加速器地址):
    { "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"] }
  4. 保存退出后,重新加载配置并重启Docker服务:
    systemctl daemon-reload systemctl restart docker
  5. 运行docker info,在输出结果中查找Registry Mirrors,如果能看到你配置的地址,说明加速器生效了。

5.3 Docker基础命令验证与初体验

配置好加速器后,我们来拉取一个最简单的镜像,运行一个容器,验证整个环境是否工作正常。

# 1. 拉取一个极小的测试镜像:hello-world docker pull hello-world # 2. 运行这个镜像,它会打印一段欢迎信息然后退出 docker run hello-world # 3. 拉取一个更实用的镜像,比如Nginx,并以后台模式运行 docker pull nginx:alpine docker run -d -p 8080:80 --name my-nginx nginx:alpine
  • -d:后台运行。
  • -p 8080:80:将宿主机的8080端口映射到容器的80端口。
  • --name my-nginx:给容器起个名字。

现在,你可以在宿主机(你的Windows/Mac)的浏览器中,访问http://你的虚拟机IP:8080(如果没配静态IP,用ip addr查到的IP),应该能看到Nginx的欢迎页面。这证明你的Docker已经可以正常拉取镜像、创建容器并提供网络服务了。

6. 常见问题与深度排查指南

即使按照步骤操作,你也可能会遇到一些问题。下面我整理了几个最常见的问题及其解决方案。

6.1 Docker服务启动失败:虚拟化支持问题

问题现象:在运行systemctl start docker时,提示失败。查看状态systemctl status docker,错误信息可能包含failed to start daemon: Error initializing network controller: ...或直接提示与虚拟化/内核相关。

根本原因:这通常是因为宿主机(你的物理电脑)的BIOS/UEFI中的CPU虚拟化支持(Intel VT-x/AMD-V)没有开启,或者被其他软件(如某些安卓模拟器、Hyper-V)占用了。

解决方案

  1. 重启进入BIOS/UEFI设置,在CPU配置或安全选项中,找到“Virtualization Technology”或“SVM Mode”,将其设置为Enabled
  2. 如果宿主机是Windows 10/11且开启了Hyper-VWindows Sandbox,它们会与VMware冲突。你需要关闭这些功能。
    • 打开“控制面板” -> “程序” -> “启用或关闭Windows功能”。
    • 取消勾选Hyper-VWindows Hypervisor PlatformWindows Sandbox虚拟机平台
    • 重启电脑。
  3. 在VMware的虚拟机设置中,确保“处理器”选项里勾选了“虚拟化 Intel VT-x/EPT 或 AMD-V/RVI”

6.2 网络问题:虚拟机无法上网或宿主机无法访问容器

问题现象A:虚拟机内ping www.baidu.com不通。

  • 检查1:确认VMware虚拟网络编辑器中的NAT模式(VMnet8)已启用,并且子网IP、网关设置正确。
  • 检查2:在虚拟机内,检查ip addr是否获取到了IP(如果是DHCP)。如果没有,尝试dhclient ens33(接口名需替换)重新获取。
  • 检查3:检查宿主机的VMware相关服务(如VMware NAT Service、VMware DHCP Service)是否正在运行。

问题现象B:宿主机浏览器无法通过虚拟机IP:8080访问Nginx。

  • 检查1:首先在虚拟机内部,运行curl localhost:80,确认Nginx容器本身工作正常。
  • 检查2:在虚拟机内,运行iptables -L -n,查看防火墙规则。如果之前没有彻底关闭firewalld,可能需要放行端口:firewall-cmd --add-port=8080/tcp --permanent && firewall-cmd --reload
  • 检查3:检查Docker容器的端口映射是否正确。运行docker ps,查看PORTS列是否为0.0.0.0:8080->80/tcp
  • 检查4:最容易被忽略的一点:Windows/Mac宿主机的防火墙。请确保宿主机的防火墙允许对虚拟机IP的访问,或者临时关闭宿主机的防火墙进行测试。

6.3 Docker拉取镜像速度慢或失败

问题现象docker pull命令卡住或报错net/http: TLS handshake timeout

解决方案

  1. 确认镜像加速器配置正确:严格按照5.2节操作,确保/etc/docker/daemon.json文件格式正确(JSON格式严格,不能有注释,最后一个元素后不能有逗号)。重启docker服务后,用docker info验证。
  2. 尝试其他加速器:如果某个加速器不稳定,可以换一个。在daemon.jsonregistry-mirrors数组里可以配置多个,用逗号隔开。
    { "registry-mirrors": [ "https://hub-mirror.c.163.com", "https://mirror.baidubce.com" ] }
  3. 检查DNS:在虚拟机内cat /etc/resolv.conf,看DNS服务器是否正常(如114.114.114.114)。可以尝试修改为8.8.8.8223.5.5.5

6.4 权限问题:非root用户运行docker命令

问题现象:使用创建的普通用户执行docker ps时,报错Got permission denied while trying to connect to the Docker daemon socket

原因:Docker守护进程默认使用Unix socket通信,而该socket文件属于root用户和docker组。普通用户没有权限访问。

解决方案:将当前用户加入docker组。

# 执行以下命令(需要root权限,可以先su - 切换到root) sudo usermod -aG docker $USER # 或者,如果你知道用户名,比如用户叫 ‘devuser’ sudo usermod -aG docker devuser

重要:执行此命令后,必须完全退出当前会话并重新登录(关闭终端重新连接,或执行newgrp docker),组权限变更才会生效。之后,该用户就可以不加sudo直接运行docker命令了,这样更安全方便。

7. 进阶配置与日常使用建议

环境搭建好了,最后分享几个能让你的虚拟化开发环境更好用的进阶技巧和日常操作建议。

7.1 配置虚拟机共享文件夹

我们经常需要在宿主机写代码,然后在虚拟机里运行。通过VMware的共享文件夹功能,可以轻松实现文件互通。

  1. 在VMware中,先关闭虚拟机。
  2. 右键虚拟机 -> “设置” -> “选项”选项卡 -> “共享文件夹”。
  3. 选择“总是启用”,然后点击“添加”,按照向导选择一个宿主机上的目录(比如D:\ShareWithVM)作为共享点,并给它起个名字(比如host_share)。
  4. 启动虚拟机,共享文件夹通常会自动挂载到/mnt/hgfs/目录下。你可以通过ls /mnt/hgfs/查看。如果没有,可能需要安装VMware Tools(CentOS Minimal默认未安装)。

7.2 使用快照功能管理实验状态

这是虚拟机最大的优势之一。在进行任何有风险的操作(如安装新软件、修改核心配置)之前,先创建一个快照。

  • 创建快照:在VMware中,虚拟机运行时,点击“虚拟机” -> “快照” -> “拍摄快照”。给它起个描述性的名字,如“Base with Docker Installed”。
  • 恢复快照:如果实验搞砸了,直接点击“恢复到快照”,瞬间回到干净状态。
  • 管理快照:可以创建多个快照树,标记不同的开发阶段。

7.3 日常使用命令备忘

最后,附上一些在这个环境中最高频使用的命令,帮你快速上手:

# 系统相关 hostnamectl set-hostname new-name # 修改主机名(需重启或重新登录生效) systemctl start/stop/restart/status service-name # 管理系统服务 yum install/remove/search package-name # 包管理 df -h # 查看磁盘空间 free -h # 查看内存使用 # Docker核心命令 docker images # 列出本地镜像 docker ps -a # 列出所有容器(包括已停止的) docker rm -f container-id # 强制删除容器 docker rmi image-id # 删除镜像 docker exec -it container-id /bin/bash # 进入正在运行的容器 docker logs container-id # 查看容器日志 docker-compose up -d # 使用docker-compose编排启动服务(需单独安装)

这个由VMware虚拟机、CentOS 7和Docker组成的“三件套”环境,已经成为了我本地开发和测试的标配。它隔离性好,复原能力强,又能通过Docker快速构建复杂的应用栈。从今天起,你可以放心地在里面折腾了,无论是学习Linux命令,还是部署一整套微服务,都有了坚实的舞台。记住,遇到问题多查日志(journalctl -xedocker logs),善用快照,大胆尝试。

← 返回列表