目录
安装与配置
基础概念
镜像管理
容器操作
网络管理
数据卷与持久化存储
Docker Compose
常用工作流
故障排查
安装与配置
1. 系统要求
Windows 10/11 64位(专业版/企业版/教育版)
启用 Hyper-V 和 WSL 2(推荐)
至少 4GB RAM
BIOS 中启用虚拟化
2. 安装步骤
# 1. 下载 Docker Desktop for Windows # 访问 https://www.docker.com/products/docker-desktop # 2. 安装后验证 docker --version docker-compose --version docker info3. 配置镜像加速器(中国用户)
# 编辑 Docker 配置文件(如果不存在则创建) notepad "$env:USERPROFILE\.docker\daemon.json" # 添加以下内容: { "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com" ] }基础概念
Docker 三大核心组件
镜像(Image):只读模板,包含运行环境
容器(Container):镜像的运行实例
仓库(Registry):存储镜像的服务器(默认 Docker Hub)
Windows 特殊注意事项
# Windows 与 Linux 容器模式切换 # 右键系统托盘 Docker 图标 → Switch to Windows Containers/Linux Containers # 路径格式差异 # Linux 路径:/app/data # Windows 路径:C:\app\data 或 /c/app/data(在 Docker 命令中)镜像管理
常用命令
# 搜索镜像 docker search nginx # 拉取镜像 docker pull nginx:latest docker pull microsoft/dotnet:6.0 # 查看本地镜像 docker images docker image ls docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}\t{{.Size}}" # 删除镜像 docker rmi nginx:latest docker image rm image_id docker image prune -a # 删除所有未使用的镜像 # 构建镜像 docker build -t myapp:1.0 . docker build -f Dockerfile.windows -t myapp:win . # 导出/导入镜像 docker save -o nginx.tar nginx:latest docker load -i nginx.tar # 查看镜像历史 docker history nginx:latest标签操作
# 为镜像打标签 docker tag nginx:latest myregistry.com/nginx:v1 # 推送镜像到仓库 docker login myregistry.com docker push myregistry.com/nginx:v1容器操作
基本操作
# 运行容器 docker run -d --name mynginx nginx docker run -it --rm ubuntu bash # 交互式运行,退出自动删除 # 查看容器 docker ps # 运行中的容器 docker ps -a # 所有容器 docker ps -q # 只显示容器ID # 启动/停止/重启容器 docker start mynginx docker stop mynginx docker restart mynginx docker pause mynginx docker unpause mynginx # 删除容器 docker rm mynginx docker container prune # 删除所有停止的容器 # 查看容器日志 docker logs mynginx docker logs -f mynginx # 实时查看 docker logs --tail 100 mynginx docker logs --since 1h mynginx容器交互
# 进入容器(推荐 exec) docker exec -it mynginx bash docker exec -it mynginx powershell # Windows 容器 docker exec mynginx ls /app # 复制文件 docker cp mynginx:/etc/nginx/nginx.conf ./ docker cp ./config.json mynginx:/app/config.json # 查看容器信息 docker inspect mynginx docker inspect --format='{{.NetworkSettings.IPAddress}}' mynginx docker stats mynginx # 资源使用情况 docker top mynginx # 容器内进程运行参数详解
# 常用参数组合示例 docker run -d \ --name webapp \ --hostname myapp \ -p 8080:80 \ -p 443:443 \ -v C:\data:/var/www/html \ -e APP_ENV=production \ --restart=unless-stopped \ --memory="512m" \ --cpus="1.5" \ nginx:alpine # 端口映射(Windows 防火墙需允许) -p 80:80 # 主机端口:容器端口 -p 127.0.0.1:8080:80 # 绑定到特定IP # 环境变量 -e KEY=VALUE --env-file .env # 资源限制 --memory="256m" --memory-swap="512m" --cpus="0.5" --cpu-shares=512网络管理
# 查看网络 docker network ls docker network inspect bridge # 创建网络 docker network create mynetwork docker network create --driver=bridge --subnet=172.20.0.0/16 mynet # 容器连接到网络 docker run -d --name app1 --network=mynetwork nginx docker network connect mynetwork existing_container docker network disconnect mynetwork container_name # 删除网络 docker network rm mynetwork docker network prune # 删除未使用的网络网络模式
# 不同网络模式 --network=bridge # 默认桥接 --network=host # 主机网络(Linux 容器) --network=none # 无网络 --network=container:nginx # 共享其他容器的网络数据卷与持久化存储
# 创建数据卷 docker volume create mysqldata docker volume ls # 使用数据卷 docker run -v mysqldata:/var/lib/mysql mysql # 绑定挂载(Windows 路径) docker run -v C:\docker\data:/app/data nginx docker run -v /c/docker/data:/app/data nginx # WSL2 格式 # 查看卷信息 docker volume inspect mysqldata # 删除数据卷 docker volume rm mysqldata docker volume prune # 删除未使用的卷 # 挂载临时文件系统 docker run --tmpfs /tmp:rw,size=64m nginxDocker Compose
基本使用
# 安装(Docker Desktop 已包含) docker-compose --version # 常用命令 docker-compose up -d # 启动服务 docker-compose down # 停止并删除 docker-compose ps # 查看状态 docker-compose logs -f # 查看日志 docker-compose exec app bash # 进入容器 docker-compose restart # 重启服务 docker-compose build # 重新构建docker-compose.yml 示例
version: '3.8' services: web: image: nginx:alpine ports: - "8080:80" volumes: - ./html:/usr/share/nginx/html networks: - appnet depends_on: - db db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: example MYSQL_DATABASE: myapp volumes: - mysql_data:/var/lib/mysql networks: - appnet volumes: mysql_data: networks: appnet: driver: bridge常用工作流
1. 开发环境搭建
# 运行开发数据库 docker run -d ` --name dev-db ` -p 3306:3306 ` -e MYSQL_ROOT_PASSWORD=devpass ` -v mysql_dev_data:/var/lib/mysql ` mysql:8.0 # 运行 Redis 缓存 docker run -d ` --name redis ` -p 6379:6379 ` redis:alpine # 运行本地注册表 docker run -d ` --name registry ` -p 5000:5000 ` -v registry_data:/var/lib/registry ` registry:22. 应用部署
# 1. 构建应用镜像 docker build -t myapp:1.0 . # 2. 运行应用 docker run -d ` --name myapp ` -p 80:80 ` --restart unless-stopped ` myapp:1.0 # 3. 更新应用(蓝绿部署) docker build -t myapp:2.0 . docker run -d --name myapp-v2 -p 8080:80 myapp:2.0 # 测试 v2 版本 docker stop myapp && docker rm myapp docker rename myapp-v2 myapp3. 数据备份与恢复
# 备份 MySQL 数据 docker exec mysql sh -c 'mysqldump -uroot -p$MYSQL_ROOT_PASSWORD --all-databases' > backup.sql # 备份容器数据卷 docker run --rm ` -v mysql_data:/volume ` -v C:\backups:/backup ` alpine tar cvf /backup/mysql_data.tar /volume # 恢复数据 docker exec -i mysql sh -c 'mysql -uroot -p$MYSQL_ROOT_PASSWORD' < backup.sql4. 多阶段构建示例
# Dockerfile FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build WORKDIR /src COPY . . RUN dotnet publish -c Release -o /app FROM mcr.microsoft.com/dotnet/aspnet:6.0 WORKDIR /app COPY --from=build /app . ENTRYPOINT ["dotnet", "MyApp.dll"]docker build -t myapp:prod .故障排查
常见问题解决
# 1. Docker 服务未启动 # 检查服务状态 Get-Service docker* # 重启服务 Restart-Service docker # 2. 端口冲突 netstat -ano | findstr :8080 # 停止占用进程或修改映射端口 # 3. 磁盘空间不足 docker system df # 查看磁盘使用 docker system prune -a # 清理所有未使用的对象 # 4. 容器启动失败 docker logs container_id # 查看日志 docker inspect container_id # 检查配置 # 5. 镜像拉取失败 # 检查网络连接 # 更换镜像源 # 登录 Docker Hub # 6. Windows 路径问题 # 使用绝对路径:C:\data 或 /c/data # 确保目录存在且权限正确调试命令
# 检查容器健康状态 docker events # 查看实时事件 # 容器内调试 docker exec -it container_name ping db docker exec -it container_name curl http://localhost # 资源监控 docker stats docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" # 查看底层信息 docker info docker version日志收集
# 导出所有日志 Get-EventLog -LogName Application -Source Docker | Select-Object TimeGenerated, EntryType, Message | Export-Csv -Path docker_logs.csv # 过滤错误日志 docker logs container_id 2>&1 | Select-String -Pattern "error|fail" -CaseSensitive附录:常用命令速查表
# 系统管理 docker version docker info docker system df docker system prune # 镜像管理 docker images docker pull docker build docker push docker rmi # 容器管理 docker run docker ps docker start/stop/restart docker exec docker logs docker rm # 网络管理 docker network ls docker network create docker network connect # 数据管理 docker volume create docker volume ls # Compose docker-compose up docker-compose down docker-compose logs # 批量操作 docker stop $(docker ps -q) docker rm $(docker ps -aq) docker rmi $(docker images -q)注意事项
权限问题:Windows 下 Docker 需要管理员权限运行某些操作
路径差异:Windows 与 Linux 路径格式不同,注意转换
防火墙:确保 Windows 防火墙允许 Docker 相关端口
数据持久化:重要数据务必使用卷或绑定挂载
资源限制:适当限制容器资源使用,避免影响宿主机
安全更新:定期更新 Docker 和镜像版本
生产环境:Windows Docker 主要用于开发测试,生产建议使用 Linux
本手册涵盖 Windows Docker 命令行常用操作,建议结合官方文档使用:
Docker Windows 文档
Docker 命令行参考