2. Docker 安装与配置:把环境先搭起来
做批次质控的,最怕环境不一致。在我参与的几个 BIO 项目里,每次换机器就得重新装依赖、调路径、对版本,搞不好还要熬夜。
Docker 的出现,说白了就是把整个运行环境打包成一个“盒子”,到哪都能用。但前提是——你先把 Docker 装好,配对。
这一节,咱们就把安装、守护进程配置、镜像加速这三件事一次性搞定。我踩过的坑,这次你就不用再踩了。
2.1 各平台安装:别被花哨的安装步骤吓到
Docker 官方一直推荐 Docker Desktop,但我个人习惯——在 Linux 服务器上,直接装 Docker Engine 就够了,省资源,也方便后续的生产部署。而在 Mac 和 Windows 上,Docker Desktop 是最省事的选择。
Linux(Ubuntu / Debian)
我建议先卸载旧版本,再走官方的 apt 源。干净、可控。
# 卸载旧版本
sudo apt remove docker docker-engine docker.io containerd runc
# 安装依赖工具
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
# 添加 Docker 官方 GPG 密钥
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 Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
装完以后,记得把当前用户加到 docker 组,不然每次都得 sudo。嗯,这里有个小坑——我之前就是忘记这一步,结果跑 CI 的时候一直权限报错,排查了半天。
sudo usermod -aG docker $USER
newgrp docker # 或者重新登录一次
Mac(Intel / Apple Silicon)
直接去 Docker 官网下载 Docker Desktop for Mac,双击安装。注意:Apple Silicon(M1/M2)版本对 x86 镜像会有 Rosetta 2 的兼容问题,但日常用问题不大。我在 M1 机器上跑过质控镜像,速度还不错。
安装完成后,点菜单栏里的小鲸鱼,确认状态是 Docker Desktop is running 就行。
Windows(WSL 2)
Windows 上我最推荐的方式是:启用 WSL 2,然后安装 Docker Desktop 并设置为 WSL 2 后端。这样性能损失最小,而且可以直接在 Ubuntu 子系统里用 docker 命令。
# Windows PowerShell(管理员)
wsl --install -d Ubuntu
# 之后重启,安装 Docker Desktop,并在设置中勾选
# “Use WSL 2 based engine”
2.2 Docker Daemon 配置:别让守护进程拖后腿
Docker Daemon 是后台服务,所有容器的启停、网络、存储都由它管。默认配置够用,但要上生产或者跑大数据量的质控流程,我建议改几个参数。
配置文件通常位于 /etc/docker/daemon.json(Linux/macOS),Windows 上在 Docker Desktop 的设置界面里也能改。下面是我在项目中常用的配置模板:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [],
"data-root": "/data/docker"
}
我解释一下几个关键点:
- log-driver & log-opts:限制日志文件大小,防止磁盘被日志撑爆。我有一次没设这个,跑了几轮质控后发现根目录满了,服务直接挂了。
- storage-driver:
overlay2是目前最推荐的文件系统驱动,性能和稳定性都最好。 - cgroupdriver:建议改成
systemd,否则和 kubelet 会有冲突。如果你只跑 standalone Docker,那保持默认也行。 - data-root:我习惯把 Docker 数据目录挪到大盘上,避免挤占系统盘。
改完配置文件后,需要重启 Docker 服务:
sudo systemctl daemon-reload
sudo systemctl restart docker
验证一下配置是否生效:
docker info | grep -E "Storage Driver|Logging Driver|Data Root"
| 配置项 | 说明 | 推荐值 |
|---|---|---|
log-driver |
日志驱动类型 | json-file |
max-size |
单个日志文件最大大小 | 10m |
storage-driver |
镜像与容器存储驱动 | overlay2 |
data-root |
Docker 数据存储路径 | 非系统盘路径,如 /data/docker |
2.3 国内镜像加速器:别让 pull 速度卡住你
你想想看,一个质控镜像可能几百 MB,要是从 Docker Hub 直接 pull,国内网络环境……嗯,我不说你也能猜到。我曾经在项目交付前一天,花了一个多小时等一个镜像,结果超时失败了。从那以后,我第一步就是配加速器。
国内可用的加速器主要有以下几种:
- 阿里云容器镜像服务:需注册阿里云获取个人加速地址。
- 腾讯云容器镜像服务:同样需注册,给专属加速域名。
- 中科大 USTC 镜像站:无需注册,但稳定性看运气。
- Docker 官方中国区:
registry.docker-cn.com,但近年速度也不如以前了。
配置方法很简单,在 /etc/docker/daemon.json 中加上 registry-mirrors 字段即可:
{
"registry-mirrors": [
"https://xxxx.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
改完记得重启服务或者重新加载:
sudo systemctl daemon-reload
sudo systemctl restart docker
测试是否生效:
docker info | grep -A 5 "Registry Mirrors"
如果看到你配置的地址,说明加速器已经生效了。然后立刻 pull 一个镜像试试速度:
time docker pull nginx:latest
以前可能要等两三分钟,配置后几十秒就能拉下来,这就是质控流程里基础环境复现的第一步保障。