一、环境准备与Docker安装
1.1 启用Windows 11虚拟化功能
Docker Desktop依赖WSL 2或Hyper-V运行,需确保系统已启用虚拟化:
- BIOS设置:重启电脑进入BIOS(不同厂商按键不同,如F2/Del),找到”Intel VT-x”或”AMD-V”选项并启用。
- Windows功能:通过”控制面板 > 程序 > 启用或关闭Windows功能”,勾选”虚拟机平台”和”Windows子系统用于Linux”(WSL 2)。
1.2 安装Docker Desktop
- 访问Docker官网下载Windows版安装包。
- 双击安装程序,按向导完成安装(需勾选”Use WSL 2 instead of Hyper-V”以获得更好性能)。
- 启动Docker Desktop,首次运行需配置资源限制(建议分配4GB内存和2核CPU)。
1.3 验证安装
打开PowerShell或CMD,输入以下命令检查Docker状态:
docker version
若显示客户端和服务端版本信息,则安装成功。
二、构建Docker镜像
2.1 创建Dockerfile文件
在项目目录下新建Dockerfile(无后缀),示例内容如下(以Node.js应用为例):
# 基础镜像FROM node:18-alpine# 创建工作目录WORKDIR /app# 复制依赖文件并安装COPY package*.json ./RUN npm install# 复制应用代码COPY . .# 暴露端口EXPOSE 3000# 启动命令CMD ["npm", "start"]
关键点:
FROM指定基础镜像,优先选择轻量级镜像(如alpine)。WORKDIR定义容器内的工作目录。COPY指令需分两步执行,避免重复安装依赖。
2.2 构建镜像
在Dockerfile所在目录执行:
docker build -t my-node-app:v1 .
-t参数指定镜像名称和标签(<名称>:<标签>)。.表示使用当前目录的Dockerfile。
常见问题:
- 权限错误:确保以管理员身份运行终端。
- 网络超时:更换国内镜像源(修改Docker Desktop的
Settings > Docker Engine,添加"registry-mirrors": ["https://registry.docker-cn.com"])。
三、搭建个人镜像仓库
3.1 使用Docker Registry
官方提供的轻量级私有仓库,启动命令:
docker run -d -p 5000:5000 --restart=always --name registry registry:2
-p 5000:5000将容器端口映射到主机。--restart=always确保容器崩溃后自动重启。
3.2 配置HTTPS(可选但推荐)
自签名证书配置步骤:
- 生成证书:
mkdir -p certsopenssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt -subj "/CN=myregistry.example.com"
- 启动带证书的Registry:
docker run -d -p 5000:5000 --restart=always --name registry \-v "$(pwd)"/certs:/certs \-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \registry:2
3.3 验证仓库
访问http://localhost:5000/v2/_catalog,应返回{}表示仓库已就绪。
四、上传镜像至私有仓库
4.1 标记镜像
将本地镜像标记为私有仓库格式:
docker tag my-node-app:v1 localhost:5000/my-node-app:v1
若仓库有域名(如myregistry.example.com),替换localhost:5000即可。
4.2 推送镜像
docker push localhost:5000/my-node-app:v1
注意事项:
- 确保Docker Desktop信任该仓库(若使用HTTPS自签名证书,需在
Settings > Docker Engine中添加"insecure-registries": ["myregistry.example.com"])。 - 推送大镜像时,可通过
--compress参数启用压缩。
4.3 验证上传结果
访问http://localhost:5000/v2/my-node-app/tags/list,应返回包含v1的标签列表。
五、高级技巧与优化
5.1 多阶段构建
减少镜像体积的示例Dockerfile:
# 构建阶段FROM node:18-alpine AS builderWORKDIR /appCOPY . .RUN npm install && npm run build# 运行阶段FROM nginx:alpineCOPY --from=builder /app/dist /usr/share/nginx/htmlEXPOSE 80CMD ["nginx", "-g", "daemon off;"]
5.2 使用.dockerignore文件
排除不必要的文件(如node_modules、日志文件):
.gitnode_modules*.log
5.3 自动化构建(CI/CD集成)
在GitHub Actions中示例配置:
name: Docker Build & Pushon: [push]jobs:build:runs-on: windows-lateststeps:- uses: actions/checkout@v2- name: Build Docker Imagerun: docker build -t my-node-app:${{ github.sha }} .- name: Push to Private Registryrun: |docker tag my-node-app:${{ github.sha }} myregistry.example.com/my-node-app:${{ github.sha }}docker push myregistry.example.com/my-node-app:${{ github.sha }}
六、常见问题解决方案
-
推送失败(401 Unauthorized):
- 检查Registry是否配置认证(若启用
REGISTRY_AUTH环境变量,需先登录:docker login localhost:5000)。
- 检查Registry是否配置认证(若启用
-
镜像层已存在但未复用:
- 确保基础镜像版本一致,使用
docker history检查镜像层。
- 确保基础镜像版本一致,使用
-
Windows路径问题:
- 在PowerShell中使用
$PWD代替.,如:docker build -t my-app $PWD。
- 在PowerShell中使用
七、总结与扩展
通过本文,您已掌握在Windows 11下:
- 安装并配置Docker Desktop。
- 编写Dockerfile构建应用镜像。
- 搭建私有Registry仓库(支持HTTP/HTTPS)。
- 推送和拉取镜像的完整流程。
下一步建议:
- 探索Kubernetes集成(通过
kind或minikube在本地测试)。 - 学习镜像扫描工具(如Trivy)保障安全性。
- 研究镜像签名机制(如Cosign)实现不可变部署。
附:完整命令速查表
| 操作 | 命令 |
|———|———|
| 启动Registry | docker run -d -p 5000:5000 registry:2 |
| 构建镜像 | docker build -t my-app . |
| 标记镜像 | docker tag my-app localhost:5000/my-app |
| 推送镜像 | docker push localhost:5000/my-app |
| 拉取镜像 | docker pull localhost:5000/my-app |