Windows 安装 Docker 和 Docker Compose 完整教程

目录

  1. 环境要求
  2. 安装前准备
  3. [安装 Docker Desktop](#安装 Docker Desktop)
  4. [配置 Docker](#配置 Docker)
  5. 验证安装
  6. [Docker Compose 使用](#Docker Compose 使用)
  7. 常见问题解决
  8. 实战示例

环境要求

系统要求

要求项 Windows 10/11 专业版/企业版 Windows 10/11 家庭版
系统版本 Build 19041 或更高 Build 19041 或更高
虚拟化技术 Hyper-V 或 WSL 2 WSL 2(必须)
内存 至少 4GB RAM 至少 4GB RAM
CPU 支持 SLAT 的 64 位处理器 支持 SLAT 的 64 位处理器

检查系统版本

Win + R,输入 winver 查看系统版本:

复制代码
操作系统版本需要:Windows 10 版本 2004 (Build 19041) 或更高

安装前准备

1. 启用 CPU 虚拟化

前提:检查 CPU 是否支持

在 Windows 搜索栏输入 msinfo32 打开系统信息,查看 "Hyper-V" 状态,如果支持但未启用,需要进入 BIOS。

更直接的检查是看任务管理器的性能 -> CPU 选项,看"虚拟化"是否显示已启用。

首先需要在 BIOS 中启用虚拟化技术:

  1. 重启电脑,进入 BIOS(通常按 F2F10DelEsc
  2. 找到虚拟化设置(不同主板位置不同):
    • Intel CPU:启用 Intel Virtualization Technology (VT-x)
    • AMD CPU:启用 SVM Mode
  3. 保存并退出

验证虚拟化是否启用:

打开任务管理器 → 性能 → CPU,查看"虚拟化"状态:

2. 安装 WSL 2(推荐)

以管理员身份打开 PowerShell,执行以下命令:

powershell 复制代码
# 一键安装 WSL(Windows 11 或更新的 Windows 10)
wsl --install

# 或者分步安装(旧版 Windows 10)
# 步骤1:启用 WSL 功能
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

# 步骤2:启用虚拟机平台
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

# 步骤3:重启电脑
Restart-Computer

重启后,继续执行:

powershell 复制代码
# 下载并安装 WSL 2 Linux 内核更新包
# 访问:https://aka.ms/wsl2kernel 下载安装

# 设置 WSL 2 为默认版本
wsl --set-default-version 2

# 安装 Linux 发行版(可选,推荐 Ubuntu)
wsl --install -d Ubuntu

3. 启用 Hyper-V(可选,仅专业版/企业版)

powershell 复制代码
# 以管理员身份运行 PowerShell
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

# 或者通过控制面板
# 控制面板 → 程序 → 启用或关闭 Windows 功能 → 勾选 Hyper-V

安装 Docker Desktop

1. 下载 Docker Desktop

访问 Docker 官方网站下载:

复制代码
官方下载地址:https://www.docker.com/products/docker-desktop/
直接下载链接:https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe

2. 安装步骤

双击运行安装程序:

复制代码
1. 运行 "Docker Desktop Installer.exe"

2. 在配置页面,确保勾选以下选项:
   ✅ Use WSL 2 instead of Hyper-V (recommended)
   ✅ Add shortcut to desktop
   
3. 点击 "OK" 开始安装

4. 安装完成后点击 "Close and restart" 重启电脑

3. 首次启动配置

重启后,Docker Desktop 会自动启动:

复制代码
1. 等待 Docker Desktop 启动完成(系统托盘图标变为稳定状态)

2. 首次运行会显示服务条款,点击 "Accept" 接受

3. 选择使用方式:
   - 个人/教育用途:选择免费版
   - 商业用途:根据需要选择订阅计划

4. 可以选择跳过登录(Skip)或创建 Docker Hub 账号

配置 Docker

1. 基本设置

打开 Docker Desktop,点击右上角齿轮图标进入设置:

General(常规设置)
复制代码
✅ Start Docker Desktop when you log in(开机自启动)
✅ Send usage statistics(可选,发送使用统计)
Resources(资源配置)

WSL Integration(WSL 集成):

复制代码
✅ Enable integration with my default WSL distro
✅ Ubuntu(或你安装的其他发行版)

Advanced(高级设置)- 仅 Hyper-V 模式:

复制代码
CPUs: 2-4(根据你的 CPU 核心数调整)
Memory: 4-8 GB(根据你的内存大小调整)
Swap: 1-2 GB
Disk image size: 60 GB 或更大

2. Docker Engine 配置

点击 "Docker Engine",可以编辑 daemon.json 配置文件:

json 复制代码
{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ],
  "dns": ["8.8.8.8", "8.8.4.4"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

配置说明:

配置项 说明
registry-mirrors 镜像加速地址,提高国内下载速度
dns DNS 服务器配置
log-driver 日志驱动
log-opts 日志大小限制,防止日志文件过大

点击 "Apply & Restart" 应用配置。

3. 国内镜像加速源列表

json 复制代码
"registry-mirrors": [
  "https://docker.mirrors.ustc.edu.cn",
  "https://hub-mirror.c.163.com",
  "https://mirror.baidubce.com",
  "https://registry.docker-cn.com",
  "https://docker.nju.edu.cn"
]

验证安装

1. 检查 Docker 版本

打开 PowerShell 或命令提示符:

powershell 复制代码
# 查看 Docker 版本
docker --version
# 输出示例:Docker version 24.0.7, build afdd53b

# 查看详细版本信息
docker version

# 查看 Docker Compose 版本
docker compose version
# 输出示例:Docker Compose version v2.23.0-desktop.1

2. 运行测试容器

powershell 复制代码
# 运行 Hello World 测试
docker run hello-world

成功输出:

复制代码
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.
...

3. 更多验证命令

powershell 复制代码
# 查看 Docker 系统信息
docker info

# 查看运行中的容器
docker ps

# 查看所有容器(包括已停止的)
docker ps -a

# 查看本地镜像
docker images

# 运行一个 Nginx 容器测试
docker run -d -p 8080:80 --name test-nginx nginx

# 访问 http://localhost:8080 查看 Nginx 欢迎页面

# 停止并删除测试容器
docker stop test-nginx
docker rm test-nginx

Docker Compose 使用

关于 Docker Compose

Docker Desktop 已经内置了 Docker Compose,无需单独安装。

新旧版本命令对比:

旧版本 (V1) 新版本 (V2) 说明
docker-compose docker compose V2 是 Docker CLI 插件
docker-compose up docker compose up 功能相同
docker-compose down docker compose down 功能相同

注意:Docker Desktop 默认使用 V2 版本(docker compose),V1 版本(docker-compose)已逐渐弃用。

Docker Compose 基本命令

powershell 复制代码
# 查看版本
docker compose version

# 启动服务(后台运行)
docker compose up -d

# 启动服务(前台运行,查看日志)
docker compose up

# 停止服务
docker compose down

# 停止服务并删除数据卷
docker compose down -v

# 查看服务状态
docker compose ps

# 查看服务日志
docker compose logs

# 查看特定服务日志
docker compose logs [service_name]

# 实时查看日志
docker compose logs -f

# 重新构建服务
docker compose build

# 重新构建并启动
docker compose up -d --build

# 进入容器
docker compose exec [service_name] bash

常见问题解决

问题 1:WSL 2 安装失败

错误信息:

复制代码
WslRegisterDistribution failed with error: 0x80370102

解决方案:

powershell 复制代码
# 1. 确保启用了虚拟机平台
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

# 2. 下载并安装 WSL 2 内核更新包
# 访问:https://aka.ms/wsl2kernel

# 3. 重启电脑

# 4. 设置 WSL 2 为默认版本
wsl --set-default-version 2

问题 2:Docker Desktop 无法启动

错误信息:

复制代码
Docker Desktop - WSL distro terminated abruptly

解决方案:

powershell 复制代码
# 方法1:重置 WSL
wsl --shutdown
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data

# 重启 Docker Desktop

# 方法2:更新 WSL
wsl --update

# 方法3:重置 Docker Desktop
# Settings → Troubleshoot → Reset to factory defaults

问题 3:镜像拉取超时

错误信息:

复制代码
Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled

解决方案:

配置国内镜像加速(参考上文 Docker Engine 配置)

问题 4:端口被占用

错误信息:

复制代码
Bind for 0.0.0.0:80 failed: port is already allocated

解决方案:

powershell 复制代码
# 查看端口占用
netstat -ano | findstr :80

# 根据 PID 结束进程
taskkill /PID <PID> /F

# 或者更换端口
docker run -d -p 8080:80 nginx

问题 5:磁盘空间不足

解决方案:

powershell 复制代码
# 清理未使用的镜像、容器、网络
docker system prune

# 清理所有未使用的数据(包括未使用的镜像)
docker system prune -a

# 清理构建缓存
docker builder prune

# 查看 Docker 磁盘使用情况
docker system df

问题 6:Hyper-V 与 VirtualBox/VMware 冲突

解决方案:

powershell 复制代码
# 方法1:使用 WSL 2 后端(推荐)
# Docker Desktop Settings → General → Use the WSL 2 based engine

# 方法2:禁用 Hyper-V(如需使用 VirtualBox)
bcdedit /set hypervisorlaunchtype off
# 重启电脑

# 重新启用 Hyper-V
bcdedit /set hypervisorlaunchtype auto
# 重启电脑

实战示例

示例 1:运行 MySQL 数据库

创建 docker-compose.yml 文件:

yaml 复制代码
version: '3.8'

services:
  mysql:
    image: mysql:8.0
    container_name: my-mysql
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: myapp
      MYSQL_USER: myuser
      MYSQL_PASSWORD: mypassword
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro
    command: --default-authentication-plugin=mysql_native_password

volumes:
  mysql_data:

启动服务:

powershell 复制代码
docker compose up -d

示例 2:LNMP 环境(Linux + Nginx + MySQL + PHP)

创建项目目录结构:

复制代码
myproject/
├── docker-compose.yml
├── nginx/
│   └── default.conf
├── php/
│   └── Dockerfile
└── www/
    └── index.php

docker-compose.yml:

yaml 复制代码
version: '3.8'

services:
  nginx:
    image: nginx:alpine
    container_name: nginx
    restart: unless-stopped
    ports:
      - "80:80"
    volumes:
      - ./www:/var/www/html:ro
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
    depends_on:
      - php
    networks:
      - lnmp-network

  php:
    build: ./php
    container_name: php
    restart: unless-stopped
    volumes:
      - ./www:/var/www/html
    networks:
      - lnmp-network

  mysql:
    image: mysql:8.0
    container_name: mysql
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: myapp
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - lnmp-network

  phpmyadmin:
    image: phpmyadmin:latest
    container_name: phpmyadmin
    restart: unless-stopped
    environment:
      PMA_HOST: mysql
      PMA_PORT: 3306
    ports:
      - "8080:80"
    depends_on:
      - mysql
    networks:
      - lnmp-network

networks:
  lnmp-network:
    driver: bridge

volumes:
  mysql_data:

nginx/default.conf:

nginx 复制代码
server {
    listen 80;
    server_name localhost;
    root /var/www/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

php/Dockerfile:

dockerfile 复制代码
FROM php:8.2-fpm-alpine

# 安装常用扩展
RUN docker-php-ext-install pdo pdo_mysql mysqli

# 安装 Redis 扩展(可选)
RUN apk add --no-cache $PHPIZE_DEPS \
    && pecl install redis \
    && docker-php-ext-enable redis

WORKDIR /var/www/html

www/index.php:

php 复制代码
<?php
phpinfo();

启动服务:

powershell 复制代码
cd myproject
docker compose up -d --build

访问:

示例 3:WordPress 博客

yaml 复制代码
version: '3.8'

services:
  wordpress:
    image: wordpress:latest
    container_name: wordpress
    restart: unless-stopped
    ports:
      - "8000:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wordpress_data:/var/www/html
    depends_on:
      - db

  db:
    image: mysql:8.0
    container_name: wordpress-db
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
      MYSQL_ROOT_PASSWORD: rootpassword
    volumes:
      - db_data:/var/lib/mysql

volumes:
  wordpress_data:
  db_data:

启动:

powershell 复制代码
docker compose up -d
# 访问 http://localhost:8000

常用 Docker 命令速查表

镜像管理

powershell 复制代码
docker images                    # 列出镜像
docker pull [image]              # 拉取镜像
docker rmi [image]               # 删除镜像
docker build -t [name] .         # 构建镜像
docker tag [image] [new_name]    # 标记镜像
docker push [image]              # 推送镜像

容器管理

powershell 复制代码
docker ps                        # 查看运行中的容器
docker ps -a                     # 查看所有容器
docker run [options] [image]     # 创建并运行容器
docker start [container]         # 启动容器
docker stop [container]          # 停止容器
docker restart [container]       # 重启容器
docker rm [container]            # 删除容器
docker logs [container]          # 查看日志
docker exec -it [container] sh   # 进入容器

系统管理

powershell 复制代码
docker system df                 # 查看磁盘使用
docker system prune              # 清理系统
docker network ls                # 列出网络
docker volume ls                 # 列出数据卷

总结

通过本教程,你已经完成了:

  1. ✅ 了解 Windows 上运行 Docker 的系统要求
  2. ✅ 安装并配置了 WSL 2
  3. ✅ 安装了 Docker Desktop
  4. ✅ 配置了国内镜像加速
  5. ✅ 学会了 Docker 和 Docker Compose 的基本使用
  6. ✅ 掌握了常见问题的解决方法
  7. ✅ 实践了多个实战项目

后续学习建议:

  • 学习 Dockerfile 编写
  • 了解 Docker 网络和数据卷
  • 学习 Docker Swarm 或 Kubernetes 容器编排
  • 探索 CI/CD 中的 Docker 应用

有用的资源:

相关推荐
猫头虎2 小时前
GoLand 2025.3 最新变化:值得更新吗?
ide·windows·macos·pycharm·编辑器·intellij-idea·idea
Filotimo_3 小时前
Spring Data JPA 方法名查询特性的使用
java·开发语言·windows
啊哈哈哈哈啊有3 小时前
导出树形结构,excel
java·windows·excel
云霄IT3 小时前
docker使用教程之部署第一个go项目
docker·容器·golang
故事写到这3 小时前
第一章 Ubuntu24.04环境下的K8S部署【入门保姆级】
云原生·容器·kubernetes
探索云原生3 小时前
Buildah 简明教程:让镜像构建更轻量,告别 Docker 依赖
linux·docker·云原生·go·cicd
charlie1145141913 小时前
如何把 Win32 窗口“置顶”(Windows + C++)
开发语言·c++·windows·笔记·学习·软件工程
走路带_风4 小时前
Ubuntu server 22.04 安装kubernetes
云原生·容器·kubernetes
UtopianCoding4 小时前
什么是NoteDiscovery?Obsidian 的开源平替?
python·docker·开源