ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

从零搭建Linux虚拟机+Docker环境:VMware配置与容器化实战指南

从零搭建Linux虚拟机+Docker环境:VMware配置与容器化实战指南 1. 从零开始的虚拟化环境搭建为什么是Linux VMware Docker如果你是一名开发者、运维工程师或者对现代软件部署感兴趣的技术爱好者那么“Linux虚拟机”和“Docker”这两个词对你来说一定不陌生。你可能无数次看到过“一键部署”、“容器化”这样的宣传但当你真正想在自己的电脑上动手实践时却常常卡在第一步如何创建一个干净、可控的Linux环境来运行Docker网上的教程要么过于简略要么假设你已经有了一个现成的Linux服务器对于从Windows或macOS起步的初学者来说中间缺失的环节恰恰是最让人头疼的。这正是我们今天要解决的问题。我将以一个从业多年的老鸟视角带你完整地走一遍从零开始在个人电脑上创建Linux虚拟机并成功安装、配置Docker的全过程。这不仅仅是“下一步、下一步”的点击教程我会穿插大量我在实际工作中踩过的坑、总结的技巧以及每个步骤背后的“为什么”。比如为什么选择VMware而不是VirtualBox为什么在虚拟机里装Docker而不是直接在宿主机上装Docker DesktopLinux发行版选哪个更省心这些选择背后都关乎着你后续学习和使用的顺畅度。我们最终的目标是让你获得一个高度仿真的、隔离的Linux服务器环境。在这个环境里你可以随意折腾Docker拉取镜像、运行容器、练习编排而完全不用担心搞乱你的主力操作系统。这对于学习容器技术、测试软件兼容性、搭建个人开发环境来说是性价比最高、风险最低的方案。接下来我们就从最基础的虚拟机软件选择和安装说起。2. 基石之选VMware Workstation的安装与核心配置解析工欲善其事必先利其器。在个人电脑上虚拟化Linux首推VMware Workstation Pro或Player免费版。相较于其他虚拟化方案VMware在性能、网络模拟、与宿主机交互如文件共享、剪贴板同步方面做得更为成熟稳定特别适合需要长期使用和复杂配置的开发测试场景。2.1 VMware Workstation的获取与安装要点首先你需要从VMware官网下载对应你操作系统Windows或Linux的安装包。对于个人学习和非商业用途VMware Workstation Player的免费版本功能已经足够强大。安装过程本身是图形化的向导但有几个关键点需要特别注意这些点往往决定了后续虚拟机能否稳定运行。第一安装路径。尽量不要安装在C盘默认的程序文件夹。建议单独创建一个路径如D:\VMware。这样做的好处是将来虚拟机文件通常很大也可以集中存放在此路径下便于管理和备份避免C盘空间被快速耗尽。第二安装过程中的组件选择。安装向导会询问你是否安装“增强型键盘驱动程序”和“VMware USB Arbitration Service”等。我强烈建议全部勾选。尤其是“增强型键盘驱动程序”它能更好地处理不同语言键盘布局在宿主机和虚拟机之间的切换避免在Linux终端里输入命令时出现乱码或键位错乱的问题。第三也是最重要的一点确保BIOS/UEFI中的虚拟化技术Intel VT-x / AMD-V已开启。这是VMware以及后续Docker能够高效运行的硬件基础。很多朋友安装完VMware后启动虚拟机报错“此主机支持 Intel VT-x但 Intel VT-x 处于禁用状态”根源就在这里。重启电脑进入BIOS设置通常是开机时按F2、Del或F12键在“Advanced”或“Security”选项卡下找到“Virtualization Technology”或“Intel Virtualization Technology”选项将其设置为“Enabled”。这个步骤因主板品牌而异但关键词是“Virtualization”或“VT-x”。2.2 首次运行与许可证配置安装完成后首次运行VMware如果是Workstation Pro版本会要求你输入许可证密钥。你可以选择试用30天。对于Player版本则可以直接免费使用。这里有一个小技巧即使你暂时没有Pro版的密钥也可以先使用Player版完成所有学习和测试。两者的核心虚拟化引擎是一样的Player版只是缺少了一些高级功能如快照管理器、多虚拟机同时运行等对于单台Linux虚拟机的创建和Docker学习来说完全没有影响。启动后建议先进入“编辑” - “首选项”进行一些全局设置。在“工作区”选项卡可以设置默认的虚拟机存放位置我通常会指向一个空间充足的硬盘分区比如E:\VM\。在“内存”选项卡你可以根据宿主机物理内存大小设定一个分配给虚拟机的默认上限防止创建虚拟机时不小心分配过多内存导致宿主机卡顿。对于一台主要用来跑Docker的Linux虚拟机分配2GB-4GB内存是合理的起点。3. 打造你的专属实验场创建并优化CentOS/Rocky Linux虚拟机虚拟机软件准备好了接下来就是选择并安装一个Linux发行版。对于容器和运维领域CentOS的替代者——Rocky Linux或者Ubuntu Server LTS都是极佳的选择。它们拥有庞大的社区支持和稳定的软件源。这里我以Rocky Linux为例因为它完全继承了CentOS的稳定性和企业级特性且生命周期有保障。3.1 虚拟机创建与系统安装的魔鬼细节打开VMware点击“创建新的虚拟机”。选择“典型”配置即可。在安装来源页面选择你提前下载好的Rocky Linux ISO镜像文件。VMware会自动检测到这是一个Linux系统并推荐使用“CentOS 64位”作为客户机操作系统对于Rocky Linux 8/9选CentOS 8/9 64位完全兼容。接下来是命名和位置给你的虚拟机起个有意义的名字比如docker-lab-rocky9位置指向你之前设定的VM目录。然后是磁盘容量分配这是第一个容易踩坑的地方。VMware会建议默认大小例如20GB并选择“将虚拟磁盘拆分成多个文件”。对于在机械硬盘上运行选择“拆分”可以提高磁盘性能和大文件传输的灵活性。但对于SSD区别不大。我更关注的是下面这个选项“立即分配所有磁盘空间”。千万不要勾选这个如果勾选VMware会立刻在你的物理硬盘上划出20GB的空间并占满即使虚拟机内部只用了5GB。我们应该选择“动态分配”这样虚拟磁盘文件会随着虚拟机内实际使用量的增长而增长最大不超过20GB非常节省宿主机空间。分配内存和CPU核心数时请量力而行。对于学习用的Docker主机2GB内存、2个CPU核心是流畅运行的底线。如果你的宿主机有16GB内存分配给虚拟机4GB内存和4个核心将会获得更佳的体验。安装过程在虚拟机内进行与物理机安装无异。有几个关键配置需要注意软件选择在安装信息摘要界面点击“软件选择”。默认是最小安装Minimal Install。对于Docker环境我推荐选择“带GUI的服务器”Server with GUI或至少是“开发工具”Development Tools。前者会包含图形界面对于不熟悉纯命令行的新手更友好后者则包含了编译器等必要工具能避免后续安装某些依赖时再折腾。网络和主机名务必在这里就打开以太网连接通常显示为“未连接”点击开关变为“已连接”。同时设置一个主机名如docker-host。磁盘分区对于实验环境直接使用自动配置的LVM分区方案即可无需手动调整。根密码和用户创建设置一个强壮的root密码并创建一个普通用户如docker-user同时将其设为管理员在创建用户时勾选“将此用户设为管理员”这样以后就可以用sudo来执行特权命令比直接使用root更安全。安装完成后重启虚拟机。首次启动会有一个初始化设置接受许可证完成一些简单配置即可进入系统。3.2 安装后的首要优化VMware Tools与基础配置系统装好了但你会发现屏幕分辨率可能不对也无法在宿主机和虚拟机之间拖拽文件。这是因为缺少了VMware Tools或Open VM Tools。这是VMware提供的一套驱动和实用程序用于提升虚拟机的性能与用户体验。对于Rocky Linux/CentOS 8/9安装Open VM Tools开源版本是最简单的方式。打开终端执行以下命令sudo dnf install open-vm-tools -y对于带GUI的安装还可以安装桌面增强组件sudo dnf install open-vm-tools-desktop -y安装完成后重启虚拟机。你会发现现在可以自由调整虚拟机窗口大小了剪贴板也能在宿主机和虚拟机之间共享。文件共享功能需要在VMware的虚拟机设置中单独配置在“选项” - “共享文件夹”中添加宿主机上你希望共享的目录并勾选“始终启用”。在虚拟机内共享的文件夹通常位于/mnt/hgfs/目录下。接下来进行一些基础的系统优化。首先是更新系统sudo dnf update -y然后如果你身处国内为了获得更快的软件下载速度建议更换DNF的软件源为国内镜像。以阿里云镜像为例适用于Rocky Linux 9sudo sed -e s|^mirrorlist|#mirrorlist|g \ -e s|^#baseurlhttp://dl.rockylinux.org/$contentdir|baseurlhttps://mirrors.aliyun.com/rockylinux|g \ -i.bak \ /etc/yum.repos.d/rocky-*.repo sudo dnf makecache最后设置静态IP地址可选但推荐。在实验环境中一个固定的IP地址会让你后续通过SSH连接、配置Docker网络时更加方便。编辑网络配置文件网卡名称可能不同通常是ens33或eth0sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33将BOOTPROTO从dhcp改为static并添加以下配置请根据你的实际网络环境调整BOOTPROTOstatic IPADDR192.168.xxx.xxx # 你希望设置的静态IP NETMASK255.255.255.0 GATEWAY192.168.xxx.1 # 你的网关通常是宿主机VMnet8的IP DNS18.8.8.8 ONBOOTyes保存后重启网络服务sudo systemctl restart network。现在你的Linux虚拟机已经是一个稳定、高效且易于使用的实验平台了。4. Docker引擎的安装与深度配置不止于curl | bash虚拟机环境就绪现在可以安装主角Docker了。虽然Docker官方提供了一键安装脚本但作为一名严谨的从业者我强烈建议通过配置官方软件源的方式进行安装。这种方式更透明、更安全也便于后续的版本管理和更新。4.1 通过官方仓库安装Docker CE首先卸载任何可能存在的旧版本Docker如果是全新系统可跳过sudo dnf remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine接着安装必要的依赖包这些包允许dnf通过HTTPS使用仓库sudo dnf install -y yum-utils device-mapper-persistent-data lvm2然后添加Docker的官方稳定版仓库。这里有一个关键选择是使用Docker官方源还是使用国内镜像源如阿里云对于国内用户使用镜像源速度会快很多。# 添加阿里云Docker CE镜像源适用于Rocky Linux/CentOS sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo如果你希望使用官方源则将URL替换为https://download.docker.com/linux/centos/docker-ce.repo。更新软件包索引并安装Docker引擎、命令行工具以及容器运行时containerd.iosudo dnf makecache fast sudo dnf install -y docker-ce docker-ce-cli containerd.io安装完成后启动Docker服务并设置开机自启sudo systemctl start docker sudo systemctl enable docker最后验证安装是否成功。运行经典的hello-world镜像sudo docker run hello-world如果看到“Hello from Docker!”等欢迎信息说明Docker引擎已经安装并运行正常。4.2 配置非root用户运行Docker与镜像加速默认情况下运行Docker命令需要sudo权限。为了方便我们可以将当前用户加入docker用户组这样以后就可以直接使用docker命令了。sudo usermod -aG docker $USER重要提示执行此命令后你需要完全注销当前用户并重新登录或者重启虚拟机用户组变更才会生效。这是一个常见的疏忽点很多人加了组后直接测试发现仍然需要sudo误以为是配置错误。接下来是至关重要的一步配置国内镜像加速器。从Docker Hub直接拉取镜像速度可能非常慢甚至失败。国内许多云服务商提供了免费的镜像加速服务。以阿里云为例你需要先注册阿里云账号进入“容器镜像服务” - “镜像工具” - “镜像加速器”会获得一个专属的加速器地址形如https://xxxx.mirror.aliyuncs.com。编辑Docker守护进程的配置文件sudo vi /etc/docker/daemon.json如果文件不存在则新建它。添加以下内容以阿里云加速器为例你可以配置多个{ registry-mirrors: [ https://xxxx.mirror.aliyuncs.com, https://hub-mirror.c.163.com, https://mirror.baidubce.com ] }保存文件后重新加载配置并重启Docker服务sudo systemctl daemon-reload sudo systemctl restart docker重启后可以通过sudo docker info命令查看在输出结果的末尾如果看到Registry Mirrors下列出了你配置的地址说明加速器配置成功。4.3 Docker的存储驱动与日志管理初探安装配置好后还有两个底层细节值得关注它们会影响Docker的长期稳定运行。首先是存储驱动。Docker使用存储驱动来管理镜像和容器的数据层。在Linux上默认的驱动通常是overlay2它对Rocky Linux/CentOS 8/9支持良好。你可以通过docker info | grep Storage来查看当前使用的驱动。除非有特殊需求否则不建议更改。overlay2在性能和稳定性上都是目前的最佳选择。其次是日志管理。Docker容器默认会将日志以JSON格式输出到文件如果不加管理日志文件可能会无限增长占满磁盘空间。我们可以通过配置Docker守护进程的日志驱动和日志轮转策略来预防。编辑/etc/docker/daemon.json在之前配置的基础上增加日志相关配置{ registry-mirrors: [...], log-driver: json-file, log-opts: { max-size: 10m, max-file: 3 } }这个配置将日志驱动设为json-file并设置单个日志文件最大10MB最多保留3个历史文件。同样修改后需要重启Docker服务。这是一个生产环境常用的基础配置能从源头避免因日志爆满导致的系统问题。5. 实战检验与排错指南运行你的第一个容器化应用理论配置都已就绪是时候用实战来检验我们的劳动成果了。我们将超越简单的hello-world部署一个真正有交互的Web应用并在这个过程中预演你可能遇到的一些典型问题及其排查思路。5.1 部署一个Nginx Web服务器容器让我们从运行一个标准的Nginx容器开始这是最经典的入门示例。执行以下命令docker run -d --name my-nginx -p 8080:80 nginx:alpine逐条解析这个命令docker run 创建并启动一个新容器。-d 后台detached模式运行容器。--name my-nginx 给容器起一个名字方便后续管理如停止、重启、查看日志而不是使用随机生成的ID。-p 8080:80 端口映射这是关键。它将宿主机的8080端口映射到容器内部的80端口Nginx默认监听80端口。nginx:alpine 指定要使用的镜像。我们使用了alpine标签这是一个基于Alpine Linux的极简镜像体积非常小只有几MB非常适合学习和测试。命令执行后Docker会先检查本地是否有nginx:alpine镜像如果没有则会从配置的镜像加速器拉取。拉取完成后容器在后台启动。现在打开你宿主机上的浏览器访问http://你的虚拟机IP:8080。你应该能看到Nginx的欢迎页面。恭喜你你的第一个容器化应用已经成功运行这个简单的操作背后Docker完成了镜像拉取、容器创建、网络命名空间隔离、端口映射等一系列复杂工作。5.2 常见问题排查与调试命令事情并非总是一帆风顺。下面列举几个新手常遇到的问题及排查方法问题1访问http://虚拟机IP:8080无响应。这是最常见的问题。请按以下步骤排查检查容器状态运行docker ps。你应该能看到名为my-nginx的容器状态为Up。如果状态是Exited说明容器启动失败了。使用docker logs my-nginx查看容器日志通常错误信息会直接告诉你原因例如端口已被占用。检查端口映射运行docker port my-nginx。它会显示容器的端口映射情况确认是否将容器的80端口映射到了宿主机的8080。检查虚拟机防火墙Rocky Linux/CentOS默认启用了防火墙firewalld。它可能阻止了外部对8080端口的访问。你需要放行该端口sudo firewall-cmd --permanent --add-port8080/tcp sudo firewall-cmd --reload检查宿主机与虚拟机网络确保你的宿主机能ping通虚拟机的IP地址。在VMware中虚拟机的网络适配器通常设置为“NAT模式”这会让虚拟机处在一个虚拟的子网中。确保虚拟机的IP如192.168.xxx.xxx和宿主机VMnet8网卡的IP如192.168.xxx.1在同一个网段。问题2执行docker命令提示“权限被拒绝”。这通常是因为你没有将用户加入docker组或者加了组但没有重新登录。请再次确认groups $USER查看输出中是否包含docker组。如果不包含请执行sudo usermod -aG docker $USER后务必注销并重新登录。问题3拉取镜像速度极慢或失败。这大概率是镜像加速器未生效。请检查sudo docker info | grep -A 5 Mirrors确认你的加速器地址在列表中。如果不在请检查/etc/docker/daemon.json文件的格式是否正确必须是合法的JSON并确保重启了Docker服务。5.3 容器生命周期管理与数据持久化初体验掌握了运行和排查我们再来学习容器的基本管理和一个核心概念数据持久化。基本管理命令docker ps 查看正在运行的容器。docker ps -a 查看所有容器包括已停止的。docker stop my-nginx 停止运行中的容器。docker start my-nginx 启动已停止的容器。docker rm my-nginx 删除已停止的容器加-f参数可强制删除运行中的容器。docker images 查看本地镜像列表。docker rmi nginx:alpine 删除本地镜像需先删除依赖它的容器。数据持久化实战默认情况下容器内创建的文件只存在于容器的可写层中。当容器被删除这些数据也会丢失。为了实现数据持久化我们需要使用“卷挂载”Volume Mounts或“绑定挂载”Bind Mounts。例如我们想修改Nginx的默认欢迎页面并让修改在容器重启后依然保留。可以这样做在宿主机虚拟机内创建一个目录存放我们的网页文件mkdir ~/my-nginx-html echo h1Hello from My Custom Nginx Container!/h1 ~/my-nginx-html/index.html停止并删除旧的Nginx容器docker rm -f my-nginx。运行一个新的Nginx容器并将宿主机目录挂载到容器内的网页根目录docker run -d --name my-nginx \ -p 8080:80 \ -v /home/your-user/my-nginx-html:/usr/share/nginx/html:ro \ nginx:alpine这里-v参数用于挂载。/home/your-user/my-nginx-html是宿主机目录/usr/share/nginx/html是容器内Nginx的默认网页根目录ro表示以只读方式挂载防止容器内进程误删宿主机文件。再次访问http://虚拟机IP:8080你会看到自定义的欢迎语。即使你删除并重新创建这个容器只要挂载同一个宿主机目录数据就不会丢失。通过这个完整的流程——从虚拟机创建、系统优化到Docker的安装、配置、运行和基础管理——你已经搭建起了一个功能完备的容器化学习和实验环境。这个环境隔离、安全、可随意重置是你探索更广阔的云原生世界如Docker Compose、Kubernetes的绝佳起点。记住所有复杂的技能都源于对基础环境的熟练掌控现在你已经拥有了这块坚实的基石。
返回列表