一、环境准备与基础配置
1.1 Windows11 Docker Desktop安装
在Windows11上使用Docker需要先安装Docker Desktop。访问Docker官网下载最新版安装包,运行安装程序时需注意:
- 启用WSL2后端(推荐)或Hyper-V虚拟化
- 安装完成后启动Docker Desktop,等待服务初始化完成
- 右键任务栏Docker图标选择”Switch to Windows containers”可切换容器运行时(本文使用Linux容器模式)
1.2 验证安装环境
打开PowerShell终端,执行以下命令验证安装:
docker version# 预期输出应显示Client和Server版本信息docker run hello-world# 成功运行后会显示欢迎信息
1.3 私有仓库配置(以Harbor为例)
本文以自建Harbor仓库为例,需提前完成:
- 在服务器部署Harbor(版本建议≥2.0)
- 配置HTTPS访问(自签名证书需配置信任)
- 创建项目并获取管理员账号
- 记录仓库地址(如
https://registry.example.com)
二、镜像构建实战
2.1 基础镜像选择
根据应用类型选择合适的基础镜像:
# 示例1:.NET Core应用FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base# 示例2:Python应用FROM python:3.9-slim# 示例3:Node.js应用FROM node:16-alpine
2.2 Dockerfile编写规范
以Node.js应用为例的完整Dockerfile:
# 第一阶段:构建环境FROM node:16-alpine AS builderWORKDIR /appCOPY package*.json ./RUN npm install --productionCOPY . .RUN npm run build# 第二阶段:生产环境FROM node:16-alpineWORKDIR /appCOPY --from=builder /app/dist ./distCOPY --from=builder /app/node_modules ./node_modulesEXPOSE 3000CMD ["node", "dist/main.js"]
关键点说明:
- 使用多阶段构建减少最终镜像体积
- 明确指定工作目录(WORKDIR)
- 合理设置COPY指令的源路径和目标路径
- 暴露必要端口(EXPOSE)
- 指定容器启动命令(CMD/ENTRYPOINT)
2.3 镜像构建命令
在Dockerfile所在目录执行:
docker build -t myapp:v1.0 .# 参数说明:# -t 指定镜像名称和标签# . 表示使用当前目录的Dockerfile
构建过程会显示各层构建进度,完成后执行:
docker images# 查看本地镜像列表,确认myapp:v1.0已存在
三、镜像标记与仓库认证
3.1 镜像标记(Tag)
为镜像添加仓库前缀:
docker tag myapp:v1.0 registry.example.com/myproject/myapp:v1.0# 格式:docker tag 原镜像名 仓库地址/项目名/镜像名:标签
3.2 登录私有仓库
docker login registry.example.com# 输入用户名和密码# 成功后会显示"Login Succeeded"
对于自签名证书仓库,需先配置信任:
- 获取仓库CA证书(.crt文件)
- 将证书复制到
C:\ProgramData\docker\certs.d\registry.example.com目录 - 重启Docker服务
四、镜像推送与验证
4.1 推送镜像到仓库
docker push registry.example.com/myproject/myapp:v1.0# 推送过程会显示各层上传进度
常见问题处理:
- 认证失败:检查登录状态,或重新执行
docker login - 连接拒绝:确认仓库地址是否正确,网络是否通畅
- 证书错误:检查证书配置是否正确
4.2 仓库验证
登录Harbor管理界面,在对应项目下应能看到刚推送的镜像。或使用命令验证:
docker pull registry.example.com/myproject/myapp:v1.0# 成功拉取表示推送成功
五、高级实践技巧
5.1 构建优化策略
- 使用
.dockerignore文件排除不必要的文件 - 合理使用
--build-arg传递构建参数 - 多阶段构建中只复制必要文件到最终镜像
5.2 自动化构建流程
结合GitHub Actions实现CI/CD:
# 示例.github/workflows/docker.ymlname: Docker Build & Pushon: [push]jobs:build:runs-on: windows-lateststeps:- uses: actions/checkout@v2- name: Docker Loginuses: docker/login-action@v1with:registry: registry.example.comusername: ${{ secrets.DOCKER_USERNAME }}password: ${{ secrets.DOCKER_PASSWORD }}- name: Build and Pushrun: |docker build -t registry.example.com/myproject/myapp:${{ github.sha }} .docker push registry.example.com/myproject/myapp:${{ github.sha }}
5.3 镜像安全扫描
使用Docker内置扫描功能:
docker scan myapp:v1.0# 或针对仓库镜像docker scan registry.example.com/myproject/myapp:v1.0
六、常见问题解决方案
6.1 Windows容器与Linux容器切换
在Docker Desktop设置中可切换运行时模式,但需注意:
- Linux容器模式无法直接运行Windows镜像
- Windows容器模式需要启用Hyper-V
- 切换后需重启Docker服务
6.2 端口冲突处理
当本地端口被占用时:
# 运行容器时指定不同端口docker run -p 3001:3000 myapp:v1.0# 或停止占用端口的进程Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process
6.3 镜像层缓存失效
构建时添加--no-cache参数强制重新构建:
docker build --no-cache -t myapp:v1.0 .
七、最佳实践建议
- 镜像命名规范:采用
<仓库>/<项目>/<应用>:<版本>格式 - 版本控制:使用语义化版本号(如v1.0.0)
- 最小化镜像:选择基础镜像时优先考虑alpine等精简版本
- 安全实践:定期扫描镜像漏洞,避免使用root用户运行
- 文档维护:为每个镜像维护详细的README文档
通过以上步骤,开发者可以在Windows11环境下高效完成Docker镜像的构建、标记、推送全流程。建议结合实际项目需求,逐步完善CI/CD流水线,实现镜像构建的自动化与标准化。