从零搭建Linux虚拟机与Docker环境:VMware+Ubuntu Server实战指南 1. 项目概述与核心价值最近在和一些刚入行的朋友交流时发现一个挺普遍的现象很多人在学习后端开发、云原生或者运维知识时第一步就被卡在了环境搭建上。教程里轻描淡写的一句“在Linux服务器上安装Docker”对于没有接触过虚拟化技术的新手来说可能意味着要面对一堆陌生的概念——虚拟机、镜像、网络配置每一步都可能是个坑。我自己也记得刚入门那会儿在VMware和VirtualBox之间反复横跳对着报错信息一筹莫展的经历。所以我觉得有必要写一篇真正“手把手”的指南目标就是让一个只有Windows或macOS电脑的纯新手也能无痛地走完从创建Linux虚拟机到成功运行Docker的完整流程。这个项目的核心价值在于“打通最后一公里”。网上不缺单独的VMware教程或Docker安装命令但缺少一个连贯的、以终为始的视角。我们将从一个空白的主机操作系统比如你的Windows 11笔记本开始一步步完成选择并安装虚拟机软件 - 获取Linux系统镜像 - 创建并配置虚拟机 - 在虚拟的Linux系统中安装和验证Docker。整个过程我会穿插大量我踩过的坑和总结的技巧比如如何分配合理的资源避免卡顿如何配置网络让虚拟机能上网也能被宿主机访问以及安装Docker时那些容易出错的依赖问题怎么解决。无论你是想搭建一个本地的开发测试环境还是单纯想学习Linux和容器技术跟着这篇指南走一遍你就能获得一个完全受你控制的、干净的实验沙盒。2. 核心工具选型与准备工欲善其事必先利其器。在开始动手之前我们需要明确几个核心工具的选择并理解其背后的原因。这能帮你避免后续很多兼容性问题。2.1 虚拟机平台为什么是VMware Workstation Player市面上主流的桌面虚拟化软件有VMware WorkstationPlayer/Pro、Oracle VirtualBox以及对于Windows 10/11用户而言还有内置的Hyper-V。我在这里首选推荐VMware Workstation Player个人免费版给新手原因如下性能与稳定性VMware的虚拟化驱动和硬件兼容性经过长期打磨在大多数硬件上表现稳定特别是对于显卡、USB设备和网络适配器的直通或模拟很少出现奇怪的问题。相比之下VirtualBox虽然免费开源但在某些特定主机硬件尤其是较新的笔记本上可能会遇到性能瓶颈或偶尔的卡死。用户体验VMware的安装过程、虚拟机创建向导和用户界面对新用户更为友好。它的“简易安装”功能可以大幅简化Linux系统的安装过程。网络配置方面其提供的“NAT”和“桥接”模式概念清晰易于理解和管理。与Docker Desktop的兼容性这是一个关键点。Windows上的Docker Desktop默认依赖于Hyper-V或WSL 2后端。如果你开启了Hyper-V它与VMware Workstation在默认配置下是冲突的因为它们属于不同类型的系统管理程序。但VMware Workstation 16及以上版本提供了兼容模式可以在开启Hyper-V的Windows主机上运行只是性能略有折损。为了获得最好的VMware虚拟机性能我们通常建议在安装期间暂时不启用Hyper-V。对于纯粹的学习环境使用VMware虚拟机来安装Linux再在Linux中安装Docker Engine而非Docker Desktop是更清晰、隔离性更好的方案避免了宿主机层面的复杂依赖。注意如果你的电脑是Apple Silicon (M1/M2/M3) Mac则无法使用VMware。你需要使用Parallels Desktop或UTM等支持ARM架构的虚拟化软件且需要选择ARM版本的Linux发行版如Ubuntu Server ARM。本指南主要基于x86架构的Windows/Intel Mac环境。2.2 Linux发行版选择Ubuntu Server LTS的理由Linux发行版众多如CentOS、Rocky Linux、Debian、openSUSE等。对于容器和开发环境我推荐Ubuntu Server LTS版本目前最新LTS是22.04或24.04。理由很直接广泛的社区支持与文档Ubuntu拥有最庞大的用户社区。你遇到的几乎任何问题都能在Ask Ubuntu、Stack Overflow或无数博客中找到答案。这对于新手排错至关重要。对Docker的友好性Docker官方对Ubuntu的支持非常完善。安装文档清晰软件源更新及时。许多云服务商和开源项目的默认或推荐环境也是Ubuntu。LTS版本LTS代表长期支持每个LTS版本提供5年的安全更新和维护。这保证了你的学习环境在相当长一段时间内是稳定且安全的无需频繁升级系统内核导致环境变化。资源消耗相对较低相比于带图形界面的桌面版Server版没有GUI更轻量能将更多的虚拟机资源CPU、内存留给你的应用和服务。2.3 Docker理解Docker Engine与Docker Desktop的区别这是另一个容易混淆的点。在Linux虚拟机中我们将安装的是Docker Engine也称为Docker CE社区版。它是一个客户端-服务器架构的应用Docker守护进程 (dockerd)一个常驻后台的服务负责管理容器、镜像、网络等。Docker客户端 (docker)我们用来输入命令如docker run,docker ps的工具它会通过本地套接字或网络与守护进程通信。而Docker Desktop是一个面向Windows和macOS的桌面应用程序它内部封装了一个轻量级Linux虚拟机在Windows上可能是WSL 2或Hyper-V VM并在其中运行Docker Engine同时提供了图形界面。在我们的方案中我们是在自己创建的“重量级”Linux虚拟机里直接安装Docker Engine逻辑更纯粹更适合理解底层原理。3. 实战第一步创建Linux虚拟机现在我们开始真正的实操。请确保你的电脑已禁用Hyper-V适用于Windows步骤见后并至少有8GB物理内存和20GB的可用磁盘空间。3.1 获取并安装VMware Workstation Player访问官网搜索“VMware Workstation Player download”进入VMware官网下载页面。选择适合你操作系统Windows或Linux的版本。对于个人非商业用途免费版的Player已足够。安装运行下载的安装程序。安装过程基本是“下一步”到底但需要注意在“自定义安装”步骤中建议保持默认路径。可以取消勾选“启动时检查产品更新”以加快启动速度。在Windows上安装程序可能会提示你“禁用Hyper-V”。请务必同意并让安装程序完成相关配置。安装完成后可能需要重启电脑。验证安装重启后打开VMware Workstation Player。如果看到主界面说明安装成功。3.2 下载Ubuntu Server镜像访问Ubuntu官网搜索“Ubuntu download”进入Ubuntu官方下载页面。选择版本找到“Ubuntu Server”版块选择最新的LTS版本如Ubuntu 22.04 LTS。点击下载你会得到一个后缀为.iso的文件例如ubuntu-22.04.3-live-server-amd64.iso。这就是我们的系统安装光盘镜像。3.3 在VMware中创建新虚拟机这是最关键的一步参数设置直接影响虚拟机性能。新建虚拟机在VMware Player主界面点击“创建新虚拟机”。选择安装来源选择“安装程序光盘映像文件(iso)(M)”然后点击“浏览”找到你刚才下载的Ubuntu Server.iso文件。VMware检测到是Ubuntu后会自动选择“Linux”和“Ubuntu 64位”版本。命名与位置给你的虚拟机起个名字比如MyUbuntuDocker。选择虚拟机文件的存储位置请确保目标磁盘有充足空间建议至少40GB。指定磁盘容量最大磁盘大小建议设为20GB或以上。选择“将虚拟磁盘拆分成多个文件”这样便于迁移和备份。自定义硬件关键在点击“完成”前强烈建议点击“自定义硬件”。内存分配给虚拟机的内存。如果你的主机有16GB内存分配4GB4096 MB是合理的起点。如果只有8GB分配2GB2048 MB也能运行但运行多个容器时会比较吃力。处理器分配CPU核心数。如果你的CPU有4个物理核心8个线程可以分配2个核心。这能保证虚拟机有较好的计算性能。网络适配器这是网络配置的关键。默认是“NAT模式”。我解释一下两种常用模式NAT模式虚拟机共享主机的IP地址上网。外部网络无法直接访问虚拟机但虚拟机可以访问外部网络。这是最安全、最简单的默认选择适合大多数开发场景。桥接模式虚拟机会在主机所在的物理网络中像一个独立的设备一样获取一个和主机同网段的IP地址。局域网内其他机器可以直接访问该虚拟机。如果你需要从宿主机以外的机器访问虚拟机中的服务比如测试一个Web应用就需要用桥接模式。新手建议先使用NAT模式。其他USB控制器、声卡、打印机等如果不需要可以移除以简化配置。完成创建点击“关闭”然后“完成”。你的虚拟机就创建好了它会出现在VMware的库列表中。4. 实战第二步安装Ubuntu Server系统现在我们启动虚拟机并安装操作系统。启动虚拟机在库中选中你的虚拟机点击“播放虚拟机”。虚拟机会从你加载的.iso镜像启动。语言选择启动后进入Ubuntu Server安装界面选择语言如English。键盘布局选择键盘布局如US English。网络连接安装程序会自动尝试配置网络。在NAT模式下它通常能通过主机的网络直接获取IP地址DHCP。这里保持默认即可。配置代理如果没有特殊需求比如公司内网需要代理才能上网这里直接留空回车继续。镜像地址用于下载系统更新和软件的源地址。默认使用Ubuntu官方镜像即可回车继续。磁盘分区这是安装Linux的一个重要步骤。对于新手和学习环境强烈建议选择“Use an entire disk”并选择你的虚拟磁盘如20GB的那个然后下面有一个选项是“Set up this disk as an LVM group”可以勾选上。LVM逻辑卷管理可以让你在未来更灵活地调整磁盘空间。这是一个“傻瓜式”但安全的选择安装程序会自动为你创建 boot、swap 和根分区。确认磁盘更改系统会提示你将要对磁盘进行的更改确认无误后选择“Continue”并输入“yes”确认。用户设置输入你的姓名如docker-user。输入服务器名即主机名如ubuntu-docker。输入一个强密码需要输入两次。记住这个密码这是你后续登录和进行sudo操作管理员权限的凭证。是否安装OpenSSH server强烈建议勾选“Install OpenSSH server”。这样安装完成后你就可以通过宿主机上的SSH客户端如Windows的PowerShell或TerminalmacOS的终端远程连接虚拟机无需在VMware窗口里操作更加方便。选择预装软件在“Featured Server Snaps”界面直接按回车跳过不要选择任何Snap包。我们后续会通过更通用的方式安装所需软件。等待安装系统开始复制文件并安装基础系统这个过程需要几分钟。安装完成安装结束后会提示“Install complete!”。选择“Reboot Now”重启。重启时VMware可能会提示“Please remove the installation medium and press ENTER”此时你需要点击VMware菜单栏的“虚拟机” - “可移动设备” - “CD/DVD (SATA)” - “断开连接”然后按虚拟机内的回车键。首次登录重启后你会看到文本登录界面。输入你创建的用户名和密码登录。看到命令行提示符如docker-userubuntu-docker:~$恭喜你Ubuntu Server系统安装成功5. 实战第三步在虚拟机中安装Docker Engine现在我们进入了虚拟机的命令行世界。以下所有操作都在虚拟机的终端中进行。5.1 系统更新与准备首先更新系统软件包列表并升级现有软件这是一个好习惯。sudo apt update sudo apt upgrade -ysudo命令让你以管理员权限执行操作系统会要求输入你的用户密码。-y参数表示自动确认所有提示。5.2 安装Docker的必备依赖包Docker需要一些基础工具来管理仓库和传输数据。sudo apt install -y ca-certificates curl gnupg lsb-release5.3 添加Docker官方GPG密钥和软件源这是为了确保我们从Docker官方源下载的软件包是真实且未被篡改的。创建密钥环目录sudo mkdir -p /etc/apt/keyrings下载并导入Docker的GPG公钥curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg设置Docker的APT软件源echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null这条命令会根据你当前系统的架构如amd64和Ubuntu版本代号如jammy for 22.04自动生成正确的源地址配置。5.4 安装Docker Engine现在可以安装Docker了。再次更新软件包列表因为刚刚添加了新的源sudo apt update安装Docker Engine、命令行工具CLI以及容器运行时containerdsudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin这里安装了核心的Docker引擎、客户端、容器运行时以及Docker Compose插件一个用于定义和运行多容器应用的工具。5.5 验证安装并管理Docker服务启动Docker服务并设置开机自启sudo systemctl start docker sudo systemctl enable dockersystemctl是Linux系统管理服务的标准工具。验证Docker是否运行sudo systemctl status docker你应该看到输出显示active (running)并且是enabled。运行一个测试容器sudo docker run hello-world这个命令会从Docker Hub拉取一个极小的测试镜像并运行它。如果一切正常你会看到一段“Hello from Docker!”的欢迎信息这证明你的Docker安装和运行完全成功。5.6 可选但重要将当前用户加入docker组默认情况下运行docker命令需要sudo权限。为了方便我们可以将当前用户加入docker用户组这样以后运行docker命令就不需要每次都加sudo了。sudo usermod -aG docker $USER执行此命令后你需要完全注销当前用户并重新登录或者直接重启虚拟机这个组权限变更才会生效。重启后你可以直接运行docker ps来验证如果不再要求输入密码说明配置成功。实操心得很多新手在安装完Docker后直接运行docker ps会遇到权限拒绝的错误就是因为忽略了这一步。记住修改用户组后必须重新登录会话。6. 网络与宿主机访问配置现在Docker已经在虚拟机里跑起来了但你可能还想从宿主机你的Windows或Mac访问虚拟机里的服务比如一个运行在容器里的网站。这就需要配置网络。6.1 理解虚拟机的网络模式我们之前创建虚拟机时选择了NAT模式。在这种模式下虚拟机可以访问外网。宿主机可以访问虚拟机通过虚拟网络。但默认情况下虚拟机内的服务端口如80,8080并没有直接映射到宿主机。6.2 配置端口转发NAT模式下VMware的NAT模式支持端口转发。例如你想把虚拟机里Docker容器暴露的8080端口映射到宿主机的8080端口。首先关闭你的Ubuntu虚拟机。在VMware Player库中右键点击你的虚拟机选择“设置”。在“硬件”选项卡中选择“网络适配器”确保连接方式是“NAT模式”。点击右下角的“NAT设置...”按钮。在弹出的窗口中点击“添加”。主机端口填写宿主机上你想使用的端口例如8080。类型TCP。虚拟机IP地址你需要知道虚拟机的IP地址。可以先启动虚拟机然后运行ip addr show命令找到ens33或类似网卡下的inet地址如192.168.xxx.xxx。假设是192.168.1.100。虚拟机端口填写虚拟机内服务监听的端口例如8080。保存所有设置并启动虚拟机。现在你在宿主机浏览器访问http://localhost:8080流量就会被转发到虚拟机的192.168.1.100:8080。6.3 使用桥接模式替代方案如果你觉得端口转发麻烦或者需要虚拟机像一个独立设备一样存在于局域网可以在虚拟机设置中将网络适配器改为“桥接模式”。重启虚拟机后虚拟机会从你的家庭路由器获取一个和宿主机同网段的IP如192.168.31.xxx。这样宿主机和其他局域网设备都可以直接用这个IP访问虚拟机。注意事项在办公室或公共网络中使用桥接模式需谨慎因为它将你的虚拟机直接暴露在局域网中。NAT模式是更安全、更简单的默认选择。7. 常见问题与排查技巧实录即使按照步骤操作你也可能会遇到一些问题。这里记录了几个最常见的问题和解决方法。7.1 虚拟机启动报错“VMware Workstation cannot connect to the virtual machine”可能原因后台进程冲突或虚拟机文件损坏。排查步骤完全关闭VMware Workstation Player。打开任务管理器Windows结束所有vmware-开头的进程。找到你的虚拟机存储目录通常在你的文档或指定位置除了.vmx和.vmdk文件可以尝试删除后缀为.lck的文件夹或文件这是锁文件。重新启动VMware并打开虚拟机。7.2 安装Docker时apt update报错GPG error或NO_PUBKEY可能原因添加Docker源时GPG密钥验证失败或密钥过期。解决方法# 重新下载并导入密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 再次更新 sudo apt update如果还不行可以尝试临时忽略签名检查仅用于测试不推荐生产环境sudo apt update --allow-insecure-repositories7.3 运行docker run命令时速度极慢或卡在“Pulling from library/...”可能原因默认的Docker Hub镜像服务器在国外国内访问速度慢。解决方法配置国内镜像加速器。编辑或创建Docker守护进程的配置文件sudo nano /etc/docker/daemon.json输入以下内容以阿里云镜像加速器为例你需要去阿里云容器镜像服务控制台获取专属加速器地址{ registry-mirrors: [https://your-mirror.mirror.aliyuncs.com] }保存退出后重启Docker服务使配置生效sudo systemctl restart docker7.4 虚拟机内可以ping通外网但宿主机无法ping通虚拟机可能原因NAT模式这是NAT模式的正常现象。默认情况下NAT模式不允许从外部包括宿主机主动发起对虚拟机的ICMPping请求。但TCP/UDP连接可以通过我们前面设置的端口转发来建立。验证方法在虚拟机内启动一个简单的Web服务比如docker run -d -p 80:80 nginx然后在宿主机浏览器访问http://[虚拟机IP]:80。如果能访问说明网络是通的只是ICMP被禁了。7.5 Docker命令提示“Cannot connect to the Docker daemon”可能原因Docker服务没有运行或者当前用户没有docker组的权限。排查步骤检查Docker服务状态sudo systemctl status docker。如果没运行启动它sudo systemctl start docker。如果服务是运行的检查当前用户是否在docker组groups $USER。如果输出中没有docker请参考5.6节添加用户到组并重新登录。检查Docker套接字文件权限ls -l /var/run/docker.sock。所有者应为root:docker。8. 进阶配置与日常使用建议环境搭好了最后分享几个让这个环境更好用的配置和小技巧。8.1 配置SSH密钥登录免密码每次登录虚拟机都要输密码很麻烦。我们可以配置SSH密钥对实现免密登录。在宿主机生成密钥对如果还没有Windows (PowerShell或Git Bash):ssh-keygen -t rsa -b 4096macOS/Linux: 命令相同。 一路回车使用默认路径~/.ssh/id_rsa。将公钥复制到虚拟机# 在宿主机执行将 [虚拟机IP] 替换为你的虚拟机IP ssh-copy-id docker-user[虚拟机IP]输入一次虚拟机密码。测试免密登录ssh docker-user[虚拟机IP]现在你应该可以直接登录无需密码。8.2 安装常用工具一个干净的Server系统缺少一些常用工具可以按需安装# 网络诊断工具 sudo apt install -y net-tools iputils-ping traceroute # 文本编辑器 (vim 或 nano) sudo apt install -y vim # 查看进程和系统状态的工具 sudo apt install -y htop8.3 管理虚拟机状态挂起 vs 关机VMware提供了“挂起”功能。这相当于让虚拟机进入休眠状态下次启动速度极快并且会完全恢复到挂起时的状态包括运行中的程序。适合短期离开。而“关机”则是完全关闭虚拟机操作系统下次是冷启动。创建快照在进行任何重大变更如安装新软件、修改核心配置之前可以在VMware中为虚拟机创建一个“快照”。这是一个系统状态的完整备份点。如果后续操作搞砸了可以一键回滚到这个快照点这是虚拟机带来的巨大便利。8.4 Docker初体验运行你的第一个真实服务让我们用Docker运行一个比hello-world更实用的服务比如一个Redis数据库# 拉取Redis最新镜像 docker pull redis # 以后台模式运行一个名为“my-redis”的Redis容器并映射端口6379 docker run -d --name my-redis -p 6379:6379 redis # 查看运行中的容器 docker ps # 进入容器内部执行命令 docker exec -it my-redis redis-cli # 在redis-cli里可以测试输入 ping会返回 PONG通过这个简单的例子你就能体会到Docker的便捷无需在宿主机这里是你的Ubuntu虚拟机上安装任何Redis的依赖一个命令就获得了一个完全隔离、可随时销毁和重建的数据库服务。