把本地镜像搬进华为云SWR:登录、打标签、推送到拉取运行的完整实操
为什么需要镜像仓库
在本地用 Docker 构建好的镜像,默认只能在本机运行。要把应用部署到云上的多台弹性云服务器,或者让团队成员共享同一份运行环境,就需要一个集中存放镜像的地方。华为云的软件仓库镜像服务 SWR(Software Repository for Container)就是一个兼容标准 Docker 接口的容器镜像仓库,支持镜像的推送、拉取、版本管理和权限控制。本文用一套完整的命令,演示从本地构建镜像到云端拉取运行的全过程。
一、前置准备:创建组织并获取登录指令
SWR 的镜像路径由「区域仓库地址 + 组织名称 + 镜像名称 + 版本号」组成,所以第一步要先有一个组织。登录华为云控制台,进入「容器镜像服务 SWR」,在左侧选择「组织管理」,创建一个全局唯一的组织名称,例如 myteam-demo。
接着在「我的镜像」页面点击「登录指令」,控制台会生成一条带临时登录凭证的 docker login 命令,形态类似:
docker login -u cn-north-4@AKXXXX swr.cn-north-4.myhuaweicloud.com
执行后按提示输入密码即可。这里的仓库地址 swr.cn-north-4.myhuaweicloud.com 要和你的云服务器所在区域保持一致,跨区拉取会走公网且产生额外时延。
二、本地准备一个可运行镜像
为了让演示可复现,我们用一个最简单的 Dockerfile 构建一个 Nginx 镜像。新建一个目录,写入 Dockerfile:
FROM nginx:1.27-alpine
RUN echo "hello SWR" > /usr/share/nginx/html/index.html
EXPOSE 80
在该目录下执行构建,注意末尾的点表示构建上下文是当前目录:
docker build -t swr-demo:v1 .
构建完成后用 docker images 能看到 swr-demo 标签为 v1 的镜像,本地可以先用 docker run -d -p 8080:80 swr-demo:v1 验证页面能正常返回。
三、给镜像打上 SWR 规范标签
Docker 推送镜像时,是根据镜像名里的仓库地址来决定推到哪里的,本地这个简短的 swr-demo:v1 无法直接推送,需要用 docker tag 重新打一个完整路径的标签:
docker tag swr-demo:v1 swr.cn-north-4.myhuaweicloud.com/myteam-demo/swr-demo:v1
这一步不会复制镜像,只是给同一个镜像层增加了一个新名字。标签必须严格按「仓库地址/组织/镜像名:版本」的顺序书写,组织名拼错会在推送时被拒绝。
四、推送镜像到 SWR
确认已经执行过 docker login 后,直接 push 这个完整标签:
docker push swr.cn-north-4.myhuaweicloud.com/myteam-demo/swr-demo:v1
推送过程会分层上传,已经存在于仓库的基础层会显示 Layer already exists,只有自定义层需要实际上传。回到 SWR 控制台「我的镜像」,就能看到 myteam-demo/swr-demo 下出现了 v1 版本。
五、在云服务器上拉取并运行
在同一区域的弹性云服务器上,先安装 Docker,再执行同样的登录指令,然后拉取镜像。如果云服务器已经配置了 SWR 的临时授权或 IAM 代理,也可以免登录直接拉取:
docker pull swr.cn-north-4.myhuaweicloud.com/myteam-demo/swr-demo:v1
docker run -d --name swr-demo -p 80:80 swr.cn-north-4.myhuaweicloud.com/myteam-demo/swr-demo:v1
容器启动后用 curl http://localhost 即可看到之前写入的 "hello SWR",说明本地构建的镜像已经通过 SWR 完整地搬到了云端。
六、常见报错排查
- denied: you do not have permission:多半是没登录、登录态过期,或标签里的组织名与实际不符,重新执行登录指令并核对组织名。
- pull 超时:检查云服务器与仓库是否在同一区域,以及安全组、VPC 终端节点配置;跨区拉取建议改用对应区域的仓库地址。
- tag 推送成功但控制台看不到:确认当前查看的区域和实例正确,镜像按区域隔离。
小结
整条链路可以概括为:本地 build → docker tag 补全仓库路径 → docker login 鉴权 → docker push 上传 → 云端 docker pull 并 run。SWR 兼容标准 Docker 命令,只要把镜像标签的路径规则理解清楚,镜像在本地与云端之间的搬运就和操作本地镜像几乎没有区别。后续还可以结合命名空间权限、镜像扫描和触发器,把它接入 CI/CD 流水线实现自动构建与发布。
- 点赞
- 收藏
- 关注作者
评论(0)