You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
2.6 KiB
170 lines
2.6 KiB
|
2 months ago
|
# Docker 发布指南
|
||
|
|
|
||
|
|
本文档说明如何将 MarketingSite 项目打包为 Docker 镜像并部署。
|
||
|
|
|
||
|
|
## 前置要求
|
||
|
|
|
||
|
|
- Docker 已安装并运行
|
||
|
|
- 项目依赖已安装(`yarn install`)
|
||
|
|
|
||
|
|
## 构建 Docker 镜像
|
||
|
|
|
||
|
|
### 方法1: 使用 Docker 命令
|
||
|
|
|
||
|
|
在 `site` 目录下执行:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd site
|
||
|
|
docker build -t marketing-site:latest .
|
||
|
|
```
|
||
|
|
|
||
|
|
### 方法2: 使用 docker-compose
|
||
|
|
|
||
|
|
在 `site` 目录下执行:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd site
|
||
|
|
docker-compose build
|
||
|
|
```
|
||
|
|
|
||
|
|
## 运行容器
|
||
|
|
|
||
|
|
### 方法1: 使用 Docker 命令
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker run -d -p 3000:3000 --name marketing-site marketing-site:latest
|
||
|
|
```
|
||
|
|
|
||
|
|
### 方法2: 使用 docker-compose
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd site
|
||
|
|
docker-compose up -d
|
||
|
|
```
|
||
|
|
|
||
|
|
容器启动后,访问 http://localhost:3000
|
||
|
|
|
||
|
|
## 查看日志
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker logs -f marketing-site
|
||
|
|
```
|
||
|
|
|
||
|
|
或使用 docker-compose:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd site
|
||
|
|
docker-compose logs -f
|
||
|
|
```
|
||
|
|
|
||
|
|
## 停止和删除容器
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker stop marketing-site
|
||
|
|
docker rm marketing-site
|
||
|
|
```
|
||
|
|
|
||
|
|
或使用 docker-compose:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd site
|
||
|
|
docker-compose down
|
||
|
|
```
|
||
|
|
|
||
|
|
## 发布到 Docker Hub
|
||
|
|
|
||
|
|
### 1. 登录 Docker Hub
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker login
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. 标记镜像
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker tag marketing-site:latest your-username/marketing-site:latest
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. 推送到 Docker Hub
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker push your-username/marketing-site:latest
|
||
|
|
```
|
||
|
|
|
||
|
|
## 发布到私有仓库
|
||
|
|
|
||
|
|
### 标记镜像
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker tag marketing-site:latest registry.example.com/marketing-site:latest
|
||
|
|
```
|
||
|
|
|
||
|
|
### 推送镜像
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker push registry.example.com/marketing-site:latest
|
||
|
|
```
|
||
|
|
|
||
|
|
## 在其他服务器上运行
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker pull your-username/marketing-site:latest
|
||
|
|
docker run -d -p 3000:3000 --name marketing-site your-username/marketing-site:latest
|
||
|
|
```
|
||
|
|
|
||
|
|
## 环境变量配置
|
||
|
|
|
||
|
|
如需配置环境变量,可以通过以下方式:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker run -d -p 3000:3000 \
|
||
|
|
-e NODE_ENV=production \
|
||
|
|
-e NEXT_PUBLIC_API_URL=https://api.example.com \
|
||
|
|
--name marketing-site \
|
||
|
|
marketing-site:latest
|
||
|
|
```
|
||
|
|
|
||
|
|
或在 `docker-compose.yml` 中添加:
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
environment:
|
||
|
|
- NODE_ENV=production
|
||
|
|
- NEXT_PUBLIC_API_URL=https://api.example.com
|
||
|
|
```
|
||
|
|
|
||
|
|
## 健康检查
|
||
|
|
|
||
|
|
镜像已配置为监听 `0.0.0.0:3000`,可在容器启动后进行健康检查:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
curl http://localhost:3000
|
||
|
|
```
|
||
|
|
|
||
|
|
## 故障排查
|
||
|
|
|
||
|
|
### 查看容器状态
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker ps -a
|
||
|
|
```
|
||
|
|
|
||
|
|
### 查看容器日志
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker logs marketing-site
|
||
|
|
```
|
||
|
|
|
||
|
|
### 进入容器调试
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker exec -it marketing-site sh
|
||
|
|
```
|
||
|
|
|
||
|
|
## 注意事项
|
||
|
|
|
||
|
|
1. 确保端口 3000 未被占用
|
||
|
|
2. 生产环境建议使用反向代理(如 Nginx)处理 HTTPS
|
||
|
|
3. 如需修改端口,更新 `docker-compose.yml` 中的端口映射
|
||
|
|
4. 镜像基于 `node:20-alpine`,体积较小但功能完整
|
||
|
|
|