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 激活那步,结果容器启动不了,提示找不到虚拟化。嗯,这里要注意。
# 以管理员身份运行 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跨文件系统) | 中等(宿主机共享) | 极低(原生) |
| 适用场景 | 开发、测试 | 开发、测试 | 开发、测试、生产 |
3.3 加速器配置
装完 Docker 第一件事,不是拉镜像,而是配镜像加速器。说白了,国内访问 Docker Hub 慢得像蜗牛。我在部署药物图谱时,第一次拉一个 800MB 的基础镜像,等了快半小时才 50%。后来配了加速器,几分钟搞定。
不同系统的配置路径稍有不同,但原理都一样:告诉 Docker 优先从国内镜像仓库拉取。
Windows / Mac(Docker Desktop 图形界面)
- 右键任务栏 Docker 鲸鱼图标,点「Settings / Preferences」。
- 左侧选「Docker Engine」。
- 在右侧 JSON 配置编辑器中,添加 registry-mirrors 字段。
- 点击「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"
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
嗯,核心要点就这些。安装其实不难,但配置细节要抠一下。特别是加速器,别等部署药物图谱时发现镜像拉不下来才后悔,那可真是耽误时间。