V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
levon
V2EX  ›  Docker

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

  •  1
     
  •   levon · 2022-07-28 09:48:59 +08:00 · 2506 次点击
    这是一个创建于 874 天前的主题,其中的信息可能已经有所发展或是发生改变。
    生产环境中应该很少人会把镜像 push 到官方的 hub 中去吧。
    即使私有的镜像仓库感觉也挺麻烦,先要把镜像 push 到镜像仓库,然后生产服务器又要去 pull 下来。
    我在想更简单的方法不是应该把镜像当作一个文件直接传送到服务器去吗,为什么还要一个镜像仓库来中转呢。

    疑惑中,实际应用中是怎么使用的,有人能帮忙指导吗
    dzdh
        1
    dzdh  
       2022-07-28 09:51:28 +08:00   ❤️ 1
    生产环境 自建 registry ( https://hub.docker.com/_/registry)

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

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

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

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

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

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

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

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

    例如你的小项目做好镜像打包,就不需要在意服务器的环境配置,以后扩容增加服务器或者迁移服务,直接一个包打过去一条命令就恢复使用.
    stille
        17
    stille  
       2022-07-28 17:16:52 +08:00   ❤️ 1
    如果涉及到机密不想推送至仓库,可以配置私有镜像仓库,也可以本地写好 Dockfile,各个服务器启动自己编译相同环境的镜像.
    levon
        18
    levon  
    OP
       2022-07-28 17:50:37 +08:00
    @stille 生产服务器去自己编译镜像不大现实,这意味着服务器要拉取源代码
    superchijinpeng
        19
    superchijinpeng  
       2022-07-28 19:18:14 +08:00   ❤️ 1
    可以,服务于全国各个 gov 内部,没有仓库
    levon
        20
    levon  
    OP
       2022-07-28 21:34:55 +08:00
    @superchijinpeng 你意思公司是服务 gov ,然后内网部署,不使用镜像仓库,是吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3207 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 12:31 · PVG 20:31 · LAX 04:31 · JFK 07:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.