5·基础入门入门

虚拟机与容器中使用 Linux

vmwarevirtualboxwsl

第5课 - 虚拟机与容器中使用 Linux

学习目标

  1. 理解虚拟化与容器化的基本区别:能够清晰解释虚拟机(VM)和容器(Container)的核心差异。
  2. 掌握主流Linux虚拟机软件的安装与使用:能够在VirtualBox或VMware Workstation Player中创建、启动并连接一台Linux虚拟机。
  3. 学会在Windows中通过WSL使用Linux:能够安装并配置Windows Subsystem for Linux (WSL),在Windows终端里直接运行Linux命令和应用。
  4. 初步接触Docker容器技术:能够拉取一个官方的Linux镜像(如Ubuntu),并使用Docker运行一个简单的容器。

核心概念

在上一课,我们学习了如何将Linux直接安装在物理电脑上(称为“裸机安装”)。然而,在开发、测试和学习中,我们更常用的是虚拟化技术。这主要有两种形式:

  1. 虚拟机(Virtual Machine, VM)

    • 它是什么:虚拟机就像是在你当前的操作系统(如Windows/macOS,称为“宿主机”)里,用软件完全模拟出来的一台“假电脑”。这台假电脑拥有自己的虚拟CPU、内存、硬盘,并在上面安装一个完整的、独立的操作系统(称为“客户机操作系统”)。
    • 通俗比喻:好比你在自己家里(宿主机),用隔板和家具打造了一个完全独立、带独立水电表的小房间(虚拟机)。这个小房间里有自己的一套家具和生活设施(客户机OS及应用),与你家其他部分完全隔离。
    • 常见软件
      • VMware Workstation Player:功能强大,性能优秀,个人非商业用途免费。
      • Oracle VirtualBox:完全免费且开源,跨平台,社区活跃。
  2. 容器(Container)

    • 它是什么:容器是一种更轻量级的虚拟化技术。它不模拟整个硬件,而是共享宿主机的操作系统内核,但在其上隔离出独立的用户空间来运行应用。容器内通常只包含应用及其运行所必需的库和依赖。
    • 通俗比喻:好比在一栋公寓楼(宿主机OS内核)里,每个住户(容器)都有自己独立的门牌号和房间(隔离的环境),但他们共享大楼的供水、供电和地基。住户搬家(部署应用)非常快捷,因为不需要带着大楼一起搬。
    • 通俗对比:虚拟机是 “模拟硬件,运行完整系统”,容器是 “共享内核,隔离应用”
  3. Windows子系统 for Linux(WSL)

    • 它是什么:这是微软提供的一项技术,让开发者能直接在Windows上运行一个原生的Linux二进制可执行文件(ELF格式),而无需传统虚拟机的开销。WSL 2版本其实在底层运行了一个真正的Linux内核(通过一个高度优化的轻量级虚拟机),但对用户来说,体验与在Linux终端中无异。
    • 通俗比喻:WSL就像是在Windows大楼里,为你直接开了一扇通往Linux花园的便捷小门。你可以直接走进去(使用bash命令行)使用Linux工具,而无需先经过建造另一栋大楼(传统虚拟机)的繁琐过程。

代码示例

以下示例展示如何在已经安装了相应软件的环境下进行基本操作。

示例1:使用VirtualBox命令行(VBoxManage)创建一个虚拟机

虽然通常使用图形界面(GUI)创建虚拟机,但了解命令行方式有助于自动化。以下是一个简化的示例脚本。

#!/bin/bash
# 说明:此脚本为演示目的,实际参数需根据你的环境调整。
# 前提:已安装VirtualBox,并确保VBoxManage命令可用。

# 1. 创建一个新的虚拟机,命名为“MyUbuntuVM”,类型为Linux,版本为Ubuntu (64-bit)
VBoxManage createvm --name "MyUbuntuVM" --ostype "Ubuntu_64" --register

# 2. 配置虚拟机的内存和CPU(例如:2GB内存,2个CPU核心)
VBoxManage modifyvm "MyUbuntuVM" --memory 2048 --cpus 2

# 3. 创建一个虚拟硬盘(动态分配,大小20GB)
VBoxManage createhd --filename "MyUbuntuVM.vdi" --size 20480 --variant Standard

# 4. 将创建的硬盘连接到虚拟机的SATA控制器
VBoxManage storagectl "MyUbuntuVM" --name "SATA Controller" --add sata --controller IntelAHCI
VBoxManage storageattach "MyUbuntuVM" --storagectl "SATA Controller" --port 0 --device 0 --type hdd --medium "MyUbuntuVM.vdi"

# 5. 挂载下载好的Ubuntu ISO镜像文件(请替换为你实际ISO的路径)
VBoxManage storageattach "MyUbuntuVM" --storagectl "SATA Controller" --port 1 --device 0 --type dvddrive --medium "/path/to/ubuntu-22.04-desktop-amd64.iso"

# 6. 设置启动顺序为先光驱后硬盘
VBoxManage modifyvm "MyUbuntuVM" --boot1 dvd --boot2 disk --boot3 none --boot4 none

echo "虚拟机 ‘MyUbuntuVM’ 创建完成。请通过VirtualBox GUI启动它并开始安装Ubuntu。"

示例2:在WSL中运行基本的Linux命令

假设你已安装并配置好WSL(以Ubuntu发行版为例)。

# 打开Windows的PowerShell或命令提示符,直接输入以下命令
# 1. 启动默认的WSL发行版(如Ubuntu)
wsl
# 或者,如果你安装了多个发行版,指定一个
# wsl -d Ubuntu-22.04

# 现在你已经进入了Linux环境,可以运行任何Linux命令:
whoami  # 查看当前用户名
ls -la  # 列出当前目录的详细文件信息
cat /etc/os-release # 查看Linux发行版信息
sudo apt update && sudo apt upgrade -y # 更新软件包列表和已安装的软件

# 从WSL中访问Windows文件系统:Windows的C盘挂载在 /mnt/c
ls /mnt/c/Users/YourWindowsUsername/Desktop

示例3:使用Docker运行一个Linux容器

假设你已在系统(Windows/macOS/Linux)上安装并启动了Docker Desktop。

# 1. 从Docker Hub拉取最新的Ubuntu镜像
docker pull ubuntu:latest

# 2. 查看本地已有的镜像
docker images

# 3. 运行一个Ubuntu容器,并进入其交互式bash shell
# -it:-i 表示保持标准输入打开,-t 表示分配一个伪终端
# --rm:容器退出后自动删除(用于一次性任务或练习)
# /bin/bash:在容器内运行bash shell
docker run -it --rm ubuntu /bin/bash

# 现在你已经进入了一个Ubuntu容器内部,可以运行命令:
cat /etc/os-release  # 你会发现这是Ubuntu系统
apt update           # 尝试更新(容器内默认以root用户运行)
exit                 # 输入exit退出容器,由于有--rm参数,容器会被自动删除

实践练习

练习1:虚拟机初体验(简单)

目标:使用VirtualBox或VMware创建一台虚拟机并启动。 步骤

  1. 下载并安装VirtualBox(或VMware Workstation Player)。
  2. 下载一个轻量级的Linux发行版ISO镜像,例如 XubuntuLubuntu(比标准Ubuntu更轻量)。
  3. 使用软件的**图形界面(GUI)**创建一台新虚拟机,建议配置:内存1GB,硬盘15GB。
  4. 启动虚拟机,并完成Linux系统的安装过程(通常一路默认即可)。
  5. 安装完成后,登录桌面,并尝试打开终端输入 lsb_release -a 查看系统信息。 预期输出:你将看到一个运行在虚拟机窗口内的Linux桌面环境,并且能在终端中成功执行命令。

练习2:WSL探索之旅(中等)

目标:在Windows上安装并使用WSL。 步骤

  1. 以管理员身份打开PowerShell,运行 wsl --install 命令。此命令会自动启用必要的Windows功能、下载最新的Linux内核并安装默认的Ubuntu发行版。
  2. 安装完成后,重启电脑。在开始菜单中找到并启动“Ubuntu”。
  3. 按照提示设置用户名和密码。
  4. 在WSL的Ubuntu终端中,完成以下任务: a. 使用 pwd 查看当前工作目录。 b. 使用 mkdir ~/my_linux_project 创建一个新目录。 c. 使用 cd ~/my_linux_project 进入该目录。 d. 使用 touch hello.txt 创建一个空文件。 e. 使用 echo "Hello from WSL!" > hello.txt 向文件写入内容。 f. 使用 cat hello.txt 查看文件内容。 预期输出:你在终端中依次执行命令,最后将成功输出“Hello from WSL!”。你可以在Windows的文件管理器中输入 \\wsl$\Ubuntu 来查看这个文件是否真的被创建了。

练习3:Docker容器快闪(进阶)

目标:使用Docker运行一个Nginx Web服务器容器。 步骤

  1. 确保Docker Desktop正在运行。
  2. 打开终端(PowerShell/WSL/Linux/macOS Terminal)。
  3. 运行命令拉取Nginx镜像:docker pull nginx:alpine
  4. 运行一个Nginx容器,并将容器的80端口映射到你本机的8080端口:
    docker run -d -p 8080:80 --name my-nginx-server nginx:alpine
    
    • -d: 后台运行容器。
    • -p 8080:80: 端口映射,访问本地8080端口等于访问容器的80端口。
    • --name my-nginx-server: 给容器起个名字。
  5. 打开浏览器,访问 http://localhost:8080
  6. 查看运行中的容器:docker ps
  7. 停止并删除容器:docker stop my-nginx-server 然后 docker rm my-nginx-server 预期输出:浏览器中应显示Nginx的欢迎页面。通过docker ps命令可以看到正在运行的容器信息。

常见错误

  1. 虚拟机运行缓慢或卡顿

    • 原因:分配的内存或CPU核心数不足,或者宿主机本身资源紧张。虚拟机同时在运行时,会与宿主机争抢资源。
    • 解决:合理分配资源(不要超过物理资源的50%),关闭虚拟机中不必要的视觉效果,考虑使用轻量级发行版。
  2. 虚拟机无法上网

    • 原因:虚拟机的网络模式设置错误。默认的“NAT”模式最简单,通常能让虚拟机通过宿主机共享上网。
    • 解决:检查虚拟机网络设置,确保选择了“NAT”模式。如果需要在局域网内让其他设备访问虚拟机,则应使用“桥接”模式。
  3. WSL无法安装或启动

    • 原因:Windows版本过旧,或未启用必要的“虚拟机平台”和“适用于Linux的Windows子系统”功能。
    • 解决:确保Windows 10版本2004及以上或Windows 11。在PowerShell(管理员)中运行 wsl --status 检查状态,并手动启用功能:dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestartdism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart,然后重启。
  4. Docker命令报错 “Cannot connect to the Docker daemon”

    • 原因:Docker守护进程(服务)没有启动。
    • 解决:在Windows或macOS上,确保Docker Desktop应用程序已经启动并正在运行。在Linux上,使用sudo systemctl start docker命令启动服务。
  5. 混淆WSL 1和WSL 2

    • 原因:WSL 1和WSL 2架构不同,WSL 2性能更好,支持完整的系统调用兼容性。
    • 解决:建议使用WSL 2。在PowerShell中运行 wsl --set-default-version 2 设置默认版本。对于已安装的发行版,可以通过 wsl --set-version <发行版名称> 2 进行转换。

小结

本课我们探索了在Linux学习和使用中两种最重要的“寄宿”方式:

  • 虚拟机(VM)重量级、完全隔离的解决方案。它提供最接近物理机的体验,非常适合需要不同操作系统或进行严格隔离测试的场景。VMware和VirtualBox是两个主力工具。
  • 容器(特别是Docker)轻量级、高效敏捷的解决方案。它专注于应用及其依赖的打包和运行,是现代云原生和微服务架构的基石。容器启动速度快,资源占用少。
  • WSL 则是Windows开发者无缝使用Linux工具链的桥梁。它几乎消除了环境切换的隔阂,让你在Windows的舒适区内获得强大的Linux能力,是学习命令行和Linux工具的绝佳起点。

选择哪种技术取决于你的具体需求:

  • 需要完整的图形桌面和操作系统 -> 虚拟机
  • 需要快速部署和隔离应用程序 -> 容器
  • 在Windows上进行开发、学习Linux命令 -> WSL

掌握这些工具,将极大地扩展你的学习路径和工作灵活性。现在,你可以根据实践练习,开始你的虚拟化之旅了!

练习编辑器

rust
Loading...

继续学习

完成本课后,建议继续学习下一课「终端与命令行基础」 以巩固所学知识。