Skip to content
Frank
Back

Docker 从入门到实践:以 DataLab 环境配置为例

Edit on GitHub

“明明在我的电脑上是可以运行的” 。 在部署OpenChain时,我曾深陷环境配置的泥潭。虽然VM可以解决环境隔离问题,但其高资源占用、冗余操作和缓慢启动等痛点促使我们寻找更优解——这正是Docker容器技术的用武之地。

另外摸索用 Docker 配置 Ubuntu 系统运行 DataLab 时,我发现网上教程少之又少。仅有的内容也满是晦涩术语与复杂步骤,对新手极不友好。所以这篇文章,以最细致、最易懂的方式,手把手带你上手 DataLab。

1. Docker介绍

1.1 容器化革命

Docker是一个开源的容器化平台,其通过操作系统级虚拟化技术,将应用程序及其依赖环境(包括代码、运行时、系统工具、系统库等)打包成标准化的、轻量级的容器(Container)。相较于传统虚拟机:

特性Docker容器虚拟机
虚拟化层级OS级硬件级
启动速度秒级分钟级
资源占用MB级GB级
性能损耗<5%15-20%
镜像大小通常<100MB通常>1GB

(数据来源:Docker官方基准测试报告)

1.2 核心概念解析

2. Docker安装

2.1 Windows 11专业版安装指南

  1. 访问Docker Desktop for Windows下载安装包
  2. 启用系统级支持:
    • 控制面板 → 程序 → 启用或关闭Windows功能
    • 勾选「Hyper-V」和「Windows Subsystem for Linux」
  3. 安装时选择WSL2后端:
    # 验证WSL版本
    wsl --list --verbose
    # 设置默认版本
    wsl --set-default-version 2
    • 架构选择建议
      • WSL2:推荐开发使用,提供完整Linux内核,I/O性能提升4-5倍
      • Hyper-V:适合企业级应用,支持高级虚拟化功能(动态内存分配、故障转移集群等)

2.2 镜像加速配置

针对国内网络环境优化,建议配置USTC镜像源:

  1. 打开Docker Desktop → Settings → Docker Engine
  2. 替换daemon.json配置:
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
  "features": {
    "buildkit": true  // 启用新一代构建工具
  },
  "experimental": false  // 生产环境禁用实验特性
}
  1. 应用配置并重启服务:
systemctl restart docker  # Linux
Get-Service docker | Restart-Service  # PowerShell

3. 配置Docker镜像

  1. 拉取Ubuntu镜像
    • 可以直接在图形化界面搜索Ubuntu然后pull最新的版本
    • 也可以使用终端命令行的形式
    docker pull ubuntu:lastest  # 推荐使用LTS版本
  2. 创建容器
    • 图形化界面 image.png

    • Container name自拟

    • Port 端口设置

    • Volume卷挂载,作用是设置主机和容器之间的卷挂载,好处是主机和容器可以共享该目录下的文件,方便在主机上编辑代码并在容器内运行测试等操作

    • Environment variables环境变量设置,暂时不操作

    • 终端命令 docker run -it -v <Host path>:<Container path> --name <Container name> ubuntu:latest

4. 配置DataLab环境

  1. 先更新软件包列表apt-get update
  2. 安装wgetapt-get install -y wget
  3. 切换到共享文件夹cd CSapp
  4. 从官网下载源码安装包wget http://csapp.cs.cmu.edu/3e/datalab-handout.tar
  5. 将从官网下载的tar包解压,指令:tar xvf FileName.tar
  6. 进入datalab-handout文件夹
  7. 安装必备工具apt install -y build-essential
    • 这个软件包组包含了 GCC 编译器、G++ 编译器(用于 C++ 代码)、make 工具以及其他编译所需的基础库和头文件。

5. Finish!

容器化不是银弹,但确实是现代软件工程的必备技能。当再次面对”Works on my machine”的困境时,我们终于可以自信地说:“It works on Docker!”

References


Edit on GitHub
Share this post

Previous
关于终身学习体系的思考