☰
Docker 从零入门:Windows 下 WSL 2 + Docker Desktop 安装与基本使用
2026/10/8 18:23:05 网站建设 项目流程

Docker 从零入门:Windows 下 WSL 2 + Docker Desktop 安装与基本使用

前言

最近想学 Docker,主要是被“换台电脑就要重配一遍环境”这件事搞烦了。前后端加数据库,每次都要开三个终端,装依赖、配端口,一个版本对不上就报错。听说 Docker 能把环境和应用一起打包,一条命令全启动,就动手试了试。

这篇文章记录我从零开始,在 Windows 上装好 Docker、跑通第一个容器、再到用 Docker Compose 一键启动多个服务的完整过程,包括中间踩的坑。适合 Docker 零基础、用 Windows 想入门的朋友。

读完你能得到:

  • 理解 Docker 是什么、解决什么问题
  • 在 Windows 上正确安装 WSL 2 + Docker Desktop
  • 掌握 Docker 基本命令
  • 会用 Docker Compose 一键启动前后端和数据库

环境说明:Windows 11,Docker Desktop 最新版,WSL 2 + Ubuntu。


一、Docker 是什么,解决什么问题

一句话定义

Docker 是一个容器化平台,把应用和它需要的运行环境(代码、依赖、配置)打包成一个标准化的“容器”,让它在任何装了 Docker 的机器上都能以相同方式运行。

传统方式的痛点

假设你要跑一个前后端分离的项目:

  1. 开一个终端,进后端目录,装依赖,启动后端
  2. 再开一个终端,进前端目录,装依赖,启动前端
  3. 再开一个终端,装 MySQL,配用户名密码,启动数据库
  4. 三个终端都得开着,关一个服务就挂
  5. 换台电脑,所有环境重新配一遍,还可能版本对不上

Docker 的三个核心概念

  • 镜像(Image):只读模板,包含应用运行所需的一切。类似“安装包”。
  • 容器(Container):镜像跑起来的实例,独立、隔离。类似“正在运行的程序”。
  • 仓库(Registry):存放镜像的地方,默认是 Docker Hub。

你从仓库拉镜像,用镜像启动容器,容器里跑你的应用。


二、Windows 上安装 Docker

2.1 为什么 Windows 需要 WSL 2

Docker 容器不是虚拟机,它直接共用宿主机的 Linux 内核,靠的是 Linux 内核的几个特性:

  • Namespace:让每个容器“以为”自己独占一台机器
  • Cgroups:限制容器能用多少 CPU、内存
  • UnionFS:实现镜像分层

这些都是 Linux 内核才有的,Windows 内核没有。所以 Docker 在 Windows 上没法直接跑 Linux 容器。

微软的解决方案是WSL 2(Windows Subsystem for Linux 2):用一个轻量级虚拟机跑真正的 Linux 内核,然后和 Windows 深度打通。Docker Desktop 在 Windows 上就是靠它来运行容器的。

WSL 2 架构大致是:Windows 用户态 ↔ 轻量虚拟机(Linux 内核 + Ubuntu + Docker 引擎 + 容器)。它和 Windows 文件、端口、进程都是打通的。

2.2 开启 WSL 2

用管理员身份打开 PowerShell,输入:

wsl--install

这条命令会自动开启所需功能、下载 Linux 内核、安装 Ubuntu 发行版,并设为默认 WSL 2。装完重启电脑。

重启后检查版本:

wsl--list--verbose

如果显示VERSION是2,就对了。

2.3 我遇到的坑:没有已安装的分发

第一次跑wsl --list --verbose,输出是这样的:

适用于 Linux 的 Windows 子系统没有已安装的分发。 可通过安装包含以下说明的分发来解决此问题: 使用“wsl.exe --list --online' ”列出可用的分发 和 “wsl.exe --install <Distro>” 进行安装。

原因:WSL 平台装好了,但还没有安装任何 Linux 发行版。就像买了台电脑装好 BIOS,但硬盘是空的。

解决:先看有哪些可选:

wsl--list--online

然后安装 Ubuntu:

wsl--install-d Ubuntu

安装过程会提示创建 Linux 用户名和密码。注意:这个密码输入时不显示,是正常现象。这个账号和 Windows 账号没关系。

装完再验证:

wsl--list--verbose

应该能看到:

NAME STATE VERSION * Ubuntu Running 2

如果wsl --install -d Ubuntu报错,先跑wsl --update更新内核,再重试。

2.4 安装 Docker Desktop

去 Docker 官网下载Docker Desktop Installer.exe,运行。

安装时会让你选配置:

  • Per-user installation (Recommended):只给当前用户安装,不需要管理员权限,用 WSL 2 后端。推荐选这个。
  • All-users installation:给所有用户安装,需要管理员密码,能用 Windows Containers 和 Hyper-V 后端。

个人开发选默认的 Per-user 就行。下面的“Add shortcut to desktop”勾上。

装完后启动 Docker Desktop,它应该能自动对接 WSL 2 里的 Ubuntu。

2.5 验证安装

在 PowerShell 里跑:

docker run hello-world

看到Hello from Docker!就说明全部搞定。


三、Docker 基本使用

3.1 拉取镜像

dockerpull nginx

从 Docker Hub 下载最新的 nginx 镜像。下载完用docker images查看本地镜像。

3.2 启动容器

dockerrun-d-p8080:80--namemy-nginx nginx

参数解释:

  • docker run:创建并启动容器
  • -d:后台运行
  • -p 8080:80:把本机 8080 端口映射到容器内 80 端口
  • --name my-nginx:给容器起名
  • nginx:使用的镜像名

跑完后浏览器访问http://localhost:8080,能看到 nginx 欢迎页。

3.3 查看和管理容器

dockerps# 看正在运行的容器dockerps-a# 看所有容器,包括已停止的dockerstop my-nginx# 停止容器dockerstart my-nginx# 启动已停止的容器dockerrestart my-nginx# 重启dockerrmmy-nginx# 删除容器(需先停止)dockerrm-fmy-nginx# 强制删除运行中的容器

3.4 进入容器内部

dockerexec-itmy-nginx /bin/bash
  • exec:在运行中的容器里执行命令
  • -it:交互式终端
  • /bin/bash:打开 bash,有些镜像没有 bash 可换成/bin/sh

进去后就像在一台 Linux 里,exit退出。退出不会停止容器。

3.5 看日志

dockerlogs my-nginx# 看全部日志dockerlogs-fmy-nginx# 实时跟踪dockerlogs--tail100my-nginx# 只看最后 100 行

调试程序报错时最常用。

3.6 删除镜像

dockerrmi nginx# 删除镜像dockerrmi-fnginx# 强制删除

删除前要确保没有容器在用这个镜像。


四、多服务一键启动:Docker Compose

4.1 传统方式 vs Compose

实际项目往往要同时跑好几个容器(Web + 数据库 + Redis)。手动一个个docker run很麻烦,docker compose就是解决这个问题的。

4.2 写 docker-compose.yml

在项目根目录创建docker-compose.yml:

services:frontend:build:./frontendports:-"3000:3000"backend:build:./backendports:-"8000:8000"depends_on:-dbdb:image:mysql:8environment:MYSQL_ROOT_PASSWORD:123456volumes:-db-data:/var/lib/mysqlvolumes:db-data:
  • frontend/backend:用各自目录下的 Dockerfile 构建
  • depends_on:控制启动顺序,让后端等数据库先起来
  • db:直接用 mysql 官方镜像
  • volumes:数据持久化,容器删了数据还在

4.3 一键启动和停止

dockercompose up-d# 启动全部服务dockercompose down# 停止并删除dockercompose logs-f# 看日志

三个服务全部启动,各自在独立容器里跑。停止也是一条命令。

4.4 数据持久化:Volume

容器删了,里面的数据也没了。数据库这类需要保留数据的,要用卷:

dockerrun-d-p3306:3306\-vmysql-data:/var/lib/mysql\-eMYSQL_ROOT_PASSWORD=123456\--namemy-mysql mysql
  • -v mysql-data:/var/lib/mysql:把卷挂载到容器数据目录
  • -e MYSQL_ROOT_PASSWORD=123456:设置环境变量

查看卷:docker volume ls,删除卷:docker volume rm mysql-data。


五、Dockerfile:把自己的应用打包成镜像

写一个Dockerfile:

FROM python:3.11 WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . CMD ["python", "app.py"]

构建:

dockerbuild-tmy-app.
  • -t my-app:给镜像起名
  • .:构建上下文是当前目录

构建完就能docker run my-app跑起来。

说明:依赖会被打包进镜像,之后启动不用重新下载。但镜像体积不会变小,甚至更大,因为它还包含基础操作系统。Docker 省空间靠的是多个镜像共享基础层。


六、常见问题与踩坑

6.1 WSL 没有已安装的分发

现象:wsl --list --verbose提示没有已安装的分发。

原因:WSL 平台装好了,但没装 Linux 发行版。

解决:wsl --install -d Ubuntu。

6.2 镜像拉取慢

现象:docker pull卡住或超时。

解决:配置国内镜像加速器。在 Docker Desktop 设置里添加registry-mirrors,或用阿里云、中科大的地址。

6.3 端口映射失败

现象:docker run -p 8080:80报端口被占用。

原因:本机 8080 已经被别的程序用了。

解决:换一个本机端口,比如-p 8081:80。

6.4 进容器报错没有 bash

现象:docker exec -it 容器名 /bin/bash报executable file not found。

原因:有些精简镜像没有 bash。

解决:换成/bin/sh。


七、常用命令速查

目的命令
看本地镜像docker images
拉镜像docker pull 镜像名
跑容器docker run ...
看运行中容器docker ps
看所有容器docker ps -a
停止/启动/删除容器docker stop/start/rm 名字
进容器docker exec -it 名字 bash
看日志docker logs -f 名字
看卷docker volume ls
清理无用资源docker system prune

八、总结

学完这一套,我最大的收获是三点:

  1. 环境一致性:镜像把应用和依赖打包在一起,换台电脑不用重配。
  2. 一键启动:Docker Compose 把前后端和数据库一次拉起,告别开三个终端。
  3. 隔离性:每个容器环境独立,版本冲突问题基本消失。

参考

  • Docker 官方文档:https://docs.docker.com/
  • WSL 官方文档:https://learn.microsoft.com/zh-cn/windows/wsl/
  • Docker Hub:https://hub.docker.com/

本文为个人学习记录,环境为 Windows 11 + WSL 2 + Docker Desktop。如有错误欢迎指正。


需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询