3. Docker 安装与配置:Windows / Mac / Linux 安装、加速器配置

好,咱们直接进入正题。Docker 这东西,说白了就是个「集装箱码头」—— 把你的应用和依赖全部打包到一个标准容器里,丢到哪都能跑。我这些年部署药物图谱项目,几乎每次都要跟 Docker 打交道。这一章咱们就把安装和配置讲透。

先别急着下载安装包,你想想看,你的操作系统决定了安装方式。Windows 和 Mac 上有 Docker Desktop,Linux 上我们直接用 Docker Engine。我个人习惯是能不用 Docker Desktop 就不用,特别是做生产部署时,全命令行操作更可控。

不过,Windows 和 Mac 用户也别慌,Docker Desktop 对初学者挺友好,拿来练手完全够用。

3.1 各系统安装步骤

Windows
Windows 上装 Docker 分两步:先开 WSL 2,再装 Docker Desktop。我记得有个朋友第一次装,直接跳过了 WSL 2 激活那步,结果容器启动不了,提示找不到虚拟化。嗯,这里要注意。

前提检查:确保系统为 Windows 10 专业版/企业版(Build 19041+)或 Windows 11。需要开启 BIOS 中 CPU 虚拟化支持。
# 以管理员身份运行 PowerShell,启用 WSL 2
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

# 重启后下载并安装 Linux 内核更新包
# 然后设置 WSL 2 为默认版本
wsl --set-default-version 2

装完 WSL 2,去 Docker 官网下载 Docker Desktop for Windows 安装包。双击运行,一路 Next 就行。安装完成后重启,右下角任务栏会出现 Docker 鲸鱼图标。右键点击,选「Settings」,在 Resources > WSL Integration 里把你想用的 Linux 发行版勾上。这样 Docker 就能直接跟 WSL 2 通信了。

Mac
Mac 相对简单,分 Intel 芯片和 Apple Silicon 两种。我自己的 M1 MacBook Air,装 Docker Desktop 时踩过坑 —— 镜像拉取不下来,后来发现是没选对平台。

# 查看本机芯片架构
uname -m
# 若输出 arm64,则为 Apple Silicon
# 若输出 x86_64,则为 Intel

# 去 Docker 官网下载对应版本的 Docker Desktop DMG 文件
# 直接拖入 Applications 文件夹,启动即可

启动后,点击菜单栏鲸鱼图标,Preferences > General 里勾上「Use Virtualization Framework」。Apple Silicon 用户还可以开启「Use Rosetta for x86/amd64 emulation」,这个能加速运行 x86 镜像。我在项目中遇到过,不加这个选项跑某些旧镜像慢得离谱。

Linux
Linux 最直接,没有 Docker Desktop 这种图形层。我推荐用官方脚本安装,干净利落。

# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc

# 用官方脚本安装
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 添加当前用户到 docker 组,避免每次敲 sudo
sudo usermod -aG docker $USER

# 退出当前 shell 重新登录,然后验证
docker --version
docker run hello-world

如果你在 CentOS/RHEL 上,请用 yum 或 dnf 替代 apt。我曾有一次生产环境升级 Docker 后容器全挂了,才发现是内核版本不匹配。所以安装前最好查一下官方文档,确认内核 >= 3.10(推荐 4.18+)。

3.2 三大系统差异速查

项目 Windows Mac Linux
推荐安装方式 Docker Desktop + WSL2 Docker Desktop 官方脚本 / 包管理器
是否需要虚拟化支持 是(BIOS + Hyper-V) 是(Hypervisor.framework) 否(原生容器支持)
容器网络模式 NAT / host(WSL2下) NAT / host(可选) bridge / host / macvlan
性能损耗(I/O) 中等(WSL2跨文件系统) 中等(宿主机共享) 极低(原生)
适用场景 开发、测试 开发、测试 开发、测试、生产
核心建议: 生产环境请始终使用 Linux 平台。Windows 和 Mac 上的 Docker Desktop 只适合开发和调试场景。

3.3 加速器配置

装完 Docker 第一件事,不是拉镜像,而是配镜像加速器。说白了,国内访问 Docker Hub 慢得像蜗牛。我在部署药物图谱时,第一次拉一个 800MB 的基础镜像,等了快半小时才 50%。后来配了加速器,几分钟搞定。

不同系统的配置路径稍有不同,但原理都一样:告诉 Docker 优先从国内镜像仓库拉取。

Windows / Mac(Docker Desktop 图形界面)

  1. 右键任务栏 Docker 鲸鱼图标,点「Settings / Preferences」。
  2. 左侧选「Docker Engine」。
  3. 在右侧 JSON 配置编辑器中,添加 registry-mirrors 字段。
  4. 点击「Apply & Restart」。
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://dockerhub.timeweb.cloud",
    "https://mirror.ccs.tencentyun.com"
  ],
  "debug": false,
  "experimental": false
}

我一般用 Daocloud 和腾讯云的镜像,稳定且速度快。有次阿里云的镜像站点挂了几个小时,还好我配置了多个备用地址,不然整个 CI/CD 流水线都得停。

Linux(命令行配置)

Linux 上更直接,改 daemon.json 文件就行。

# 创建或编辑 /etc/docker/daemon.json
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://dockerhub.timeweb.cloud",
    "https://mirror.ccs.tencentyun.com"
  ]
}
EOF

# 重新加载配置并重启 Docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker

# 验证配置是否生效
docker info | grep -A 5 "Registry Mirrors"
避坑指南: 我曾经在配置完成后忘记重启 Docker,结果镜像拉取仍然走原始地址。如果你配置后发现速度没变化,先确认 Docker 服务是否已重启。另外,某些镜像站点(如 Docker Hub 官方加速器)已经停止服务,不要再用过时的地址。

3.4 验证安装与加速器是否生效

装完和配完,总得测试一下。我习惯跑一个小镜像看看拉取速度。

# 拉取一个很小的官方镜像测试网络速度
docker pull alpine:latest

# 如果能看到多层 digest 和下载进度,并且速度明显快于默认 Hub,说明加速器生效
# 然后运行一个容器测试完整性
docker run --rm alpine echo "Docker 安装成功,加速器配置正常"

如果你发现拉取还是慢,可以切到日志里看看 Docker 到底去哪个地址请求了。

# 查看 Docker 守护进程日志(Linux)
sudo journalctl -u docker --since "5 minutes ago" | grep -i mirror

# 或用客户端抓包分析
docker system dial-stdout 2>&1 | head -50

嗯,核心要点就这些。安装其实不难,但配置细节要抠一下。特别是加速器,别等部署药物图谱时发现镜像拉不下来才后悔,那可真是耽误时间。

个人习惯: 我会在所有部署文档开头就写清楚镜像源配置,并留一个备用源列表。这样不管将来哪个源出问题,咱都能快速切换。药物图谱项目里我用了 4 个镜像地址,每个都要测试过可用才上线。