Windows 11 上从零部署 Docker 完整指南:从环境准备到容器实战

Windows 11 上从零部署 Docker 完整指南:从环境准备到容器实战
这份指南将带你从零开始,在 Windows 11 系统上完成 Docker 的部署与实战。我们会从底层原理讲起,逐步深入到具体操作,确保你不仅会用,还理解为什么这么用。
一、Docker 与 Windows 11:核心概念与优势
在开始之前,我们先快速理解几个关键概念,这将帮助你更好地掌握后续内容。
1. 什么是 Docker?
Docker 是一个开源的应用容器引擎,它允许你将应用程序及其所有依赖项(如库、配置文件等)打包到一个标准化的单元中,这个单元被称为容器(Container)。
2. 为什么在 Windows 11 上使用 Docker?
在 Windows 11 上使用 Docker,主要有以下几个优势:
- 开发环境一致性:在本地创建的容器,可以无缝地在测试服务器、生产服务器上运行,消除了“在我电脑上能跑”的尴尬。
- 隔离与安全:每个容器都有自己独立的文件系统和网络空间,彼此隔离,一个容器的问题不会影响到其他容器或宿主机。
- 资源高效:相比于传统虚拟机(VM),容器共享宿主机的操作系统内核,启动速度快,资源占用低。
- 快速迭代与扩展:可以快速创建、启动、停止和销毁容器,非常适合敏捷开发和微服务架构。
3. WSL 2:Docker 在 Windows 上的最佳搭档
为了在 Windows 上高效地运行 Linux 容器,Docker Desktop 利用了 WSL 2(Windows Subsystem for Linux 2)。
- WSL 2 是什么? 它是一个在 Windows 10/11 上运行的、由微软官方提供的 Linux 内核虚拟机。
- 为什么是 WSL 2?
- 性能:WSL 2 中的 Linux 容器直接与宿主机的文件系统和网络进行交互,性能远超以往的方式。
- 完整的 Linux 内核:提供了更完整的系统调用支持,使得更多的 Linux 工具和应用可以在 Windows 上原生运行。
核心假设:本指南将以 WSL 2 为基础进行讲解,这是目前在 Windows 11 上运行 Docker 的最佳实践。
二、前期准备与环境检查
在安装 Docker 之前,请确保你的 Windows 11 系统满足以下条件。
1. 硬件要求
- CPU 支持虚拟化:绝大多数现代 CPU 都支持。你可以在任务管理器(Ctrl+Shift+Esc)的“性能” -> “CPU”标签页底部查看。
2. 系统要求
- 版本:Windows 11 专业版、企业版或教育版。(重要:Windows 11 家庭版也支持,但需要额外安装 WSL 2)
- 已启用相关功能:需要开启“虚拟机平台”和“适用于 Linux 的 Windows 子系统”。
三、安装与配置 WSL 2
这是整个安装过程中最关键的一步。我们将通过命令行快速完成。
步骤 1:以管理员身份打开 PowerShell
在开始菜单搜索 PowerShell,右键点击它,选择“以管理员身份运行”。
步骤 2:启用必要的 Windows 功能
在 PowerShell 窗口中,依次运行以下两条命令。这些命令会启用 WSL 和虚拟机平台功能。
# 启用适用于 Linux 的 Windows 子系统
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# 启用虚拟机平台
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
提示:
/norestart参数意味着命令执行后不会立即重启,但在所有命令执行完毕后,你必须手动重启电脑才能使更改生效。
步骤 3:重启电脑
保存好你正在进行的工作,然后重启 Windows 11。
步骤 4:安装 WSL 并设置默认版本
电脑重启后,再次以管理员身份打开 PowerShell。
运行以下命令,它会自动下载并安装最新的 WSL 组件和一个默认的 Linux 发行版(通常是 Ubuntu)。
wsl --install
对于 Windows 11 家庭版用户:此命令同样适用,它会自动处理所有依赖。
安装完成后,设置 WSL 2 为默认版本,这能确保未来安装的所有 Linux 发行版都将使用 WSL 2。
wsl --set-default-version 2
步骤 5:验证 WSL 安装
运行以下命令来检查 WSL 的状态:
wsl --list --verbose
如果看到类似下面的输出,且 VERSION 列显示为 2,则表示 WSL 2 已成功安装并配置。
NAME STATE VERSION
* Ubuntu Running 2
四、下载与安装 Docker Desktop
现在,WSL 2 已经就绪,我们可以安装 Docker 的图形化管理工具了。
步骤 1:下载 Docker Desktop
访问 Docker 官方网站的下载页面:
https://www.docker.com/products/docker-desktop/
点击 “Download for Windows” 按钮下载安装程序。
步骤 2:安装 Docker Desktop
- 双击下载的安装文件(通常是
Docker Desktop Installer.exe)。 - 在安装向导中,请务必勾选 “Use WSL 2 instead of Hyper-V”。这是关键设置,它会将 Docker 的后端指向我们已经配置好的 WSL 2。
- 点击 “OK” 开始安装。
步骤 3:启动与验证
安装完成后,从开始菜单启动 “Docker Desktop”。
启动后,你会在任务栏的系统托盘区看到 Docker 的小鲸鱼图标。当图标不再显示“starting…”时,说明 Docker 已经成功运行。
为了确认一切正常,打开一个新的 PowerShell 或命令提示符(cmd)窗口,运行以下命令:
docker --version
你应该能看到 Docker 的版本信息输出,例如:Docker version 24.0.7, build afdd53b
再运行一个更全面的检查命令:
docker run hello-world
如果看到 “Hello from Docker!” 的消息,恭喜你!Docker 已经在你的 Windows 11 上成功运行了。
五、Docker Desktop 核心设置与优化
为了获得更好的使用体验,我们需要对 Docker Desktop 进行一些关键配置。
1. 资源分配(内存与 CPU)
默认情况下,Docker 会占用较多的系统资源。你可以根据自己电脑的配置进行调整。
- 右键点击任务栏的 Docker 图标,选择 “Settings”。
- 在左侧导航栏选择 “Resources” -> “Advanced”。
- 在这里,你可以拖动滑块来限制 Docker 可以使用的内存(Memory)和 CPU 核心数。建议设置为你电脑总内存的一半左右,以保证宿主机系统的流畅运行。
- 点击 “Apply & Restart” 保存并重启 Docker。
2. 镜像加速(国内用户必做)
由于网络原因,直接从 Docker 官方仓库(Docker Hub)拉取镜像会非常慢。配置国内的镜像加速器是解决此问题的最佳方案。
- 在 “Settings” 中,选择 “Docker Engine”。
- 你会看到一个 JSON 格式的配置文件。在
registry-mirrors数组中添加国内的镜像地址。
这里提供几个常用的公共镜像源(任选其一或多个添加):
- 网易云:
"http://hub-mirror.c.163.com" - 阿里云:
"https://<你的专属ID>.mirror.aliyuncs.com"(需要登录阿里云控制台获取) - 腾讯云:
"https://<你的专属ID>.mirror.tencentcloudcr.com"(需要登录腾讯云控制台获取)
修改后的配置文件看起来像这样:
{
"registry-mirrors": [
"http://hub-mirror.c.163.com"
],
"insecure-registries": [],
"debug": false,
"experimental": false
}
- 点击 “Apply & Restart” 保存并重启 Docker。
3. 文件共享与挂载路径
理解文件路径是在 Windows 上使用 Docker 的一个难点。
- Windows 路径在 WSL/Linux 容器中:当你在 Docker 命令中使用 Windows 路径(如
D:\my-project)时,Docker 会自动处理。但更推荐的做法是在 WSL 环境中操作。 - WSL 路径在 Windows 中:你可以在 Windows 的文件资源管理器地址栏输入
\\wsl$来访问所有 WSL 发行版的文件系统。例如,Ubuntu 的根目录在\\wsl$\Ubuntu。 - 推荐工作流:将你的项目文件放在 WSL 的 home 目录下(如
~或~/projects),然后在 VS Code(安装了 WSL 扩展后)中直接打开这个目录进行开发。这样在运行容器并挂载目录时,性能和路径处理都会是最佳的。
六、Docker 核心概念与常用命令实战
这部分是 Docker 的精髓。我们将通过实战来理解并掌握它们。
1. 三大核心概念
- 镜像 (Image):可以理解为一个只读的模板,包含了运行某个应用所需的所有代码、运行时、库、环境变量和配置文件。它是创建容器的基础。
- 容器 (Container):镜像的一个运行实例。你可以把它想象成一个轻量级的、独立的虚拟机。
- 仓库 (Repository):存放镜像的地方,类似于代码仓库(如 GitHub)。Docker Hub 是官方的公共仓库。
2. 常用命令实战
场景一:拉取并运行一个基础的 Ubuntu 容器
目标:从 Docker Hub 拉取最新的 Ubuntu 镜像,并创建一个名为 my-first-ubuntu 的容器,同时将 Windows 的 D:\docker-data 目录挂载到容器的 /app 目录。
-
拉取镜像:
docker pull ubuntu:latestubuntu是镜像名。:latest是标签(tag),代表最新版本。
-
创建并启动容器:
docker run -dit --name my-first-ubuntu -v D:\docker-data:/app ubuntu /bin/bash-d或--detach:后台运行容器。-i或--interactive:保持标准输入开放。-t或--tty:分配一个伪终端。通常-it一起使用,以便进入容器交互。--name my-first-ubuntu:为容器指定一个独一无二的名字。-v D:\docker-data:/app或--volume ...:挂载目录。格式为宿主机路径:容器内路径。ubuntu:指定使用哪个镜像来创建容器。/bin/bash:容器启动后要执行的命令。
-
查看正在运行的容器:
docker ps你应该能看到
my-first-ubuntu正在运行。 -
进入容器:
docker exec -it my-first-ubuntu /bin/bash执行后,你的命令行提示符会改变,表示你已经进入了容器的内部。现在你可以像在一个独立的 Linux 系统中一样执行命令了。
-
在容器内操作:
- 查看当前目录:
pwd(应该是/) - 进入挂载的
/app目录:cd /app - 创建一个文件:
touch hello_from_container.txt - 退出容器:
exit
- 查看当前目录:
-
验证挂载:退出容器后,回到 Windows 的
D:\docker-data目录下,你会发现hello_from_container.txt文件已经存在于此。
场景二:运行一个 Web 应用(Nginx)
目标:运行一个 Nginx 服务器容器,并通过 Windows 的浏览器访问它。
-
拉取并运行 Nginx 容器:
docker run --name my-nginx -p 8080:80 -d nginx-p 8080:80或--publish ...:端口映射。格式为宿主机端口:容器内端口。这里将宿主机的8080端口映射到容器的80端口(Nginx 默认端口)。
-
访问 Web 服务:
打开你的浏览器(如 Edge、Chrome),在地址栏输入http://localhost:8080。如果看到 Nginx 的欢迎页面,说明一切正常。
场景三:构建自己的 Docker 镜像
目标:创建一个简单的 “Hello, Docker!” Node.js 应用,并为它构建一个 Docker 镜像。
-
创建项目文件:
在你的电脑上创建一个新文件夹my-docker-app,并在其中创建两个文件。-
app.js(应用代码)const http = require('http'); const port = 3000; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello, Docker!\n'); }); server.listen(port, () => { console.log(`Server running at http://localhost:${port}/`); }); -
Dockerfile(构建指令)# 使用官方 Node.js LTS 版本作为基础镜像 FROM node:lts-alpine # 在容器中创建一个目录来存放应用代码 WORKDIR /usr/src/app # 将 package.json 和 package-lock.json 复制到工作目录 COPY package*.json ./ # 安装应用依赖 RUN npm install # 将你的应用源代码复制到容器的工作目录 COPY . . # 暴露应用监听的端口 EXPOSE 3000 # 定义容器启动时运行的命令 CMD [ "node", "app.js" ] -
package.json(依赖描述){ "name": "my-docker-app", "version": "1.0.0", "description": "A simple Node.js app", "main": "app.js", "dependencies": { "express": "^4.18.2" }, "scripts": { "start": "node app.js" } }
-
-
构建镜像:
在my-docker-app文件夹中打开命令行,运行以下命令:docker build -t my-node-app:1.0 .-t my-node-app:1.0:为镜像打上标签。my-node-app是镜像名,1.0是版本号。.:表示 Dockerfile 所在的当前目录。
-
运行你自己的镜像:
docker run --name my-running-app -p 4000:3000 -d my-node-app:1.0 -
访问你的应用:
在浏览器中访问http://localhost:4000,你应该能看到 “Hello, Docker!” 的字样。
七、常见问题与排错
| 问题现象 | 可能原因与解决方案 |
|---|---|
| Docker 启动失败,提示 WSL 2 未安装 | 1. 按照本指南第三部分重新检查并安装 WSL 2。 2. 确保 BIOS/UEFI 中的虚拟化功能已开启。 |
| 拉取镜像速度极慢或失败 | 1. 检查网络连接。 2. 按照本指南第五部分第2点配置国内镜像加速器。 |
| 挂载目录后,容器内无法访问或权限错误 | 1. 检查路径格式是否正确。 2. 如果在 WSL 中操作,推荐使用 WSL 的路径(如 ~)而非 Windows 路径。3. Windows 路径中的反斜杠 \ 在某些情况下需要转义为 \\。 |
docker ps 看不到容器,但 docker ps -a 可以 |
容器已经停止运行。使用 docker logs <容器名> 查看日志,分析为何退出。 |
| 端口映射后,无法从宿主机访问 | 1. 检查端口映射命令是否正确 (-p host_port:container_port)。2. 检查容器内的应用是否监听在 0.0.0.0 而非 127.0.0.1。3. 检查 Windows 防火墙是否有相关拦截规则。 |
八、下一步与进阶方向
当你掌握了以上基础后,可以探索以下方向:
- Docker Compose:学习如何使用
docker-compose.yml文件来定义和管理多个容器的应用(例如,一个 Web 应用 + 一个数据库)。 - Dockerfile 最佳实践:深入学习如何编写更高效、更安全、更小的 Docker 镜像。
- CI/CD 集成:将 Docker 融入到你的自动化构建和部署流程中(例如使用 GitHub Actions)。
- Kubernetes (K8s):当你需要管理成百上千个容器时,学习 Kubernetes 这个容器编排系统将是你的下一个目标。
更多推荐


所有评论(0)