Docker Desktop 安装与镜像加速:从零启动第一个容器
适用人群:第一次接触 Docker,或需要在 Windows、macOS、Linux 桌面环境中重新安装 Docker Desktop 的开发者。 核对日期:2026 年 9 月 2 日。本文以 Docker Desktop 4.89.0 为写作基线;实际安装时,请优先选择官网提供的最新稳定版。 本文目标:安装 Docker Desktop,正确配置 Docker Hub 镜像加速,运行 hello-world,再启动一个可通过浏览器访问的 Nginx 容器。

很多人第一次使用 Docker,最容易卡在三个地方:
- Docker Desktop、Docker Engine 和 Docker CLI 到底是什么关系;
- 软件明明安装成功了,拉取镜像却一直超时;
- docker run 执行完了,但不知道容器是否真的启动,也不知道该怎么访问。
这篇文章从零开始解决这些问题。全程不要求提前掌握容器原理,但会把关键边界讲清楚:哪些配置是真正生效的,哪些“国内镜像地址”可能已经失效,以及 Windows、macOS、Linux 三个平台之间有什么区别。
1. 先把几个概念说清楚
Docker 不是一个单独的命令,而是一套工具。日常开发时,最常接触的是下面这些组件。
| Docker Desktop | 桌面端安装包,集成 Engine、CLI、Compose、Dashboard 等组件 | Docker 的桌面工作台 |
| Docker Engine | 负责创建和管理镜像、容器、网络、卷 | 真正干活的后台服务 |
| Docker CLI | 提供 docker run、docker ps 等命令 | 与 Engine 沟通的命令行客户端 |
| Docker Compose | 使用 YAML 文件编排多个容器 | 多容器项目的启动器 |
| Image(镜像) | 只读的应用模板,包含程序及其运行依赖 | 类似“安装包 + 运行环境” |
| Container(容器) | 镜像运行后的实例 | 由镜像启动的进程 |
| Registry(镜像仓库) | 保存和分发镜像的服务 | 镜像的应用商店或制品仓库 |
| Registry Mirror | 代理并缓存 Docker Hub 镜像 | Docker Hub 的拉取加速入口 |
需要特别注意:Docker 容器共享的是 Linux 内核能力。即使你在 Windows 或 macOS 上使用 Docker Desktop,Linux 容器通常也不是直接运行在宿主系统内核上,而是运行在 Docker Desktop 管理的轻量 Linux 环境中。
这也是为什么 Docker Desktop 不只是一个图形界面。它还负责虚拟化、网络转发、文件共享、资源限制和版本更新。
2. 安装前检查:别急着一路点“下一步”
2.1 确认授权范围
Docker Desktop 对个人使用、教育用途、非商业开源项目以及符合条件的小型企业通常可以免费使用。大型企业和政府机构等场景可能需要付费订阅。
授权条款和企业规模边界可能调整。公司设备或商业项目安装前,应让组织管理员核对最新的 Docker Subscription Service Agreement,不要只根据旧文章判断。
2.2 打开硬件虚拟化
Windows 和 Linux 版 Docker Desktop 都依赖硬件虚拟化。进入 BIOS 或 UEFI 后,相关选项可能显示为:
- Intel Virtualization Technology、Intel VT-x;
- AMD-V、SVM Mode;
- Virtualization Technology。
如果虚拟化没有开启,Docker Desktop 可能安装成功,但 Engine 无法启动。
2.3 确认 CPU 架构
下载前先确认设备架构:
- 常见 Intel、AMD 处理器通常选择 x86_64 或 AMD64;
- Apple M 系列芯片选择 Apple Silicon 或 ARM64;
- 不要把 macOS 的 Intel 安装包装到 Apple Silicon 设备上,也不要混用 Windows ARM64 与 AMD64 安装包。
2.4 预留资源
Docker 官方系统要求会随版本变化。作为开发机的实用建议,可以至少准备:
- 8 GB 内存;
- 20 GB 可用磁盘空间;
- 稳定网络;
- 受支持且仍在维护期内的操作系统版本。
这里的磁盘空间不是安装包大小。镜像层、容器可写层、构建缓存和数据卷都会持续占用空间。
3. Windows:使用 WSL 2 后端安装 Docker Desktop
对大多数 Windows 开发者来说,WSL 2 是默认且推荐的 Linux 容器后端。它的文件系统和网络行为比传统 Hyper-V 模式更贴近日常 Linux 开发。
3.1 系统要求与边界
安装前应确认:
- 使用 Docker 官方当前支持的 Windows 10 或 Windows 11 版本;
- WSL 版本不低于 Docker 当前要求,官方文档目前要求 WSL 2.1.5 或更高版本;
- 设备具有至少 8 GB 内存,并已启用硬件虚拟化;
- Windows Server 不是 Docker Desktop 的受支持平台。
如果只运行普通 Linux 容器,不需要专门切换到 Windows 容器模式。本文也以 Linux 容器为主。
3.2 检查和安装 WSL
以管理员身份打开 PowerShell:
wsl —version
wsl —status
如果系统提示没有安装 WSL,可以执行:
wsl —install
安装完成后按系统提示重启。已有 WSL 的设备建议先更新:
wsl —update
还可以检查已安装的发行版:
wsl —list —verbose
VERSION 列应为 2。如果某个发行版仍是 WSL 1,可按实际名称转换,例如:
wsl —set-version Ubuntu 2
3.3 下载并校验安装包
只从 Docker Desktop 官方下载页 获取安装包。不要使用不明网盘中的旧版本或二次封装版本。
下载后可以在 PowerShell 中计算 SHA-256:
Get-FileHash .\\DockerDesktopInstaller.exe –Algorithm SHA256
把结果与 Docker 发布说明中对应版本、对应平台的校验值比对。文件名和路径以本机实际情况为准。
3.4 执行安装
双击安装程序,保持“Use WSL 2 instead of Hyper-V”或含义相同的选项启用。新版 Docker Desktop 已推荐按当前用户安装,默认目录通常位于:
%LOCALAPPDATA%\\Programs\\DockerDesktop
安装完成后启动 Docker Desktop,阅读并接受许可协议。首次启动可能需要一段时间创建内部 Linux 环境。
看到界面底部或状态区域显示 Engine running,才表示后台 Engine 已经可用。
3.5 验证安装
打开新的 PowerShell 窗口:
docker —version
docker version
docker compose version
docker context show
重点看 docker version:
- 只有 Client,说明命令行已安装,但 Engine 没有响应;
- 同时显示 Client 和 Server,才说明客户端已经连上 Engine;
- docker context show 在 Docker Desktop 环境中通常显示 desktop-linux。

4. macOS:区分 Apple Silicon 和 Intel
4.1 确认芯片类型
点击菜单栏左上角的苹果图标,进入“关于本机”:
- 显示 Apple M1、M2、M3、M4、M5 等,下载 Apple Silicon 版本;
- 显示 Intel,下载 Intel 版本。
Docker Desktop 当前通常支持最新 macOS 大版本及其之前两个主要版本。老系统无法安装新版时,不建议长期固定在已停止维护的 Docker Desktop 版本,应优先升级操作系统。
4.2 下载与校验
从 Docker Desktop for Mac 官方文档 进入对应芯片版本的下载入口。
假设安装包位于“下载”目录,可计算 SHA-256:
cd ~/Downloads
shasum -a 256 Docker.dmg
再与官方发布说明中的校验值比对。
4.3 安装和启动
双击 Docker.dmg,把 Docker 图标拖入 Applications 文件夹。然后从“应用程序”启动 Docker。
首次启动时,系统可能询问是否允许安装网络或权限组件。按照 Docker Desktop 的说明授权即可,不要给来源不明的程序输入管理员密码。
Apple Silicon 设备通常不依赖 Rosetta 运行 Docker Desktop 本身。不过,少数仍只提供 x86_64 版本的可选命令行工具或镜像可能需要 Rosetta。只有在明确遇到兼容性需求时,再执行:
softwareupdate –install-rosetta
安装完成后验证:
docker version
docker compose version
docker context show
如果需要查看镜像是否同时支持 ARM64 和 AMD64,可以执行:
docker buildx imagetools inspect nginx:alpine
5. Linux:先决定要 Docker Desktop 还是 Docker Engine
Linux 用户经常问:“系统本身就能运行 Docker Engine,为什么还要安装 Docker Desktop?”
答案取决于使用方式:
- 只需要命令行、服务器式运行和更少资源占用:优先考虑原生 Docker Engine;
- 希望使用 Dashboard、Extensions、内置 Compose、统一升级和桌面管理:可以选择 Docker Desktop。
需要理解一个关键区别:Linux 版 Docker Desktop 仍运行在它管理的虚拟机中,并使用 desktop-linux 上下文。Docker Desktop 内的镜像和容器,与宿主机原生 Docker Engine 的镜像和容器相互独立。
5.1 检查 KVM
Docker Desktop for Linux 需要 KVM、QEMU、systemd 以及受支持的桌面环境。先检查 CPU 是否暴露虚拟化能力:
grep -E -c '(vmx|svm)' /proc/cpuinfo
输出大于 0,通常表示 CPU 提供虚拟化标志。继续检查 KVM 设备:
ls -l /dev/kvm
把当前用户加入 kvm 组:
sudo usermod -aG kvm "$USER"
执行后需要注销并重新登录,组权限才会刷新。不要使用 chmod 777 /dev/kvm 作为长期修复方案。
5.2 Ubuntu 安装示例
Docker 当前文档列出的 Ubuntu 桌面支持范围会更新。本文核对时,官方列出了 Ubuntu 24.04 LTS 和 26.04 LTS 的 x86_64 环境。安装前仍应查看 Ubuntu 安装说明。
从官网下载当前 DEB 包后,在包所在目录执行:
sudo apt update
sudo apt install ./docker-desktop-amd64.deb
启动 Docker Desktop:
systemctl –user start docker-desktop
如需随登录自动启动:
systemctl –user enable docker-desktop
5.3 Fedora 安装示例
本文核对时,官方文档列出的支持基线为 Fedora 43 或更高版本的 x86_64 桌面环境。下载 RPM 后执行:
sudo dnf install ./docker-desktop-x86_64.rpm
启动方式相同:
systemctl –user start docker-desktop
5.4 避免与原生 Docker Engine 冲突
如果宿主机已经运行原生 Docker Engine,可能与 Docker Desktop 争用端口或消耗重复资源。官方建议在使用 Docker Desktop 时停止原生 Engine:
sudo systemctl stop docker docker.socket containerd
查看当前上下文:
docker context ls
docker context show
切换到 Docker Desktop:
docker context use desktop-linux
切回宿主机原生 Engine:
docker context use default
不要在没检查上下文的情况下删除镜像或容器。你以为在清理 Desktop,实际可能正在操作宿主机 Engine。
6. 为什么拉取 Docker 镜像会慢
执行下面的命令时:
docker pull nginx:alpine
Docker 需要完成域名解析、TLS 握手、清单读取和多个镜像层下载。速度慢或超时可能来自:
- 到 Docker Hub 的国际链路不稳定;
- DNS 解析异常;
- 公司代理、防火墙或安全软件拦截;
- Docker Hub 匿名拉取频率受限;
- 镜像体积大、层数多;
- 配置的第三方镜像站已停止同步;
- Docker Desktop 代理设置与 Engine 镜像设置混淆。
所以,“拉不动”不等于“必须随便找一个镜像地址”。加速之前先区分问题类型,能减少很多无效操作。
7. 2026 年国内镜像加速应该怎样选
网上常见的教程会直接列出十几个公共镜像地址。这个做法现在不够严谨,原因是公共服务可能限流、停止同步、只对内网开放,甚至长期返回旧标签。
更稳妥的优先级是:
7.1 华为云 SWR
华为云官方当前仍提供镜像加速器说明。登录 SWR 控制台后,可从“镜像资源 → 镜像中心 → 镜像加速器”查看当前区域和账号可用的地址。
不要从旧博客复制别人的专属地址。应以自己控制台显示的内容为准。官方说明见:配置镜像加速器。
7.2 阿里云 ACR
阿里云当前官方文档已经明确提示:传统 Docker 官方镜像加速器停止同步最新镜像后,可能出现拉取失败或 latest 不是最新版本的情况。因此,不应再把旧的 ACR 专属加速地址当成默认通用方案。
具体限制和替代建议应查看实时文档:加速拉取 Docker 官方镜像。
7.3 腾讯云内网地址
腾讯云文档中的 https://mirror.ccs.tencentyun.com 主要面向腾讯云内网资源。普通家庭宽带、公司外网或本地 Docker Desktop 不应默认认为它可用。
7.4 为什么本文使用占位地址
后文统一使用:
https://<your-accelerator-host>
你必须把它替换为组织或云厂商当前分配给你的真实 HTTPS 地址。占位符不能直接使用。
8. 在 Docker Desktop 中配置 Registry Mirror
8.1 找到 Docker Engine 配置
打开 Docker Desktop:
8.2 最小配置
如果当前配置为空对象,可以填写:
{
"registry-mirrors": [
"https://<your-accelerator-host>"
]
}
必须把 <your-accelerator-host> 替换成真实主机名。
8.3 与已有配置合并
不要为了加入镜像地址而覆盖已有字段。假设原来已经设置构建并发数和日志轮转,应合并成一个合法 JSON 对象:
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"log-driver": "json-file",
"log-opts": {
"max-file": "3",
"max-size": "10m"
},
"registry-mirrors": [
"https://<your-accelerator-host>"
]
}
JSON 有几个容易踩坑的规则:
- 字段名和字符串必须使用英文双引号;
- 最后一个属性或数组元素后面不能有多余逗号;
- 同一级不能出现两个同名字段;
- 不支持 // 或 /* */ 注释;
- 必须保留原有配置,除非确认不再需要;
- 优先使用 HTTPS,不要为了省事关闭证书校验。

8.4 镜像加速和代理不是一回事
Docker Desktop 的代理设置负责 HTTP/HTTPS 出站通信,registry-mirrors 则告诉 Engine 从哪个缓存入口获取 Docker Hub 内容。公司网络需要代理时,可能两者都要配置,但不要互相替代。
8.5 如何恢复
如果配置后 Engine 无法启动:
普通配置错误不需要直接执行 Factory Reset。恢复出厂会移除本地设置,并可能影响镜像、容器和数据,应当作为最后手段。
9. 验证镜像加速是否被 Engine 接受
Docker Desktop 重启后执行:
docker info
在输出中查找:
Registry Mirrors:
https://<your-accelerator-host>/
Windows PowerShell 可筛选相关行:
docker info | Select-String –Pattern 'Registry Mirrors' –Context 0,4
macOS 或 Linux 可执行:
docker info | grep -A 4 'Registry Mirrors'
然后做一次实际拉取:
docker pull hello-world:latest
需要严谨地区分两件事:
- docker info 显示地址,证明 Engine 接受了配置;
- 实际流量是否命中缓存,需要结合服务商控制台统计、反向代理日志或网络观测判断。
镜像加速器通常只代理 Docker Hub。下面这些仓库不是一回事:
docker.io Docker Hub,registry mirror 通常针对这里
ghcr.io GitHub Container Registry
quay.io Red Hat Quay
配置 Docker Hub mirror,不会自动加速所有第三方 Registry,也不能代替私有仓库登录。
10. 启动第一个容器:hello-world
执行:
docker run –name hello-docker hello-world:latest
这条命令背后发生了四件事:
看到 Hello from Docker!,说明镜像拉取、容器创建和标准输出链路基本正常。
查看所有容器:
docker ps -a
你会发现 hello-docker 状态是 Exited。这不是失败。hello-world 只打印一段信息,主进程完成后,容器自然退出。
查看日志:
docker logs hello-docker
删除测试容器:
docker rm hello-docker
11. 启动一个真正可访问的 Nginx 容器
hello-world 运行时间太短。接下来启动一个常驻的 Web 服务:
docker run -d –name web-demo -p 127.0.0.1:8080:80 nginx:alpine
参数含义如下:
| docker run | 创建并启动容器 |
| -d | 后台运行,终端不持续占用 |
| –name web-demo | 给容器设置固定名称 |
| -p 127.0.0.1:8080:80 | 把宿主机本地 8080 端口映射到容器 80 端口 |
| nginx:alpine | 使用体积较小的 Nginx Alpine 镜像 |
本文把端口绑定在 127.0.0.1,只允许本机访问,比默认暴露到所有网卡更适合本地练习。
检查运行状态:
docker ps
docker port web-demo
docker logs –tail 20 web-demo
浏览器打开:
http://127.0.0.1:8080
看到 Welcome to nginx!,说明容器中的 Nginx 正在运行,端口映射也已生效。

11.1 在容器中执行命令
查看 Nginx 版本:
docker exec web-demo nginx -v
进入容器的 Shell:
docker exec -it web-demo sh
Alpine 镜像通常提供 sh,不一定提供 bash。进入后可以查看 Nginx 首页文件:
ls -l /usr/share/nginx/html
exit
11.2 容器生命周期
停止容器:
docker stop web-demo
再次启动:
docker start web-demo
停止并删除:
docker stop web-demo
docker rm web-demo
也可以在明确不再需要它时强制删除:
docker rm -f web-demo
删除容器不会自动删除镜像。查看镜像:
docker image ls
12. 使用 Docker Desktop Dashboard 管理容器
命令行适合自动化,Dashboard 适合观察。打开 Docker Desktop 后,常用页面包括:
- Containers:查看状态、端口、日志、文件、资源使用情况;
- Images:查看本地镜像、标签、大小并启动容器;
- Volumes:管理持久化数据卷;
- Builds:查看 BuildKit 构建记录;
- Settings:配置资源、代理、Engine、文件共享与启动行为。
在 Containers 页面找到 web-demo,可以直接点击端口打开浏览器,也可以查看日志、停止、启动或删除容器。
建议初学阶段同时使用命令行和 Dashboard:命令行帮助理解对象和状态,Dashboard 方便直观看到操作结果。
13. 常见故障与处理方法
13.1 Cannot connect to the Docker daemon
先执行:
docker version
docker context show
如果只有 Client 信息:
- 确认 Docker Desktop 已启动并显示 Engine running;
- 等待首次初始化完成;
- 检查当前 context 是否正确;
- Linux 检查是否误切换到未运行的 default context;
- Windows 检查 WSL 2 是否正常。
13.2 Windows 卡在 Starting
先更新并重启 WSL:
wsl —update
wsl —shutdown
再重新打开 Docker Desktop。如果仍失败,检查虚拟化是否开启、系统版本是否受支持,以及安全软件是否阻断虚拟网络。
不要把下面的命令当成普通修复手段:
wsl —unregister <distribution-name>
它会删除对应 WSL 发行版及其数据,属于破坏性操作。
13.3 pull access denied
常见原因:
- 镜像名称或标签拼写错误;
- 仓库是私有仓库;
- 尚未执行 docker login;
- 当前账号没有读取权限。
先核对完整镜像名,例如:
registry.example.com/team/app:1.4.2
13.4 i/o timeout、TLS 超时或 DNS 失败
建议按顺序排查:
不要为了绕过报错直接把安全地址改成 HTTP,也不要全局关闭 TLS 校验。
13.5 Docker Hub 返回 429 Too Many Requests
这通常是拉取频率限制,不是本地 JSON 写错。可以:
- 登录 Docker Hub 账号后再拉取;
- 使用组织内部缓存;
- 避免 CI 重复拉取相同基础镜像;
- 为构建流程设置合理缓存;
- 查看 Docker Hub 当前配额规则。
13.6 Docker Engine JSON 无法应用
常见错误包括中文引号、多余逗号、重复键和错误注释。把 JSON 复制到可信的本地校验器检查,或先恢复到最小配置:
{}
确认 Engine 能启动后,再逐项加入配置。
13.7 8080 端口被占用
Windows PowerShell:
Get-NetTCPConnection –LocalPort 8080 –ErrorAction SilentlyContinue
macOS 或 Linux:
lsof -iTCP:8080 -sTCP:LISTEN
如果端口已被使用,可以改成 8081:
docker run -d –name web-demo -p 127.0.0.1:8081:80 nginx:alpine
然后访问 http://127.0.0.1:8081。
13.8 Apple Silicon 出现平台不匹配
先检查镜像清单:
docker buildx imagetools inspect <image-name>:<tag>
优先选择同时提供 linux/arm64 和 linux/amd64 的多架构镜像。确实只能运行 AMD64 镜像时,可以显式指定:
docker run –platform linux/amd64 <image-name>:<tag>
这可能依赖模拟,性能通常低于原生 ARM64 镜像。
13.9 Linux 看不到预期的镜像或容器
先检查上下文:
docker context ls
docker context show
desktop-linux 和 default 连接的是不同 Engine。切换后看到的镜像、容器和卷可以完全不同。
13.10 磁盘空间越来越大
先查看占用:
docker system df
按对象逐项确认,再做定向清理:
docker container prune
docker image prune
docker builder prune
下面的命令会清理范围更广:
docker system prune -a –volumes
它可能删除未使用镜像、停止的容器、构建缓存和未使用卷。卷里可能有数据库数据,执行前必须确认备份和影响范围。
14. 安全与稳定性建议
14.1 不要暴露未加密的 Docker API
不要为了“远程方便”开启未启用 TLS 的 tcp://0.0.0.0:2375。能访问 Docker daemon 的用户,通常可以创建高权限容器、挂载宿主目录,风险接近宿主机管理员权限。
14.2 不要把高权限参数当成通用修复
遇到权限问题时,不要条件反射地添加:
–privileged
-v /:/host
-v /var/run/docker.sock:/var/run/docker.sock
这些参数会显著扩大容器权限。先明确程序需要哪一项能力,再做最小授权。
14.3 生产环境不要依赖漂移标签
latest 适合本文的入门验证,但生产构建更适合固定经过测试的版本标签,安全要求更高时可以固定 digest:
nginx@sha256:<digest>
固定 digest 能确保获取相同内容,但也意味着安全更新不会自动进入,需要建立定期升级和验证流程。
14.4 不要把不稳定的公共镜像站写进团队模板
团队配置应包含:
- 服务所有者;
- 可用性和容量监控;
- TLS 证书管理;
- 缓存和清理策略;
- 上游同步与失效处理;
- 故障时回退方案。
镜像加速解决的是分发链路,不是镜像可信度。无论从哪里拉取,都要核对镜像来源、标签、签名或 digest,并持续做漏洞扫描。
15. 完成检查清单
按顺序确认下面各项:
- Docker Desktop 来自官方网站,安装包架构与设备一致;
- Windows 已启用 WSL 2,Linux 已启用 KVM;
- Docker Desktop 显示 Engine running;
- docker version 同时显示 Client 和 Server;
- docker compose version 可以正常输出;
- docker context show 指向预期 Engine;
- 镜像加速地址来自当前有效的组织或云厂商配置;
- Docker Engine JSON 可以通过校验;
- docker info 能看到 Registry Mirrors;
- hello-world 输出 Hello from Docker!;
- web-demo 显示为 Running;
- 浏览器能打开 http://127.0.0.1:8080;
- 已理解容器、镜像、端口映射和 context 的区别;
- 测试结束后,已按需停止或删除容器。
16. 总结
把 Docker Desktop 跑起来并不难,真正重要的是建立一套可验证的操作顺序:
完成这些步骤后,你已经拥有一个可以用于 Node.js、Java、Go、Python、数据库和前端工程的本地容器环境。下一步可以继续学习 Dockerfile、数据卷、容器网络和 Docker Compose。
官方参考资料
- Docker Desktop 产品与下载
- Docker Desktop Release Notes
- 在 Windows 上安装 Docker Desktop
- 在 macOS 上安装 Docker Desktop
- 在 Linux 上安装 Docker Desktop
- 在 Ubuntu 上安装 Docker Desktop
- 在 Fedora 上安装 Docker Desktop
- Docker Desktop Settings 说明
- Docker Hub Registry Mirror 官方说明
- Docker CLI:docker run
- Docker CLI:docker info
- 华为云 SWR:配置镜像加速器
- 阿里云 ACR:Docker 官方镜像加速说明
- 腾讯云:Docker 镜像加速相关说明




