这两年我不下十次被朋友问到同一句话:"Docker到底怎么在Windows 10上装?"每次我给他们发官方文档,收到的回复基本都是"看不懂"或者"装了还是报错"。确实,Docker在Windows上的安装不像Linux那样一条命令搞定,它牵扯到虚拟化、WSL2、Hyper-V、系统版本、BIOS设置等等一堆前置条件,任何一个环节没对上,安装完的Docker Desktop就会以各种姿势罢工。
这篇文章就把我的实操经验完整梳理一遍。我会从Windows跑Docker的底层原理讲起,把安装前需要检查的环境项、Docker Desktop的安装配置、镜像加速、第一个容器实战(以MySQL 8.0为例)全部走一遍,最后把最常见的启动报错和排查思路整理出来。无论你是学生、运维、后端开发还是只是想把Redis、MySQL、GitLab这类服务跑在本机上,这篇文章都能帮你少走很多弯路。
1. Windows上跑Docker,必须搞明白的那道坎
1.1 容器为什么在Windows上"水土不服"
很多人都知道Docker容器比虚拟机轻量、启动快、资源占用小。但很少有人去追问一句:为什么Docker在Windows上安装这么费劲?这得从Docker的技术底座说起。
Docker本身并不是一个"虚拟机软件",它依赖Linux内核提供的一系列特性来实现隔离,比如namespace(命名空间)负责隔离进程、网络、文件系统,cgroup(控制组)负责限制CPU、内存等资源的使用。Linux容器之所以轻量,是因为所有容器共享同一个Linux内核,不需要为每个容器模拟一整套操作系统。
然而Windows的内核跟Linux内核完全是两码事,Windows进程无法直接跑在Linux内核上,反过来也一样。所以在Windows上安装Docker,本质上面临的问题是:Docker引擎需要Linux内核,而Windows没有。这就迫使Docker Desktop在Windows上必须引入一个轻量级虚拟机,在里面跑一个真正的Linux内核,Docker引擎跑在这个虚拟机的Linux内核之上,然后容器再共用这个Linux内核。
这也就是为什么安装Docker Desktop的电脑必须支持并开启硬件虚拟化功能,比如Intel的VT-x或者AMD的V。没有这个硬件辅助,轻量级虚拟机就跑不起来,Docker自然也就无法工作。
1.2 WSL2和Hyper-V,两条路到底怎么选
早期Docker Desktop在Windows上只能选择基于Hyper-V的虚拟化方案。Hyper-V是微软自家的虚拟机监控程序,功能很完整,但它在Windows 10家庭版上不可用,而很多个人用户的电脑恰恰就是家庭版系统,这是当年的第一道门槛。
后来微软推出了WSL2(Windows Subsystem for Linux 2),本质上是微软自己实现的一个轻量级虚拟机,专门用于在Windows里运行Linux子系统。WSL2不是传统意义上的完整虚拟机,它跟Windows主机共享内核调度,启动速度比Hyper-V快很多,资源占用也更小。Docker Desktop随之支持了基于WSL2的后端模式。
我给你的选型建议是:只要能装WSL2,就优先用WSL2模式。原因我列个表,一看就懂。
| 对比项 | WSL2后端 | Hyper-V后端 |
|---|---|---|
| 系统版本要求 | Windows 10 2004及以上(家庭版也可用) | Windows 10专业版/企业版/教育版 |
| 启动速度 | 秒级 | 相对较慢 |
| 内存占用 | 按需动态分配 | 固定预留较多 |
| 与Windows文件互访 | 通过\wsl$\路径直接访问,方便 | 需要通过配置或共享文件夹 |
| 版本回退 | 可切换回WSL1或Hyper-V | 切换麻烦 |
| 综合推荐度 | 首选 | 仅在无法用WSL2时考虑 |
顺便说一句,WSL2跟VMware、VirtualBox这类第三方虚拟机软件在同时使用时可能会产生虚拟化层的冲突。如果你电脑上装了VMware,装Docker之前最好先想清楚后端方案,否则可能启动时直接报虚拟化被占用的错误。这个细节后面第5章还会详细展开。
2. 安装前的环境体检:先别急着下载安装包
很多人兴致勃勃下载了Docker Desktop安装包,结果双击安装完一启动就报错,然后就卡住了。其实80%的启动失败都能在安装前通过几分钟的环境检查规避掉。这一节我把三个关键检查项按顺序讲清楚。
2.1 BIOS里的虚拟化开关
Docker Desktop启动失败时有一条非常经典的报错:virtualization support not detected,意思是检测不到虚拟化支持。
遇到这个报错,第一反应不是重装Docker,而是进BIOS确认虚拟化开关是否打开。不同品牌的电脑BIOS界面不太一样,但大体的路径是:开机时按F2、F10、Del之类的按键进入BIOS设置,找到Intel Virtualization Technology(Intel平台)或者SVM Mode(AMD平台),把它设为Enabled,保存退出重启。
有个细节容易被忽略:有些笔记本BIOS里虚拟化选项藏得比较深,可能在Advanced或者Processor子菜单下面。还有些品牌机默认会禁用虚拟化,甚至部分电脑的虚拟化开关被锁定,需要先设置BIOS密码才能修改。
判断电脑硬件虚拟化是否已启用,最简单的方法是打开任务管理器,切到"性能"选项卡,点击"CPU",看右下角有没有"虚拟化:已启用"这一行。如果显示"已禁用",别急着装Docker,先把BIOS里那项找到并打开再说。
虚拟化:已启用只有看到这个状态,才说明硬件层面的条件已经满足。
2.2 Windows功能组件与版本核对
第二步是确认Windows 10的版本。按Win+R打开运行窗口,输入winver回车,会弹出版本信息对话框。
这里有两个关键点:
- 版本号必须不低于2004(也就是20H1及更新的版本),WSL2在旧版Windows 10上要么不可用,要么配置起来极其费劲。
- 系统版本决定了你能用哪种后端。家庭版不支持Hyper-V,但支持WSL2,所以家庭版用户老老实实走WSL2路线。
接下来需要开启两个Windows功能:适用于Linux的Windows子系统和虚拟机平台。
操作路径是:控制面板 -> 程序 -> 启用或关闭Windows功能,在弹出的窗口里把这两项勾上,点确定,系统会提示重启电脑。
这里我多说一句:很多人勾选时习惯性地只勾适用于Linux的Windows子系统,结果漏了虚拟机平台。这两个功能在WSL2模式下缺一不可,漏掉任何一个,WSL2都无法正常工作,Docker Desktop启动时大概率会卡在初始化阶段。
2.3 WSL2内核更新包:很多人漏掉的必装项
开启Windows功能并重启后,下一步是安装WSL2的内核更新包。这一步官方文档里写得很清楚,但实际交流中发现不少人会跳过。
你需要前往微软官网下载wsl_update_x64.msi这个安装包,下载后双击安装即可。安装完成后,打开PowerShell或命令提示符,执行:
wsl --set-default-version 2如果命令执行成功,会提示有关信息:有关 WSL 2 的主要区别的信息,请访问...,这说明WSL2已被设置为默认架构。
有一个判断WSL2是否配置成功的小技巧:执行wsl -l -v命令,如果显示了发行版列表且VERSION列是2,说明WSL2正常。如果这里什么输出都没有,说明你还没有安装任何WSL发行版也没关系,Docker Desktop在安装过程中会自动处理一个专用的WSL发行版,但你最好先手动跑到这一步确认内核包没问题。
提示:如果你执行
wsl --set-default-version 2时报错"WSL 2 需要更新其内核组件",基本就是内核更新包没装或者没装成功,重新安装wsl_update_x64.msi后再试。
3. Docker Desktop安装实践与镜像加速器配置
环境项全绿之后,安装Docker Desktop本身反而没什么难度了。但安装完成后的配置环节有几个坑,我一个个拆开说。
3.1 下载安装与关键勾选项
去Docker官网下载Docker Desktop for Windows安装包。下载时注意区分CPU架构,绝大多数人是x64平台,选对应版本即可。
双击安装包,进入安装界面后,有一个关键勾选项需要留意:使用WSL 2而不是Hyper-V。这个选项默认是勾上的,建议保持勾选,除非你明确知道自己需要用Hyper-V模式。
还有一个容易被忽略的问题:安装完成后是否立即启动Docker Desktop。我建议先不要立即启动,等我把下面第3.3节的镜像加速器配置做完再启动,这样能避免第一次启动时因为拉取某些基础组件超时而卡住。
登录账号这一步可以跳过。Docker Desktop现在会提示你登录Docker Hub账户,不登录也能正常使用核心功能,只是拉取镜像会有匿名用户的速率限制。等后面需要推送镜像到Docker Hub时再登录也不迟。
3.2 首次启动后的基础设置
第一次启动Docker Desktop时,它会自动完成WSL后端初始化,这个过程可能需要一两分钟。启动完成后,右下角任务栏会出现Docker的鲸鱼图标。点开主界面,进入Settings菜单,有几个地方值得按照你的实际需求调一下。
首先是General里的Start Docker Desktop when you sign in。如果电脑配置一般、平时也不天天用Docker,我建议取消勾选,改成手动启动,否则每次开机Docker都会默默吃掉一部分内存。
然后是Resources -> Advanced。这里可以调整Docker可用的CPU和内存上限。默认设置是CPU全给、内存按比例分配。如果你只是跑一两个容器做开发测试,给4GB内存就绰绰有余了,不用让它占满整个机器的内存。改完配置后点Apply & Restart生效。
最后是Resources -> WSL Integration。如果你装了多个WSL发行版,需要在这里勾选想让Docker集成的发行版。默认只有Docker Desktop自带的那个发行版被勾选,保持默认即可。
3.3 镜像加速器配置:告别拉取超时
用Docker就绕不开从镜像仓库拉取镜像这个操作。默认情况下,Docker会从Docker Hub官方仓库拉取镜像,但对于国内网络环境来说,直接连Docker Hub经常会出现"拉取超时"、"连接被重置"这类问题,很多新手在这一步就放弃了。
解决方案是配置镜像加速器。打开Docker Desktop的Settings,找到Docker Engine选项卡,在这里会看到一个JSON格式的配置项。在registry-mirrors字段中加入镜像加速地址,保存后点Apply & Restart让配置生效。
{ "registry-mirrors": [ "https://docker.m.daocloud.io", "https://dockerproxy.com" ] }选择镜像加速地址时要注意几点:不要填写来历不明的第三方地址,优先使用有正式备案和长期维护的公共镜像服务;多个地址可以同时配置,Docker会按顺序尝试拉取,第一个挂了会自动尝试第二个。
配置完成后,可以执行docker info命令,在输出中找到Registry Mirrors那一行,如果列出了你配置的地址,说明加速器已经生效。
注意:配置加速器只能解决镜像拉取的问题。容器运行时如果需要访问外网资源,那是另一回事,别混淆了。
4. 第一个容器实战:用Docker跑MySQL 8.0试水
环境搭建好以后,不跑一个真实项目总觉得心里没底。这一节我选择一个最常见的场景——在Docker里跑MySQL 8.0,把整个操作链路走一遍。跑通这个例子,Docker的基本工作流你也就掌握了。
4.1 docker run命令参数的逐一拆解
打开PowerShell或Windows Terminal,执行下面这条命令:
docker run -d \ --name mysql8 \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -e TZ=Asia/Shanghai \ -v D:/docker-data/mysql8:/var/lib/mysql \ mysql:8.0第一次执行时会先拉取镜像,配置了加速器之后,拉取速度应该比较快。拉取完成后容器会自动启动。我来逐条解释每个参数是干什么的,理解这些参数之后,其他容器你基本也就会跑了。
| 参数 | 作用 | 为什么需要 |
|---|---|---|
-d | 后台运行容器 | 不加的话,终端会被容器的日志输出占住 |
--name mysql8 | 给容器命名 | 后面用docker stop mysql8操作时不用记容器ID |
-p 3306:3306 | 端口映射,宿主机3306端口转发到容器3306端口 | 宿主机上的客户端工具(如Navicat)通过localhost:3306访问容器内的MySQL |
-e MYSQL_ROOT_PASSWORD=123456 | 设置环境变量 | MySQL官方镜像用这个变量初始化root密码 |
-e TZ=Asia/Shanghai | 设置容器时区 | 不设置的话容器默认是UTC时区,时间会比北京时间晚8小时 |
-v D:/docker-data/mysql8:/var/lib/mysql | 数据卷挂载,宿主机目录映射到容器目录 | MySQL数据实落盘在D盘,删容器不丢数据 |
这里我要特别强调-v参数。MySQL容器如果删除了,容器内部的数据也会一并消失,除非你把数据目录挂载到宿主机。这就是为什么生产环境部署任何有状态服务(MySQL、Redis、PostgreSQL)时,数据卷挂载是必需品,而不是可选项。
4.2 Windows路径与容器路径的挂载技巧
关于-v参数有个Windows特有的坑:路径写法。
WSL2模式下,Docker Desktop的路径映射规则跟Windows原生路径不太一样。理论上D:/docker-data/mysql8这种写法在Windows命令提示符或PowerShell下用是没问题的,Docker Desktop会自动帮你转换。但如果你在WSL终端里执行docker命令,路径就要写成Linux风格的/mnt/d/docker-data/mysql8。
为了避免路径写错,我的习惯是:往Docker的-v参数里写路径时,统一先在Windows文件资源管理器里创建好目标目录,然后用绝对路径。目录不存在时Docker会自动创建,但权限可能会有点怪,特别是跟权限有关的应用。
此外还有一个容易踩的坑:Docker Desktop对于Windows路径中的盘符大写小写不敏感,不会因为d:和D:的差异出问题。但Windows OneDrive同步目录、中文路径、带空格的路径都可能引发不可预知的挂载问题。稳妥起见,所有挂载目录都不要放在OneDrive或带中文/空格的路径下。
4.3 验证MySQL容器是否真正可用
容器启动后,依次执行下面几个命令验证状态:
docker ps这条命令会列出所有运行中的容器。如果mysql8出现在列表里,STATUS列是Up,说明容器运行正常。
docker logs mysql8查看日志。MySQL初始化过程中会输出大量日志,看到最后出现类似ready for connections的语句,说明数据库已经就绪。
docker exec -it mysql8 mysql -uroot -p直接进入容器内部执行MySQL客户端。输入密码(就是上面环境变量里设置的123456),出现mysql>提示符就大功告成了。
外面用Navicat、DBeaver这类GUI工具连接也验证一下,主机填127.0.0.1,端口3306,用户名root,密码就是你设置的那个。能连上就说明端口映射和网络链路都是通的。
4.4 容器生命周期管理:别怕删容器
很多新手第一次用Docker时不敢删容器,总觉得容器是个很"重"的实体。其实容器本身是临时的,命令跟虚拟机完全不一样。
docker stop mysql8 # 停止容器 docker start mysql8 # 启动已停止的容器 docker restart mysql8 # 重启容器 docker rm mysql8 # 删除容器(数据还在,因为挂载了数据卷) docker rmi mysql:8.0 # 删除镜像重点理解:docker rm删除的是容器本身,不是数据。数据在数据卷里,也就是当初-v指定的宿主机目录D:/docker-data/mysql8里。只要这个目录还在,重新执行一次docker run命令,MySQL的数据就原封不动地回来了。
这一点跟虚拟机有着本质区别。虚拟机删了,虚拟磁盘文件里的数据就没了;Docker配合数据卷,容器可以随意替换、重装、升级,数据始终安全。理解了这层关系,你就掌握了Docker使用的核心心法。
5. 启动失败与运行异常的排查思路
即便准备工作做足了,实际使用Docker Desktop时还是会遇到各种问题。这一节我把我真实遇到过的、以及社群中被问得最多的几类问题整理成排查手册。不像网上那些零散的问答,我把完整的排查链路都写出来。
5.1 "Virtualization support not detected"的完整排查链路
这是Docker Desktop在Windows上最常见的启动报错,没有之一。遇到这个错误,按下面的顺序逐项检查。
第一步:任务管理器确认虚拟化状态。打开任务管理器 -> 性能 -> CPU,看右下角"虚拟化"行。如果显示"已禁用",直接跳转到第二步;如果显示"已启用",但你依然收到这个报错,则跳转到第三步。
第二步:进BIOS开启VT-x/SVM。这一步前面第2.1节已经讲过,这里不再重复。
第三步:检查第三方虚拟化软件冲突。这一步是最多人忽略的。VMware Workstation、VirtualBox这类软件会占用虚拟化层,有时会导致Docker Desktop的虚拟化检测失败。解决方案是关掉这些软件,再启动Docker Desktop试试。
第四步:检查Windows功能里的Hyper-V组件状态。有时候Hyper-V相关的功能处于半开半关的状态,也会干扰虚拟化检测。在管理员权限的PowerShell里执行:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All执行后重启,再启动Docker Desktop。
第五步:仍然不行的话,用管理员权限PowerShell执行bcdedit命令检查Hypervisor是否已启动:
bcdedit /set hypervisorlaunchtype auto如果之前安装过某些虚拟机工具把hypervisor启动类型改成了off,这条命令能把它改回来。改完重启生效。
5.2 WSL2相关的内核错误
Docker Desktop在WSL2模式下启动时,有两条常见的报错信息:
WSL 2 requires an update to its kernel componentThe WSL 2 kernel version is too old
这两条本质上是同一个问题:WSL2内核组件缺失或版本过旧。解决方案是重新安装wsl_update_x64.msi。安装完以后,在PowerShell里执行:
wsl --update wsl --shutdownwsl --shutdown会彻底关闭所有WSL虚拟机,然后重新启动Docker Desktop。这个组合拳能解决绝大多数WSL2内核相关的"疑难杂症"。
补充一个细节:wsl --update需要Windows 10 2004及以上版本才能使用。如果你的系统版本过旧,wsl命令可能根本不认识--update这个参数,这种情况下先把系统更新到最新补丁再看。
5.3 vmmem进程内存占用过高
Docker Desktop跑起来之后,你可能会在任务管理器里看到一个叫vmmem的进程内存占用特别高。这个进程是WSL2虚拟机的内核进程,Docker跑得越久,它占用的内存可能就越高。因为WSL2的动态内存分配机制导致它不会主动把空闲内存归还给Windows。
解决办法是创建一个.wslconfig配置文件,放在用户主目录下(C:\Users\你的用户名\.wslconfig):
[wsl2] memory=4GB processors=2 swap=2GB保存文件后,在PowerShell里执行wsl --shutdown,再启动Docker Desktop。这样WSL2虚拟机最多只使用4GB内存,杜绝了内存失控的风险。
注意别把memory设置得太低,低于2GB的话Docker跑一些稍微大的镜像可能直接OOM。
5.4 镜像拉取超时或失败
镜像加速器配置了,拉取还是偶尔超时怎么办?这里分几种情况。
如果docker pull卡在Waiting状态很长时间,首先确认加速器配置有没有生效。执行docker info,看Registry Mirrors字段。如果配置了多个镜像加速地址,可以检查一下第一个地址是否已经失效,把它换成新的可用地址,保留备用地址。
如果是某个特定镜像拉取失败,比如docker pull mysql:8.0报某个层的下载错误,大概率是网络波动导致的。先执行docker system prune清理掉一半下载的缓存,再重新拉取。
这里顺带说一句:docker system prune是个很有用的清理命令,会删除所有停止的容器、未使用的网络、悬空镜像和构建缓存。我一般是每周执行一次,能释放不少磁盘空间。不过它也会清理掉所有停止的容器,如果你有某些停止状态的容器还想留着,先docker start启动了再清理,或者用docker rm把要丢弃的容器主动删掉。
5.5 Docker Desktop一直卡在开机启动画面
这个问题我遇到过一次,表现是点击Docker Desktop图标后,鲸鱼图标一直在加载动画,很久都进不去主界面。
排查思路是:先看右下角托盘图标,如果图标一直转圈,多半是WSL后端没就绪。打开PowerShell执行wsl -l -v看有没有卡在Stopped状态的发行版。如果有,执行wsl --shutdown强制关闭,然后重启Docker Desktop。
如果转圈问题依然存在,检查是不是Windows时间不对。这个原因听起来匪夷所思,但确实发生过——系统时间偏差过大可能导致Docker Desktop跟镜像仓库的TLS握手失败,表现就是启动界面卡住不动。同步一下时间再启动Docker,问题就消失了。
6. 进阶一步:从单容器到编排,认识Docker Compose
当你习惯了用docker run跑单个容器之后,下一个自然的需求就是:多个容器怎么一起管理?比如你要在本地搭建一套开发环境,包含MySQL、Redis、后端服务,用docker run分别启动也不是不行,但每次都要重敲一堆命令,容器多了以后维护成本直线上升。这就是Docker Compose登场的场景。
6.1 为什么需要Compose:一个命令拉起整套服务
Docker Compose的核心思想是"基础设施即代码"。你只需要写一个compose.yaml文件,把要运行的所有容器、网络、数据卷声明在里面,然后执行一条docker compose up -d,整套服务就全部拉起来了。
这个文件是可版本化的、可评审的、可复现的。换了一台新电脑,把compose.yaml文件和挂载的数据目录拷过去,一条命令就能还原出一模一样的服务环境。而用docker run的话,不光命令难记,还容易漏参数。
6.2 一个实际可用的compose.yaml示例
我来演示一个典型的场景:MySQL 8.0加Redis 7,这是大多数后端开发本地调试的基本套餐。
先创建一个项目目录,比如D:\dev-env,在里面新建compose.yaml文件:
services: mysql8: image: mysql:8.0 container_name: dev-mysql restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: 123456 TZ: Asia/Shanghai ports: - "3306:3306" volumes: - ./data/mysql:/var/lib/mysql command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci redis: image: redis:7 container_name: dev-redis restart: unless-stopped ports: - "6379:6379" volumes: - ./data/redis:/data command: - redis-server - --appendonly yes在D:\dev-env目录下打开PowerShell,执行:
docker compose up -d两条命令的输出分别是MySQL8.0和Redis7的容器启动信息。再执行docker compose ps查看所有服务状态。
这个文件里有几个值得注意的细节:
restart: unless-stopped:容器意外退出时自动重启,除非你手动stop它。对于本地开发环境来说很实用,Docker Desktop一启动,所有服务自动恢复。command:自定义容器启动命令。MySQL这里通过命令行参数设置了utf8mb4字符集;Redis这里开启了AOF持久化。./data/mysql:相对路径的写法。Compose会把当前目录(也就是compose.yaml所在目录)作为基准路径。这意味着整个项目目录是可以完整迁移的。- Compose自动创建了一个默认网络,两个容器之间可以通过服务名互相访问。比如同网络下的后端服务要连MySQL,主机名填
mysql8而不是localhost。
6.3 Compose的日常运维命令
把服务跑起来之后,日常运维基本就是下面这一套命令:
| 命令 | 用途 |
|---|---|
docker compose up -d | 创建并后台启动所有服务 |
docker compose ps | 查看服务状态 |
docker compose logs -f | 跟踪所有服务日志 |
docker compose logs -f mysql8 | 只跟踪mysql8的日志 |
docker compose restart | 重启所有服务 |
docker compose down | 停止并删除所有服务(数据卷还在) |
docker compose down -v | 停止并删除服务且删除数据卷(谨慎使用) |
特别提醒down -v这条命令,-v参数会连带删除数据卷,也就是说MySQL的数据会全部消失。我见过不止一个同事手滑跑过这条命令之后崩溃的。日常清理用down就够了,down -v一定想清楚再用。
6.4 从开发到部署:Compose还能做什么
Compose不是只能用在本地开发。很多小团队甚至直接用Compose文件做生产环境的容器编排。这里我不展开讲生产环境部署的细节,但想提一个常见的应用场景。
像GitLab、Jenkins这类重量级开发工具,官方都提供了现成的docker-compose.yml模板。你在网上搜"GitLab docker compose"或者"Jenkins docker compose",能找到大量经过验证的配置。这些工具的安装配置在裸机环境下是出了名的繁琐,尤其是GitLab,光是依赖组件就够折腾半天的。用Compose部署,把官方模板下载下来,改几个端口和路径,一条命令就起来了。
在Windows上做本地开发测试,这已经足够用了。等哪天需要上生产环境或者集群环境,再考虑Kubernetes这类容器编排平台。
7. 写在最后:我踩过的一些坑和当前的最佳实践
文章写到这里,把Windows 10上安装Docker Desktop的全流程都过了一遍。最后分享几个我在实际使用中沉淀下来的习惯。
第一,所有数据类容器(数据库、缓存、消息队列)全部用Compose管理,数据卷统一放在项目的./data目录下。这样备份数据就是复制整个目录,恢复数据就是把目录拷回去再docker compose up -d,简单粗暴但极其有效。
第二,定期执行docker system prune清理悬空镜像和构建缓存。Windows的磁盘空间本来就比Linux紧张,我见过不少人C盘被Docker的镜像和构建缓存吃满,最后只能重装系统。
第三,Windows上的Docker Desktop更适合做开发调试环境,不建议在Windows上长期跑生产服务。生产环境还是建议用Linux服务器,不管是云主机还是物理机,Docker在Linux上才是完全体,性能和稳定性都更可靠。如果确实需要在Windows上跑服务,也尽量用WSL2后端并做好资源限制。
这套流程我前前后后给不下十个人指导过,从纯粹的Docker新手到想在本机搭一套GitLab+MySQL+Redis环境的同事,按这个路径走下来基本都能顺利跑通。如果安装过程中遇到这篇文没有覆盖到的报错,不妨把报错信息完整贴到搜索引擎里,通常能找到对应的解决方案。Docker的生态已经足够成熟,你遇到的坑,大概率不是第一个踩进去的人。