这个细说起来太长了。如果楼主想关注实际环境的话,可以试下搜索这两个关键字 “ 云 CI/CD ” 或者 “ k8s devops ”。
回到这个问题。
1. 生产环境的用法,如 1 楼所说,都是用的自建的 registry 。如果在大厂或者使用公有云的话,会有开箱即用的 registry 可以用。比如腾讯云的 registry:
https://cloud.tencent.com/product/tcr 。注意这里的 push 到镜像仓库,一般不是本地做的,是在 CI 流程中里做的。也就是代码推送到远程仓库里。自动触发一个镜像构建,构建完成之后推送到仓库里。
2. 镜像可以当作一个文件直接传送到服务器去,为什么要中转?事实上也是可以的。但是不是云时代的做法。比如一些老的 CD (部署)组件,就是 build 成一个部署包,然后通过 SCP 的方法传到目标服务器上去。但是云时代大家往往不这么做。**目前我们的生产环境应该主要都是基于 K8s 生态**,在 k8s 的理念里,最小的计算单元是 Pod ,已经没有服务器的概念了。
1 楼说的 registry 更新通知 mq ,我的通用做法是 CI/CD 流程中去调用 k8s 做 Pod 的升级。
关于几百兆的镜像的话,其实在云时代,内网都是 Gbps 的互联速度,对文件的传输没有那么敏感。但还是有优化。
比如容器本身的分层方法,每次或许只要拉增量就可以了。
以及我了解到的还有基于 p2p 拉取的方式 ,比如腾讯云的这个
https://www.tencentcloud.com/zh/document/product/457/38708 。