使用 docker 可以不用镜像仓库吗?

2022-07-28 09:48:59 +08:00
 levon
生产环境中应该很少人会把镜像 push 到官方的 hub 中去吧。
即使私有的镜像仓库感觉也挺麻烦,先要把镜像 push 到镜像仓库,然后生产服务器又要去 pull 下来。
我在想更简单的方法不是应该把镜像当作一个文件直接传送到服务器去吗,为什么还要一个镜像仓库来中转呢。

疑惑中,实际应用中是怎么使用的,有人能帮忙指导吗
2478 次点击
所在节点    Docker
20 条回复
dzdh
2022-07-28 09:51:28 +08:00
生产环境 自建 registry ( https://hub.docker.com/_/registry)

registry 更新通知到 mq ,所有机器或者集群平滑更新新镜像。还能随时回滚。

为啥要同步一个大几百兆的文件。。
levon
2022-07-28 09:58:06 +08:00
@dzdh 感谢回复

用镜像仓库,不是等于要在两个地方(镜像仓库和生产服务器)同步大几百兆的文件吗,是我哪里理解不对?

用镜像仓库我理解的好处可能是更好的版本的管理
freevioce
2022-07-28 10:03:54 +08:00
当作一个文件直接传送到服务器,特别简单的场景当然可以。
- 1. 节省空间,涉及到多版本镜像,存储使用仓库会多层 layer 复用,达到节省空间;
- 2. 大量传输高效,需要集群大量更新镜像,仓库更高效
- 3. 集中管理方便
- 4.有仓库集成 webhook,做更复杂的操作(比如 habor )
chenluo0429
2022-07-28 10:16:04 +08:00
docker save
docker load
但是你需要自行管理导出的镜像文件,还不能像 pull 一样忽略已经拉取过的层
有个 registry 给你处理好这些事不好吗?
VeryZero
2022-07-28 10:17:57 +08:00
因为用仓库快啊,全自动操作。

否则你打算手动传文件到上百台服务器上?

要是写脚本传,那用仓库有啥区别?
snowlyg
2022-07-28 10:20:40 +08:00
那是因为你的服务集群还不够,机器,机房也不多。就像不出远门的人平常走走路就行了,就会怀疑为什么有些人还要买汽车,坐飞机。
fiht
2022-07-28 10:25:40 +08:00
这个细说起来太长了。如果楼主想关注实际环境的话,可以试下搜索这两个关键字 “ 云 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
dzdh
2022-07-28 10:31:07 +08:00
@levon
管理和运维成本鸭 你要就一台服务器那自己折腾玩嘛。

上百台服务器上千个服务镜像 跨机房 你再试试咧。

就跟没有人一开始就上小型机一样的嘛。
stille
2022-07-28 14:39:49 +08:00
其实吧,就楼主的问题描述,感觉就没怎么用过 docker,或者说不太了解容器化.
levon
2022-07-28 15:35:47 +08:00
我大概明白了,多谢大家的回复。
levon
2022-07-28 15:37:48 +08:00
@fiht 回答很详细,学习了,谢谢。
levon
2022-07-28 15:39:08 +08:00
@stille 确实没在生产环境中用过,我们项目比较小,只是想说对小项目来说,使用 docker 能带来哪些便捷。
dzdh
2022-07-28 16:06:11 +08:00
@levon 就是环境统一,降低运维成本,CI/CD 也好做了。PHP 类的项目还好,有个 git 钩子就自动上线了。java/go 之类的,你不要编译嘛,你编译环境呢,容器化就全给你搞定了。生产和开发环境共享一个基础镜像,多人开发环境和各种依赖包也统一的。多爽。
levon
2022-07-28 16:28:29 +08:00
@dzdh 好的
datoujiejie221
2022-07-28 16:49:02 +08:00
自建用 harbor 的多吧
stille
2022-07-28 17:15:25 +08:00
@levon 其实上面大家都回复了,主要是降低运维成本,环境依赖统一,多服务器部署快速.等等

例如你的小项目做好镜像打包,就不需要在意服务器的环境配置,以后扩容增加服务器或者迁移服务,直接一个包打过去一条命令就恢复使用.
stille
2022-07-28 17:16:52 +08:00
如果涉及到机密不想推送至仓库,可以配置私有镜像仓库,也可以本地写好 Dockfile,各个服务器启动自己编译相同环境的镜像.
levon
2022-07-28 17:50:37 +08:00
@stille 生产服务器去自己编译镜像不大现实,这意味着服务器要拉取源代码
superchijinpeng
2022-07-28 19:18:14 +08:00
可以,服务于全国各个 gov 内部,没有仓库
levon
2022-07-28 21:34:55 +08:00
@superchijinpeng 你意思公司是服务 gov ,然后内网部署,不使用镜像仓库,是吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/869152

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX