“明明在我的电脑上是可以运行的。”
在部署 OpenChain 时,我曾深陷环境配置的泥潭。虚拟机当然可以解决环境隔离问题,但它也带来了资源占用高、操作冗余、启动缓慢等问题。相比之下,Docker 更轻,也更适合开发环境复现。
另外,在摸索用 Docker 配置 Ubuntu 环境运行 DataLab 时,我发现网上教程并不多。已有内容也经常充满术语和跳步,对新手不太友好。所以这篇文章会尽量用平实的方式,把 Docker 基本概念和 DataLab 环境配置讲清楚。
1. Docker 介绍#
1.1 容器化是什么#
Docker 是一个开源容器化平台。它通过操作系统级虚拟化技术,把应用程序及其依赖环境(代码、运行时、系统工具、系统库等)打包成标准化、轻量级的容器(Container)。
相较于传统虚拟机:
| 特性 | Docker容器 | 虚拟机 |
|---|---|---|
| 虚拟化层级 | OS级 | 硬件级 |
| 启动速度 | 秒级 | 分钟级 |
| 资源占用 | MB级 | GB级 |
| 性能损耗 | <5% | 15-20% |
| 镜像大小 | 通常<100MB | 通常>1GB |
(数据来源:Docker官方基准测试报告)
1.2 核心概念解析#
- 镜像(Image):不可变的模板文件,包含构建容器所需的完整指令。
- 容器(Container):镜像的可运行实例,拥有独立文件系统和资源隔离。
- 仓库(Registry):用于存储和分发镜像的服务,例如 Docker Hub。
- Volume:持久化数据存储方案,用来突破容器生命周期限制。
2. Docker安装#
2.1 Windows 11 专业版安装指南#
-
访问 Docker Desktop for Windows -> 下载安装包。
-
启用系统级支持:
- 控制面板 → 程序 → 启用或关闭 Windows 功能;
- 勾选「Hyper-V」和「Windows Subsystem for Linux」。
-
安装时选择 WSL2 后端:
powershell# 验证 WSL 版本 wsl --list --verbose # 设置默认版本 wsl --set-default-version 2- 架构选择建议:
- WSL2:推荐开发使用,提供完整 Linux 内核,I/O 性能更好。
- Hyper-V:适合企业级应用,支持动态内存分配、故障转移集群等高级虚拟化功能。
- 架构选择建议:
2.2 镜像加速配置#
针对国内网络环境,可以配置 USTC 镜像源,提升镜像下载稳定性和速度。

打开 Docker Desktop → Settings → Docker Engine,替换 daemon.json 配置:
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
"features": {
"buildkit": true // 启用新一代构建工具
},
"experimental": false // 生产环境禁用实验特性
}json应用配置并重启服务:
systemctl restart docker # Linux
Get-Service docker | Restart-Service # PowerShellbash3. 配置 Docker 镜像与容器#
3.1 拉取 Ubuntu 镜像#
可以直接在 Docker Desktop 图形界面中搜索 Ubuntu,然后拉取最新版本:

也可以使用命令行:
docker pull ubuntu:latestbash3.2 创建容器#
图形化创建时,重点关注几个配置:

- Container name:容器名称,自定义即可。
- Port:端口映射,根据实际服务需要配置。
- Volume:卷挂载,用于设置主机和容器之间的共享目录。这样可以在主机上编辑代码,在容器内编译和运行。
- Environment variables:环境变量,DataLab 场景下暂时可以不配置。
命令行创建示例:
docker run -it -v <Host path>:<Container path> --name <Container name> ubuntu:latestbash4. 配置 DataLab 环境#
进入容器后,按下面步骤配置 DataLab:
-
更新软件包列表:
bashapt-get update -
安装
wget:
bashapt-get install -y wget -
切换到共享文件夹:
bashcd CSapp -
从官网下载 DataLab 源码包:
bashwget http://csapp.cs.cmu.edu/3e/datalab-handout.tar -
解压源码包:
bashtar xvf datalab-handout.tar -
进入
datalab-handout文件夹。 -
安装编译所需工具:
bashapt install -y build-essentialbuild-essential包含 GCC、G++、make以及其他编译所需的基础库和头文件。
5. Finish#
接下来就可以在本机编辑器中编写 bit.c,再到 Docker 里的 Ubuntu 环境中编译和运行代码。
容器化不是银弹,但它确实是现代软件工程的基本技能。当再次面对 “Works on my machine” 的困境时,我们至少可以更有底气地说:It works on Docker.