# Docker 构建与发布指南

本指南说明如何将项目打包成 Docker 镜像并推送到镜像仓库。

## 先决条件
- Docker Desktop / Docker Engine
- 能访问镜像仓库的网络
- 镜像仓库登录凭据

## 需要的文件
构建与发布需要以下文件：
- `ems-backend/Dockerfile`
- `ems-frontend/Dockerfile`
- `ems-frontend/nginx.conf`
- `docker-compose.yml`（本地测试可选）
- `.env`（**不要**发布，保留在本地）

## 1) 本地构建镜像
在项目根目录执行：
```bash
docker build -t <REGISTRY>/<NAME>/ems-backend:latest ./ems-backend
docker build -t <REGISTRY>/<NAME>/ems-frontend:latest --build-arg VITE_API_BASE_URL=/api ./ems-frontend
```

示例：
- Docker Hub：
```bash
docker build -t <dockerhub_user>/ems-backend:latest ./ems-backend
docker build -t <dockerhub_user>/ems-frontend:latest --build-arg VITE_API_BASE_URL=/api ./ems-frontend
```
- 私有仓库：
```bash
docker build -t docker.aizhangz.top/ems-backend:latest ./ems-backend
docker build -t docker.aizhangz.top/ems-frontend:latest --build-arg VITE_API_BASE_URL=/api ./ems-frontend
```

## 2) 登录镜像仓库
```bash
docker login <REGISTRY>
```

示例：
```bash
docker login docker.aizhangz.top
```

## 3) 推送镜像
```bash
docker push <REGISTRY>/<NAME>/ems-backend:latest
docker push <REGISTRY>/<NAME>/ems-frontend:latest
```

示例（私有仓库）：
```bash
docker push docker.aizhangz.top/ems-backend:latest
docker push docker.aizhangz.top/ems-frontend:latest
```

## 4) 验证
拉取一次确认：
```bash
docker pull <REGISTRY>/<NAME>/ems-backend:latest
docker pull <REGISTRY>/<NAME>/ems-frontend:latest
```

## 注意事项
- 不要提交包含密钥的 `.env`。
- 如果使用公共仓库，请移除镜像中的敏感配置。
- 需要用镜像本地运行时，使用  `docker-compose.private.yml`。
