Windows 下 Docker 安装与使用全攻略(含避坑指南)

Windows 下 Docker 安装与使用全攻略(含避坑指南)
告别“在我机器上好好的”魔咒,一个容器搞定所有环境问题!

“这代码在我电脑上跑得好好的,怎么一到你那就挂了呢?” —— 这句话是不是听着耳熟?作为一名开发者,你可能无数次被环境差异搞得焦头烂额。

Python版本不对、Node.js依赖冲突、数据库配置麻烦……这些问题那是非常熟悉的。

Docker 这个神器能帮你彻底解决这些烦恼!

这篇文章,我来手把手教你在Win11上安装和使用Docker,让你享受一致的开发体验。

一、为什么Windows开发者也需要Docker?

你可能会想:“Docker不是主要在Linux上用的吗?我在Windows上折腾这个干嘛?”

问得好!这里有几个实实在在的理由:

1. 开发环境一致性

你写代码用的是Windows,但服务器跑的是Linux?没问题!Docker容器在任何系统上运行的行为都是一样的。你再也不用担心“本地能跑,上线就崩”的尴尬。

2. 快速搭建开发环境

想用MySQL?一条命令搞定。需要Redis?再加一条。不用手动下载、安装、配置,省时省力。

3. 保持系统整洁

每个应用都在独立的容器里运行,不会污染你的Windows系统。卸载也简单,删除容器即可。

4. 团队协作标准化

新同事加入项目?给他一个Docker配置文件,几分钟就能把开发环境跑起来,不用再花半天配环境。

5. 学习新技术成本低

想试试MongoDB?用Docker跑一个,玩够了就删掉,完全不留下任何痕迹。

简单说,Docker就像是个万能应用打包盒,让你在Windows上也能轻松享受Linux般的开发体验。

二、Docker是个啥?简单解释一下

想象一下:你做了个美味的蛋糕(你的应用),Docker帮你把蛋糕连同盘子、叉子、餐巾纸(所有依赖)一起打包进一个密封盒(容器)。这个盒子在任何桌子上(任何系统)打开,都能吃到一模一样的蛋糕。

传统方式是:你告诉别人“需要烤箱、面粉、糖……”,别人自己准备,结果可能做出个煎饼。而Docker是直接把成品打包送过去。

技术上讲,Docker使用容器化技术,比虚拟机轻量得多,启动速度秒级,资源占用也少。

三、安装前的准备工作

在开始之前,确保你的Win11满足以下条件:

  • 系统版本:Windows 11 64位(家庭版、专业版等都行)
  • 内存:至少4GB(建议8GB以上)
  • 存储空间:至少60GB可用空间
  • 虚拟化支持:需要在BIOS/UEFI中开启(后面会教你怎么检查)

小贴士:Win11家庭版没有Hyper-V,但可以通过WSL 2完美运行Docker,所以家庭版用户不用担心!

四、一步步安装Docker

步骤1:检查并开启虚拟化

  1. Ctrl+Shift+Esc打开任务管理器
  2. 切换到“性能”标签页
  3. 查看右下角“虚拟化”状态

如果显示“已启用”,如下图所示:

恭喜,跳过这步。

如果“已禁用”,需要重启电脑进入BIOS/UEFI设置,找到虚拟化技术(通常叫Intel VT-x或AMD-V)并开启。

步骤2:安装WSL 2(Docker的好搭档)

WSL(Windows Subsystem for Linux)让Windows能原生运行Linux程序,WSL 2性能更好,是Docker的推荐后端。

  1. 管理员身份打开PowerShell

输入以下命令:

# 启用WSL功能 dism.exe /online /enable-feature/featurename:Microsoft-Windows-Subsystem-Linux /all /norestart # 启用虚拟机平台功能 dism.exe /online /enable-feature/featurename:VirtualMachinePlatform /all /norestart 
  1. 重启电脑(必须的,别偷懒!)

重启后,再次以管理员身份打开PowerShell,执行:

# 安装WSL wsl --install 

启动之后,你会看到如下界面:

验证安装:运行 wsl --list --verbose

wsl --list --verbose 

步骤3:安装Docker Desktop

  1. 访问Docker官网下载安装包:https://www.docker.com/products/docker-desktop
  2. 双击下载的 Docker Desktop Installer.exe
  3. 安装过程中,你只需要等待即可

安装完成后,启动 Docker ,会让你登录,你可以选择不登录,直接进来:

步骤4:验证安装

打开PowerShell或命令提示符,输入:

docker --version 

看到版本号输出,比如 Docker version 29.1.3, build f52814d,说明安装成功。

再试个经典的:

docker run hello-world 

如果看到“Hello from Docker!”的欢迎信息,说明你可以正式使用 Docker 了,但。。。如果不出意外,你会看到这样的结果:

也就是找不到镜像,具体的错误信息:

Unable to find image 'hello-world:latest' locally docker: Error response from daemon: failed to resolve reference "docker.io/library/hello-world:latest": failed to do request: Head "https://registry-1.docker.io/v2/library/hello-world/manifests/latest": dialing registry-1.docker.io:443 container via direct connection because Docker Desktop has no HTTPS proxy: connecting to registry-1.docker.io:443: dial tcp 185.60.216.169:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

Docker 试图从Docker Hub(官方镜像仓库)下载hello-world镜像,但是网络连接失败了。

此时我们可以配置镜像加速器(科学上网)。

步骤5:配置镜像加速

我试了很多加速地址,就这个好使:https://docker.1ms.run

{"registry-mirrors":["https://docker.1ms.run"],"features":{"buildkit":true}}

配置好以后,用 docker info 看一下:

这个时候再运行 docker run hello-world 就可以正常下载了:

PS:如果镜像加速不生效,可以直接在 docker 命令中指定从哪里查询、下载、使用。比如:

docker search docker.1ms.run/mysql 

五、Docker常用命令演示

安装好了,现在来试试。以下命令你肯定会经常用到:

1. 镜像相关命令(镜像好比容器的“安装包”)

# 搜索镜像(比如搜索MySQL) docker search docker.1ms.run/mysql # 拉取镜像到本地(下载) docker pull nginx # 查看本地所有镜像 docker images # 删除镜像 docker rmi 镜像名或ID 

2. 容器相关命令(容器是镜像运行后的实例)

# 运行容器(基本格式) docker run [选项] 镜像名 # 运行nginx容器,并映射端口 docker run --name my-web -p 8080:80 -d nginx # --name 给容器起名# -p 端口映射(主机端口:容器端口)# -d 后台运行# 查看运行中的容器 docker ps# 查看所有容器(包括停止的) docker ps-a # 停止容器 docker stop 容器名或ID # 启动已停止的容器 docker start 容器名或ID # 重启容器 docker restart 容器名或ID # 删除容器(必须先停止) docker rm 容器名或ID # 强制删除运行中的容器 docker rm-f 容器名或ID # 查看容器日志(调试神器) docker logs 容器名或ID # 进入容器内部(像SSH一样) docker exec -it 容器名或ID /bin/bash 

3. 实战演练:运行一个Web服务器

让我们实际操练一下,运行一个Nginx服务器:

# 1. 拉取nginx镜像(如果还没拉取过) docker pull docker.1ms.run/nginx # 2. 运行容器 docker run --name my-nginx -p 8080:80 -d docker.1ms.run/nginx # 3. 查看容器是否运行 docker ps# 4. 打开浏览器访问 http://localhost:8080# 看到Nginx欢迎页,成功!# 5. 查看容器日志 docker logs my-nginx # 6. 进入容器内部看看 docker exec -it my-nginx /bin/bash # 进去后可以执行 ls、cat 等命令,输入 exit 退出# 7. 停止容器 docker stop my-nginx # 8. 删除容器 docker rm my-nginx 

执行步骤及结果:

4. 其他实用命令

# 查看Docker系统信息 docker info # 查看磁盘使用情况 docker system df # 清理未使用的镜像、容器等 docker system prune # 一次性清理所有未使用的资源(谨慎使用) docker system prune -a 

六、解决常见问题

1. 拉取镜像慢如蜗牛?

这个在前面我已经演示过如何配置,这里再重申一下,因为这个我相信是绝大多少人都会碰到的情况,甚至有时候配了镜像加速也会失效,直至劝退、放弃使用 Docker。

在Docker Desktop中:

  1. 右键系统托盘中的Docker图标 → Settings
  2. 选择“Docker Engine”
  3. 点击“Apply & Restart”

在配置文件中添加:

{"registry-mirrors":["镜像加速地址1","镜像加速地址2"]}

有时候你配置的镜像加速不起作用,那就多试几个,还可以在拉取镜像时指定加速地址,像这样:

docker pull docker.1ms.run/nginx 

2. Docker启动失败?

  • 检查WSL是否安装正确:运行 wsl --list --verbose
  • 确保虚拟化已开启(任务管理器中查看)
  • 尝试以管理员身份运行Docker Desktop

3. 命令记不住怎么办?

记住最常用的几个就行:docker rundocker psdocker stopdocker rm

其他需要时查文档,用多了自然记住。

七、接下来玩什么?

现在你已经掌握了Docker的基本操作,可以尝试更高级的玩法:

  1. 定制自己的镜像:编写Dockerfile,把自己的应用打包成镜像
  2. 多容器编排:使用Docker Compose一键启动多个关联容器(比如Web应用+数据库+缓存)
  3. 数据持久化:学习使用卷(volumes)保存容器数据
  4. 网络配置:让多个容器互相通信

Docker的世界很大,我们使用它的关键不是记住所有命令,而是理解容器化的思想——一次打包,到处运行。


欢迎关注、点赞、收藏,下次遇到Docker问题不迷路! 🐳

Read more

【OpenClaw从入门到精通】第10篇:OpenClaw生产环境部署全攻略:性能优化+安全加固+监控运维(2026实测版)

【OpenClaw从入门到精通】第10篇:OpenClaw生产环境部署全攻略:性能优化+安全加固+监控运维(2026实测版)

摘要:本文聚焦OpenClaw从测试环境走向生产环境的核心痛点,围绕“性能优化、安全加固、监控运维”三大维度展开实操讲解。先明确生产环境硬件/系统选型标准,再通过硬件层资源管控、模型调度策略、缓存优化等手段提升响应速度(实测响应效率提升50%+);接着从网络、权限、数据三层构建安全防护体系,集成火山引擎安全方案拦截高危操作;最后落地TenacitOS可视化监控与Prometheus告警体系,配套完整故障排查清单和虚拟实战案例。全文所有配置、代码均经实测验证,兼顾新手入门实操性和进阶读者的生产级部署需求,帮助开发者真正实现OpenClaw从“能用”到“放心用”的跨越。 优质专栏欢迎订阅! 【DeepSeek深度应用】【Python高阶开发:AI自动化与数据工程实战】【YOLOv11工业级实战】 【机器视觉:C# + HALCON】【大模型微调实战:平民级微调技术全解】 【人工智能之深度学习】【AI 赋能:Python 人工智能应用实战】【数字孪生与仿真技术实战指南】 【AI工程化落地与YOLOv8/v9实战】【C#工业上位机高级应用:高并发通信+性能优化】 【Java生产级避坑指南:

By Ne0inhk
ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验

ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验

🎬 渡水无言:个人主页渡水无言 ❄专栏传送门: 《linux专栏》《嵌入式linux驱动开发》《linux系统移植专栏》 ❄专栏传送门: 《freertos专栏》《STM32 HAL库专栏》 ⭐️流水不争先,争的是滔滔不绝  📚博主简介:第二十届中国研究生电子设计竞赛全国二等奖 |国家奖学金 | 省级三好学生 | 省级优秀毕业生获得者 | ZEEKLOG新星杯TOP18 | 半导纵横专栏博主 | 211在读研究生 在这里主要分享自己学习的linux嵌入式领域知识;有分享错误或者不足的地方欢迎大佬指导,也欢迎各位大佬互相三连 目录 前言  一、实验基础说明 1.1、互斥体简介 1.2 本次实验设计思路 二、硬件原理分析(看过之前博客的可以忽略) 三、实验程序编写 3.1 互斥体 LED 驱动代码(mutex.c) 3.2.1、设备结构体定义(28-39

By Ne0inhk
Flutter for OpenHarmony:swagger_dart_code_generator 接口代码自动化生成的救星(OpenAPI/Swagger) 深度解析与鸿蒙适配指南

Flutter for OpenHarmony:swagger_dart_code_generator 接口代码自动化生成的救星(OpenAPI/Swagger) 深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 后端工程师扔给你一个 Swagger (OpenAPI) 文档地址,你会怎么做? 1. 对着文档,手写 Dart Model 类(容易写错字段类型)。 2. 手写 Retrofit/Dio 的 API 接口定义(容易拼错 URL)。 3. 当后端修改了字段名,你对着报错修半天。 这是重复劳动的地狱。 swagger_dart_code_generator 可以将 Swagger (JSON/YAML) 文件直接转换为高质量的 Dart 代码,包括: * Model 类:支持 json_serializable,带 fromJson/

By Ne0inhk
Linux 开发别再卡壳!makefile/git/gdb 全流程实操 + 作业解析,新手看完直接用----《Hello Linux!》(5)

Linux 开发别再卡壳!makefile/git/gdb 全流程实操 + 作业解析,新手看完直接用----《Hello Linux!》(5)

文章目录 * 前言 * make/makefile * 文件的三个时间 * Linux第一个小程序-进度条 * 回车和换行 * 缓冲区 * 程序的代码展示 * git指令 * 关于gitee * Linux调试器-gdb使用 * 作业部分 前言 做 Linux 开发时,你是不是也遇到过这些 “卡脖子” 时刻?写 makefile 时,明明语法没错却报错,最后发现是依赖方法行没加 Tab;想提交代码到 gitee,记不清 git add/commit/push 的 “三板斧”,还得反复搜教程;用 gdb 调试程序,输了命令没反应,才想起编译时没加-g生成 debug 版本;甚至连写个进度条,都搞不懂\r和\n的区别,导致进度条乱跳…… 其实这些问题,

By Ne0inhk