ad97fd3da5
- .gitignore 新增忽略 .idea/、videos/、*.tar.gz、*.csproj.user、db 运行时文件 - 根目录 15 个中文运维 md 归档到 docs/ - 删除无部署脚本引用的 Dockerfile 与 Dockerfile-arm(保留 Dockerfile.prod) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
7.5 KiB
7.5 KiB
镜像构建和推送指南
本文档说明如何构建 Docker 镜像并推送到阿里云容器镜像服务,以便在飞牛 NAS 上使用。
📋 目录
🔧 前提条件
1. 阿里云容器镜像服务账号
2. 获取登录凭证
- 登录阿里云容器镜像服务控制台
- 进入「访问凭证」
- 设置固定密码或临时密码
- 记录用户名和密码
✅ 方式一:使用现有镜像(最简单)
如果镜像仓库中已经有镜像,直接拉取即可,无需上传!
检查镜像是否存在
- 访问:
https://cr.console.aliyun.com/ - 进入你的命名空间
- 查看是否有
dysync.net仓库 - 查看是否有
latest标签的镜像
如果镜像存在
直接在飞牛 NAS 上拉取:
docker pull registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net:latest
无需任何上传操作!
🏗️ 方式二:构建并推送镜像
如果你修改了代码,或者镜像不存在,需要自己构建并推送。
步骤 1:在本地构建镜像
1.1 准备构建环境
确保本地已安装:
- Docker Desktop(Mac/Windows)或 Docker Engine(Linux)
- .NET SDK 6.0(可选,如果使用 Dockerfile.prod)
- Node.js 18+(可选,如果使用 Dockerfile.prod)
1.2 构建镜像
使用多阶段构建(推荐):
# 在项目根目录
docker build -f Dockerfile.prod -t dysync.net:latest .
或使用原始 Dockerfile(需要先构建前端):
# 1. 先构建前端
cd app
pnpm install
pnpm build
cd ..
# 2. 构建镜像
docker build -t dysync.net:latest .
1.3 验证镜像
# 查看镜像
docker images | grep dysync
# 测试运行(可选)
docker run -d -p 10101:10101 --name dysync-test dysync.net:latest
步骤 2:登录阿里云镜像仓库
# 登录(替换为你的实际信息)
docker login --username=你的用户名 registry.cn-hangzhou.aliyuncs.com
# 输入密码(在阿里云控制台获取)
获取登录信息:
- 登录阿里云容器镜像服务控制台
- 点击右上角「访问凭证」
- 设置固定密码或使用临时密码
步骤 3:标记镜像
# 标记镜像(替换为你的实际仓库地址)
docker tag dysync.net:latest registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net:latest
# 如果构建了 ARM 版本
docker tag dysync.net:arm-latest registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net:arm_1.0
步骤 4:推送镜像
# 推送 AMD64 版本
docker push registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net:latest
# 推送 ARM 版本(如果构建了)
docker push registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net:arm_1.0
步骤 5:在飞牛 NAS 上拉取
推送成功后,在飞牛 NAS 上拉取:
docker pull registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net:latest
💻 方式三:本地构建直接使用
如果你不想推送到远程仓库,可以在飞牛 NAS 上直接构建。
步骤 1:上传项目文件
- 将整个项目文件夹上传到飞牛 NAS
- 建议放在:
/volume1/dysync/source/
步骤 2:SSH 连接到飞牛 NAS
ssh admin@你的飞牛NAS IP
步骤 3:构建镜像
# 进入项目目录
cd /volume1/dysync/source
# 构建镜像(使用多阶段构建)
docker build -f Dockerfile.prod -t dysync.net:latest .
# 或使用原始 Dockerfile(需要先构建前端)
cd app
pnpm install # 或 npm install
pnpm build # 或 npm run build
cd ..
docker build -t dysync.net:latest .
步骤 4:使用本地镜像
修改 docker-compose.yml:
services:
dysync:
image: dysync.net:latest # 使用本地镜像
# ... 其他配置
或直接在 Docker 界面中选择本地镜像。
🔄 完整流程示例
场景:首次部署,镜像不存在
# 1. 在本地电脑构建镜像
cd /path/to/dysync.net
docker build -f Dockerfile.prod -t dysync.net:latest .
# 2. 登录阿里云
docker login registry.cn-hangzhou.aliyuncs.com
# 3. 标记镜像
docker tag dysync.net:latest registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net:latest
# 4. 推送镜像
docker push registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net:latest
# 5. 在飞牛 NAS 上拉取
ssh admin@飞牛NAS IP
docker pull registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net:latest
# 6. 使用 docker-compose 部署
cd /volume1/dysync
docker-compose up -d
场景:使用现有镜像(最简单)
# 直接在飞牛 NAS 上拉取
docker pull registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net:latest
# 使用 docker-compose 部署
cd /volume1/dysync
docker-compose up -d
🐛 常见问题
1. 镜像拉取失败
问题:镜像不存在
Error response from daemon: pull access denied
解决方案:
- 检查镜像地址是否正确
- 确认镜像是否已推送到仓库
- 如果镜像不存在,需要先构建并推送(方式二)
问题:认证失败
Error response from daemon: unauthorized
解决方案:
# 重新登录
docker logout registry.cn-hangzhou.aliyuncs.com
docker login registry.cn-hangzhou.aliyuncs.com
2. 镜像推送失败
问题:权限不足
denied: requested access to the resource is denied
解决方案:
- 检查命名空间和仓库名称是否正确
- 确认账号有推送权限
- 检查是否已正确登录
问题:网络超时
net/http: TLS handshake timeout
解决方案:
- 检查网络连接
- 使用镜像加速器
- 重试推送
3. 构建失败
问题:前端构建失败
# 清除缓存重新构建
cd app
rm -rf node_modules dist
pnpm install
pnpm build
问题:后端构建失败
# 清除构建缓存
dotnet clean
dotnet restore
📝 快速参考
检查镜像是否存在
# 查看本地镜像
docker images | grep dysync
# 尝试拉取(如果失败说明不存在)
docker pull registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net:latest
完整构建和推送命令
# 一键构建和推送脚本
#!/bin/bash
IMAGE_NAME="dysync.net:latest"
REGISTRY="registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net:latest"
# 构建
docker build -f Dockerfile.prod -t $IMAGE_NAME .
# 登录(需要手动输入密码)
docker login registry.cn-hangzhou.aliyuncs.com
# 标记
docker tag $IMAGE_NAME $REGISTRY
# 推送
docker push $REGISTRY
echo "镜像推送完成: $REGISTRY"
💡 推荐方案
方案 A:使用现有镜像(推荐新手)
- ✅ 最简单,无需构建
- ✅ 直接拉取即可使用
- ❌ 无法自定义代码
方案 B:构建并推送(推荐开发者)
- ✅ 可以自定义代码
- ✅ 一次推送,多处使用
- ❌ 需要构建和推送步骤
方案 C:本地构建(推荐私有部署)
- ✅ 完全私有,不依赖外部服务
- ✅ 适合内网环境
- ❌ 需要在每台设备上构建
最后更新:2024-11-22
版本:v1.0