电脑不想重装系统也能体验Linux用Docker安装Ubuntu从零开始新手教程
你是不是也动过这个念头:想试试Linux,又怕装双系统把现在的Windows搞崩,嫌虚拟机慢,或者单纯不想动分区表?说实话,这种顾虑太正常了。以前我们确实得折腾硬盘、改BIOS、找ISO镜像,但现在事情简单太多了。你只需要一个东西:Docker。它能在你现有的系统里划出一块完全隔离的Linux空间,用完关掉,原系统连一根头发丝都不会少。
下面我把整个路径拆得很细,哪怕你从来没碰过命令行,也能一步步把Ubuntu跑起来。
先说句实话:Docker到底是个啥?
别被那些技术文档里的“容器”“镜像”“守护进程”吓到。你可以把它想象成一套带锁的独立公寓。
你的电脑是整栋大楼,Windows或macOS是地基和水电。Docker在这栋楼里隔出一间只属于Linux的房间,这间房里装的是Ubuntu。你在里面装软件、改配置、删文件,全都只发生在这个房间里。关上门,外面的系统完全无感。房间关掉后,里面的东西默认会消失,但你也可以提前把重要文件“搬”到外面,下次再住进来时还能接着用。
和传统虚拟机比,Docker更轻、更快、启动几乎秒开,因为它直接复用宿主机的内核,不用模拟整台硬件。代价是它主要擅长跑服务、命令行工具、开发环境,图形桌面不是它的强项,后面我会告诉你怎么取舍。
装Docker:Windows、Mac、Linux各走各的路
Docker有个官方桌面版叫 Docker Desktop,图形界面+后台守护进程都帮你包好了,新手直接用这个最省心。
Windows 用户
现在Docker Desktop在Windows上已经深度绑定 WSL 2(Windows Subsystem for Linux)。你不需要自己装Linux发行版,但需要确认WSL功能已开启。
以管理员身份打开 PowerShell,跑这一行:
wsl --install
跑完后重启电脑。重启后会提示你设置用户名和密码,随便填,记住就行。之后在终端输入:
wsl --version
能看到版本号就说明地基打好了。接下来去 Docker 官网下载 Docker Desktop for Windows,一路下一步安装,安装完成会提示你再重启一次。重启后打开 Docker Desktop,左下角状态栏显示 Engine: running 就成功了。
macOS 用户
Apple Silicon(M1/M2/M3/M4)和 Intel Mac 都能用,Docker Desktop 自带虚拟化层,不用折腾。直接去官网下载安装 .dmg,拖进应用程序,首次打开会提示输入密码授权,允许即可。
Linux 用户
如果你用的是 Ubuntu/Debian,终端里直接:
sudo apt update
sudo apt install -y docker.io docker-compose-plugin
sudo systemctl start docker
sudo systemctl enable docker
有些发行版推荐用官方脚本装最新稳定版:
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
newgrp docker
装完后所有平台都可以用同一套命令验证:
docker --version
docker info
看到版本号和服务器信息,说明Docker已经乖乖待命了。
拉取Ubuntu:等它下载完就像拿到了一个U盘启动盘
Docker里的Ubuntu不是“安装”进去的,而是从网上“拉”下来的。这个“拉”的动作叫 pull,拉下来的东西叫镜像(Image)。你可以把它理解成一个冻结好的、只读的Ubuntu快照,里面已经包含了最小系统的文件、包管理器、基础工具。
在终端输入:
docker pull ubuntu
默认拉的是最新版Ubuntu(目前一般是24.04 LTS)。如果你想固定版本,比如长期支持且更稳定的22.04:
docker pull ubuntu:22.04
下载速度取决于网络,通常几十到几百MB,几分钟就能完。你可以随时用 docker images 查看你已经拉了哪些镜像。
跑起来:第一次看到那个黑底白字的终端
镜像有了,现在要把它“跑”成一个正在运行的容器(Container)。
输入:
docker run -it --name my-ubuntu ubuntu bash
这行命令看起来长,其实每个参数都有明确意思:
docker run:创建并启动一个新容器-i:保持标准输入打开(让你能打字)-t:分配一个伪终端(让命令行有颜色、能回显)--name my-ubuntu:给它起个名字叫my-ubuntu,后面找它方便ubuntu:用哪个镜像启动bash:启动后默认执行 bash 解释器
回车后,屏幕应该会变成类似这样:
root@7f3a9b2c1d4e:/#
恭喜你,你已经站在Ubuntu里面了。前面的那串字母数字是容器ID的前几位,每次新建都会变。你现在就是 root 用户,权限拉满,装软件、改配置都不用加 sudo。
退出很简单,直接输入:
exit
容器会停止运行,但不会自动删除。
在里面干点正经事:包管理、环境配置、常用命令
既然进了Ubuntu,当然得体验一下Linux的日常操作。
更新软件源
刚进来的Ubuntu像一台刚出厂的机器,软件列表很旧。先刷新:
apt update
如果想顺便升级系统自带的基础包:
apt upgrade -y
-y 的意思是“遇到确认提示直接选是”,新手防手滑神器。
装几个常用工具
apt install -y curl vim htop git python3 python3-pip
curl:下载网页/文件vim:经典文本编辑器(新手可以先装nano,比vim友好)htop:看CPU/内存的可视化工具git:代码版本管理python3和pip:Python运行环境
装完后可以随手验证:
python3 --version
git --version
curl ifconfig.me
最后一行会返回你宿主机的公网IP,说明网络是通的。
和宿主机共享文件
很多人第一次进容器会发现:我在外面建的文件,里面看不到。这是因为容器有独立的文件系统。解决办法是挂载目录,后面会详细讲。现在先记住一个临时方案:用 docker cp 传文件。
# 宿主机终端(退出容器后)
docker cp myfile.txt my-ubuntu:/root/myfile.txt
进容器后再看:
ls /root/
cat /root/myfile.txt
别让辛苦折腾的数据随波逐流:挂载目录
这是新手最容易忽略、但最重要的一步。
Docker容器默认是“用完即弃”的。你关了容器,里面新装的软件、新建的文件、改过的配置,如果没有额外处理,下次再用同名容器启动时,它们就没了。
真正干活的方式是把宿主机的一个文件夹映射到容器内部。这样你在外面编辑的文件,容器里实时可见;容器里产生的日志、数据库、代码,也会自动存在你指定的位置。
启动时加上 -v 参数:
docker run -it --name my-ubuntu -v ~/linux-workspace:/workspace ubuntu bash
含义:
-v:volume,挂载卷~/linux-workspace:宿主机路径(Windows用户可写成C:\Users\你的用户名\linux-workspace)/workspace:容器内的目标路径
进容器后:
cd /workspace
echo "Hello Linux" > greeting.txt
ls
然后 exit 退出,回到宿主机,你会发现 ~/linux-workspace/greeting.txt 已经安静躺在那里了。这就是数据持久化的核心思路。
实战演练:写个Python小脚本并常驻运行
光敲命令不过瘾,咱们跑一个完整的小流程。
在宿主机创建一个文件夹,比如 linux-workspace,里面建一个 hello.py:
#!/usr/bin/env python3
import time
from datetime import datetime
while True:
print(f"[{datetime.now()}] 容器还在跑,Linux真香")
time.sleep(5)
用挂载方式启动容器:
docker run -it --name my-ubuntu -v ~/linux-workspace:/workspace ubuntu bash
进容器后:
cd /workspace
python3 hello.py
你会看到每5秒打印一行时间戳。按 Ctrl+C 会停掉脚本,但容器不会退出。再按两次 Ctrl+D 或输入 exit 才会退出。
如果你想让这个脚本在后台一直跑,不用盯着终端,可以换一种启动方式:
docker run -d --name my-ubuntu -v ~/linux-workspace:/workspace ubuntu tail -f /dev/null
这里用了 -d(detached,后台运行),启动后容器会一直挂着。然后用:
docker exec -it my-ubuntu bash
随时钻进正在跑的容器里操作,就像远程连进去一样。
如果就是想看看Ubuntu的图形界面怎么办?
先说结论:Docker天生不适合跑完整桌面环境。图形界面吃内存、吃GPU、需要X11或Wayland转发,配置起来对新手并不友好。如果你只是想“看一眼Ubuntu长什么样”,其实用 Oracle VM VirtualBox 或 Windows 自带的 WSLg 更合适。
但如果你非要试,有一条相对靠谱的路:用 noVNC 把容器的终端通过浏览器访问。这不算图形桌面,但能在任何设备上用浏览器操作Linux,手机也能玩。
思路如下:
- 启动容器并挂载工作目录
- 在容器内安装
websockify和novnc - 暴露端口到宿主机
- 浏览器访问
http://localhost:6080
命令大概长这样:
docker run -it --name web-ubuntu -p 6080:6080 -v ~/linux-workspace:/workspace ubuntu bash
进容器后:
apt update && apt install -y novnc websockify xterm
websockify --web=/usr/share/novnc 6080 localhost:6080 &
xterm &
然后打开浏览器访问 http://localhost:6080。你会看到一个网页版的终端。体验一般,但胜在不装额外桌面环境,不占太多资源。
老实说,如果你只是好奇Linux,命令行已经能覆盖90%的日常需求。图形界面留给真正的桌面体验场景更合适。
踩坑急救包:docker ps、logs、权限、磁盘空间
新手阶段一定会遇到几个典型问题,提前给你备着。
容器不见了?
docker ps -a
-a 会列出所有容器,包括已停止的。找到名字或ID后,重新启动:
docker start my-ubuntu
docker attach my-ubuntu
attach 会重新接上终端,但注意:如果容器之前是在前台跑的,attach 进去可能会看到卡住的画面,这时候按 Ctrl+P 然后 Ctrl+Q 可以detach而不退出容器。
想知道容器里发生了什么?
docker logs my-ubuntu
docker logs -f my-ubuntu # 实时跟随日志
权限报错 Permission denied
如果你在外面创建了文件,进容器后发现不能编辑,通常是UID/GID不一致导致的。解决方法:启动时加上 --user $(id -u):$(id -g)(Linux/macOS)或 --user 1000:1000:
docker run -it --name my-ubuntu --user 1000:1000 -v ~/linux-workspace:/workspace ubuntu bash
磁盘快满了
Docker会偷偷吃掉不少空间。查看占用:
docker system df
清理已停止的容器、未使用的镜像和构建缓存:
docker system prune -a
⚠️ 这条命令会清理没有容器正在使用的镜像,如果你还没备份重要镜像,慎用。日常用 docker system prune 就够了。
玩够了怎么干干净净地撤掉
Docker的好处之一就是“不留痕迹”。想彻底清掉:
停止并删除容器:
docker stop my-ubuntu
docker rm my-ubuntu
删除镜像:
docker rmi ubuntu
如果连挂载的文件夹也不想留,直接在宿主机删掉 ~/linux-workspace 即可。你的Windows或macOS系统不会有任何残留注册表、驱动或服务。
卸载Docker Desktop本身也很干净:
- Windows:控制面板卸载,再手动删
C:\ProgramData\DockerDesktop和C:\Users\<你>\AppData\Local\Docker - macOS:把 Docker.app 拖进废纸篓,删
~/Library/Group Containers/group.com.docker - Linux:
sudo apt remove docker-desktop
最后聊两句
Docker装Ubuntu这条路,适合绝大多数“想试试Linux但不想折腾硬盘”的人。它让你用最轻的成本摸到apt、bash、权限、进程管理、网络配置这些Linux核心概念。等你在里面玩熟了,再决定要不要去装双系统、用WSL2、或者直接换桌面Linux,那时候你的选择就不是出于好奇,而是真的知道自己想要什么。
别怕敲错命令。Linux终端最大的优点就是:大多数破坏性操作都需要你主动确认,而且容器里重来一遍只要几秒。把这里的每一次报错当成说明书,读两遍,查一下 man <命令>,你会发现Linux其实比想象中更讲道理。
祝你玩得开心。