1. Docker 基础:简介、安装与配置
大家好,欢迎来到这门课。
开始之前,我想先聊聊为什么我们非要用 Docker 来跑 AlphaFold。说白了,生物信息学软件的环境依赖是出了名的“坑”。Python 版本、CUDA 版本、cuDNN 版本、系统库的 ABI 兼容性……稍微搭错一步,可能就要浪费一整天重装系统。我早期做蛋白质结构预测时,就在 Ubuntu 18.04 和 20.04 之间来回折腾过,编译 OpenMM 总是报错,后来发现是 glibc 版本不对。从那以后,但凡涉及多依赖的科研软件,我第一反应就是——扔进容器。
这一章,我们先打好地基。我个人习惯把 Docker 看作一个“轻量级虚拟机”,但它比虚拟机快得多,因为它共享宿主机的内核。你想想看,一个容器启动也就是毫秒级的事儿。
本章核心目标:让你在自己的电脑上装好 Docker,完成核心配置,并理解镜像、容器和仓库这三个最基础的概念。这样我们才能在后续章节里顺利把 AlphaFold 的整个环境“装进盒子”。
1.1 Docker 是什么?
Docker 是一个开源的容器化引擎。它的工作逻辑很简单:
- 镜像(Image):一个只读的模板,里面包含了运行应用所需的一切——代码、运行时、系统工具、库、配置。可以理解成一个“快照”。
- 容器(Container):镜像的运行实例。你可以启动、停止、删除它。它就像从镜像这个“类”里 new 出来的“对象”。
- 仓库(Registry):存放镜像的地方。最常用的是 Docker Hub,里面已经有官方维护的 AlphaFold 镜像。
我举个例子吧。镜像就像你下载的一个游戏 ISO 文件,容器就是你用这个 ISO 加载并运行起来的游戏进程。进程之间相互隔离,共享宿主机内核,但看起来每台“机器”都是独立干净的。
给我的学生一个小提示:如果你曾经用过 Anaconda 的虚拟环境,那 Docker 的隔离性比 conda 要彻底得多。conda 只隔离 Python 包,Docker 隔离的是整个文件系统和进程空间。
1.2 核心概念与架构
这章的知识体系,我习惯用一张图来说明白。你看下面的架构:
你看到了,Docker 引擎是核心,它负责管理镜像的拉取、容器的启停、网络和存储的分配。镜像和容器的关系是“类与对象”,仓库则是“软件包管理器”的服务器端。
1.3 在 Linux 上安装 Docker
我绝大多数线下项目都在 Linux 上跑,所以咱们优先讲 Linux。Ubuntu 是最常见的发行版。这里我直接贴命令,你复制粘贴就行。
第一步:卸载旧版本(如果有的话)
sudo apt-get remove docker docker-engine docker.io containerd runc
第二步:设置仓库
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
第三步:安装 Docker 引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
装完以后,验证一下:
sudo docker run hello-world
如果你看到了 Docker 的欢迎信息,那就说明安装成功了。我在项目里遇到新手经常卡在这一步——没加 sudo 权限,或者仓库源没加对。记住,apt-get update 一定要在改完源之后重新执行一次。
1.4 在 Windows 上安装 Docker
Windows 平台我建议走 WSL2 路线。Docker Desktop 最新版已经强制依赖 WSL2 了,所以你要先装好 WSL。
我个人的做法是这样的:
- 以管理员身份打开 PowerShell。
- 执行
wsl --install,这会默认安装 Ubuntu。 - 重启电脑,从 Docker 官网下载 Docker Desktop for Windows。
- 安装时勾选“Use WSL 2 based engine”。
- 安装完成后,在设置里把默认 WSL 发行版指向你的 Ubuntu 实例。
警告:千万别在 Windows 上直接装 Docker Toolbox 那种老古董了。它用的是 VirtualBox,性能差,网络配置也麻烦。现在 WSL2 就是标准答案。
1.5 在 macOS 上安装 Docker
macOS 相对简单。去 Docker Hub 下载 Docker.dmg,拖到 Applications 里就行。不过有两个注意事项:
- Apple Silicon(M1/M2) 的用户,务必下载“Apple Chip”版本的 Docker Desktop。早期的 x86 镜像在 ARM 上可能跑不起来,但好在 AlphaFold 官方镜像已经支持多架构了。
- 资源限制:Docker 在 macOS 上默认跑在轻量虚拟机里。我建议你给 Docker 至少分配 4 核 CPU 和 8GB 内存。因为 AlphaFold 在跑推理时对显存和内存要求都很高。
1.6 安装后的基础配置
装好只是第一步。接下来这几项配置,我强烈建议你立刻做,不然以后会踩坑。
1.6.1 用户组配置(Linux)
每次敲 sudo docker 确实烦人。我们把自己加到 docker 组里,就能省掉 sudo 了。
sudo usermod -aG docker $USER
newgrp docker
docker run hello-world
这里要注意:加完组后需要重新登录才能生效。我曾经见过有人忘了重新登录,然后一直报权限错误,折腾了半天。
安全提醒:把用户加入 docker 组等于给了这个用户 root 权限。因为 docker 组用户可以通过 docker run -v /:/host 挂载宿主机根目录。生产环境慎用。
1.6.2 镜像加速器配置
国内拉 Docker Hub 的镜像有时慢得让人崩溃。我习惯配置一个加速器。这里以阿里云的为例:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://你的加速ID.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
你可以去各大云厂商的容器服务里申请一个加速器地址。腾讯云、华为云、网易也都提供。配置完以后,拉镜像的速度会从几十 KB/s 提升到几 MB/s。
1.6.3 数据持久化目录准备
AlphaFold 的模型参数文件有好几个 GB,每次启动容器都重新下载太慢了。我习惯在宿主机上建立一个数据目录,然后挂载到容器里。
mkdir -p ~/alphafold/data
mkdir -p ~/alphafold/output
这个目录在后面的章节里我们会反复用到。好了,到这里 Docker 的基础环境就搭建完毕了。
版本选择建议:我目前推荐 Docker Engine 24.x 或 Docker Desktop 4.25+。太老的版本在 GPU 支持上可能有兼容性问题。AlphaFold 需要 CUDA 11+,所以 Docker 版本别太旧。
快速检查清单
| 检查项 | 验证命令 | 预期结果 |
|---|---|---|
| Docker 版本 | docker version |
显示 Client 和 Server 版本 |
| 无需 sudo | docker ps |
显示空列表,无权限报错 |
| 镜像加速生效 | docker info | grep Mirrors |
显示加速器地址 |
| 数据目录 | ls ~/alphafold/data |
目录存在且可写 |