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

docker 对普通个人开发者的作用,求指点

  •  
  •   ynohoahc · 39 天前 · 7499 次点击
    这是一个创建于 39 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在学习 docker 但是越学越不清楚自己为什么要学 docker

    其中最大的疑惑是 服务器上用 docker 去部署项目真能节省很多资源吗? 比如说 用 docker 在机器上部署了几十个 api 服务 去对比 用传统的 tomcat 在本地部署几十个 api 服务

    因为每开一个容器都相当于多开了一个基础 linux 镜像, 然后再在这个基础镜像里跑 tomcat 服务

    基础镜像无论有多轻量 好歹也是一部分开销呢

    所以从直观感觉上还是觉得后者会省资源一点 但外界宣传就是说容器会更轻量 呃~~

    还有一个不小的疑惑就是, 对于普通个人开发者来说(我只想平日里没事接接外单, 挣点零花钱), 那么 docker 带来的好处是不是只有一个就是能统一开发环境呢?

    有实操的前辈们能讲讲吗?

    95 回复  |  直到 2019-05-18 19:42:55 +08:00
        1
    momocraft   39 天前
    比 VM 轻量,比一个 JVM 进程跑所有 servlet 显然是重的
        2
    qinyusen   39 天前   ♥ 11
    你用过一键脚本么?一键部署环境,最简单的,比如,你装 LAMP,1 个半小时够么?

    docker 的意义是,docker pull 一下就无障碍部署完毕了。

    另外,你有没有遇见过环境里即需要 python2 又需要 python 3 的?也就是运行环境依赖有冲突的时候。

    个人接单,你是喜欢跑人家服务器上叮咣手动装 2 天环境,还是直接 docker pull 一下,然后跑一个 docker run 的脚本,分分钟部署上比较好呢?也不用管宿主机到底是 centos 还是 debian。

    docker 之于我,就是再也不用维护多个 os 的一键脚本了,维护一个 dockerfile 就 OK 了。

    env independent, 你要先明白这个关键字的意义。
        3
    Vegetable   39 天前   ♥ 1
    就说你外包吧
    从前是登录客户提供的机器自己配置环境,装依赖,跑项目,写 crontab,可能还有别的.
    这还是好的,起码让你连服务器.
    不让你连的话,你就得教别人用,当然不排除沟通很顺畅的情况,但是大部分是....你懂得

    如果用 docker 的话,在已经部署了 docker 的机器上会方便很多,可能能做到 git clone&docker-compose up 直接跑起来,哪怕对方是 Windows 系统.

    我觉得这就算是对个人开发者比较大的意义了.
        4
    CallMeReznov   39 天前   ♥ 1
    你喜欢把鸡蛋都往一个篮子里装的话,就不要怕这一篮子的鸡蛋都被砸烂.
        5
    ynohoahc   39 天前
    @momocraft 前辈其实我一直不明白为什么要拿容器和 vm 比呢 因为我理解的是容器就是在 vm 里跑的呀 如果是这样 那么现在的情况是 vm 跑容器 然后容器里面跑 tomcat 服务 传统的方式的 vm 里面直接跑 tomcat 服务
        6
    zjsxwc   39 天前
    首先没有 docker 之前我们用 chroot,先了解下什么是 chroot
        7
    ynohoahc   39 天前
    @qinyusen 谢谢指点 统一环境是 docker 的好处这我是知道 不过我可能还是低估了这一个好处
        8
    lhx2008   39 天前
    我觉得*个人、开发*是没啥用的,虽然可以拉镜像,但是配镜像的时间非常长,代码重新部署也要高度依赖脚本,给调试也带来很多困难。我觉得 Docker 最大的优势还是横向扩展吧。生产环境肯定还是有用的。
        9
    ynohoahc   39 天前
    @Vegetable 其实我从来没有私活啦 所以对于 docker 的这个好处还不能切身体会到 现在我是开发环境用 brew 去安装环境 然后云主机上用传统的方式去安装环境 环境装好之后就没怎么变过了 都是在写一些业务代码
        10
    ynohoahc   39 天前
    @lhx2008 对开发来说还是能统一环境的 但是对于不是经常搞环境的开发来说真的体会不到 目前来说我就是
    /(ㄒoㄒ)/~~
        11
    GiantHard   39 天前
    使用 VM 或者容器的一个目的在于隔离各个网站的运行环境,而容器在达成这一目的上所需要付出的系统资源是要小于 VM 的,所以说 docker 比较节省资源。
        12
    noahzh   39 天前   ♥ 3
    都是太片面理解了,举个简单例子,你能在同一台机器很容易同时部署各个版本的 jdk 嘛?就这一条就够用了.
        13
    ynohoahc   39 天前
    @zjsxwc 呃... 我还真不知道什么是 chroot 现在就去查一下
        14
    kevinhwang   39 天前 via Android
    只有我一个用 docker 跑 ss 和 frp 这些 daemon 吗?
    原因是好管理,多机可以方便配置。与宿主更多的隔离,重装系统压力小很多,尽量将 daemon docker 化,放到 gitbhub 管理,带有密钥的 ignore 就好。
        15
    opengps   39 天前 via Android
    打包环境以前的做法是:拷贝整个虚拟机!
        16
    ynohoahc   39 天前
    @noahzh 言简意赅 精辟~👍
        17
    ynohoahc   39 天前
    @opengps 哈哈哈 程序员史上还有这么一个简单粗暴的黑历史吗
        18
    GiantHard   39 天前
    @ynohoahc 如果你有 docker 的话,就不用在云主机上去安装环境了,你在开发时候顺手打包一个 docker 镜像,在云主机上只要无脑 docker pull 就好了
        19
    fengbjhqs   39 天前
    win 电脑,表示没有听过 docker
        20
    ynohoahc   39 天前
    @kevinhwang 嗯 好专业~~老哥是运维吗?
        21
    ynohoahc   39 天前
    @GiantHard 嗯这个的确是我学习 docker 的初衷
        22
    kevinhwang   39 天前 via Android
    @ynohoahc 普通 Linux 使用者。
        23
    boris1993   39 天前 via Android   ♥ 1
    从用户角度谈一下

    Docker 对我来说最大的好处是,不会搞脏我本机的环境

    比如我要用个 PHP 的应用,brew install php 之后,它不仅会装 PHP,还会装一堆依赖,久而久之各种东西会越来越乱

    但是现在我只需要取个合适的 PHP 的镜像,把应用塞进去,就可以了,本机不会装任何其他的东西,嗯,干净
        24
    d5   39 天前
    “.” Build, Ship, and Run Any App, Anywhere.
        25
    whileFalse   39 天前
    十年前我买域名买 vps 用一键脚本装 lamp,装代理。文档一大篇一大篇,装的时候如果网络报错,或者一不小心敲错命令,那就只能吧机器磁盘重置了,重来一遍。

    现在有了 Docker 体验是什么呢?搜索看看哪个镜像好用,然后 docker run -p 80:80 very-good-image 搞定。
        26
    bjfane   39 天前
    每开一个容器都相当于多开了一个基础 linux 镜像 这个不对吧
        27
    whusnoopy   39 天前
    docker 对个人而言的一个明显的好处是可以相对于传统虚拟机做相对轻量的环境隔离

    比如你有好几个项目,有一个依赖最新的 python 3.7.0,另一个年久失修只能跑在 python 2.6 下,你怎么同时维护能允许这两个项目的环境? Python 还好一点可以用 pyenv 加 virtualenv 做隔离,其他的语言我不熟悉,不确定是否有类似的简单方法做隔离。如果你是用虚拟机来隔离,那每个虚拟机的环境怎么装?是不是也费劲。以及,你自己隔离好了虚拟机,怎么发布和分享给别人?再来做一次虚拟机环境初始化?还是直接把虚拟机硬盘拷给对方?如果是 docker,直接一个 docker 配置文件就能相对于虚拟机更轻量的隔离并启动
        28
    wdy3334   39 天前
    @whileFalse #25 去哪儿找靠谱的镜像,全靠自己分辨吗?
        29
    tiedan   39 天前
    linux 基础镜像有啥开销?唯一的开销就是多占用了几百 MB 的磁盘和几 KB 的内存。
        30
    jameskuk   39 天前
    我们可以把环境+代码做成一个镜像,这样不用再去管远端真实环境,特别是在部署集群的时候,好处显而易见。

    还有个方面我补充一下。曾经有个项目在 aws 上,除了生产以外的环境,都是上班时间创建实例,部署服务,下班了,销毁实例,一年省了不少钱。你要手动搞或者写个很复杂的脚本,成本肯定比 docker 大很多。
        31
    jjianwen68   39 天前
    docker 是个好东西
        32
    jackleeforce3615   39 天前
    环境隔离是最大的好处。
        33
    zjyl1994   39 天前
    docker 的优势在于方便部署啊,你要得闲裸机上一个一个依赖装,这样肯定省资源,但是调到 100%拉起来的成本太高了
        34
    ghos   39 天前
    比如我装一个 tinyrss 需要:
    tinyrss 本体
    mercury api
    opencc api
    pg 数据库
    还要占用不知道多少个机器的端口
    现在一键安装部署 暴露出一个端口 美滋滋得很啊
        35
    ghos   39 天前
    接上 搞这么一套 没有部署脚本 最快要几个小时 一键安装实在太舒坦了
        36
    zong400   39 天前   ♥ 1
    tomcat 本地部署几十个 api

    tomcat 一挂全部挂,一个 api 出问题( oom )全部挂,维护一个 api 全部重启,更新 tomcat、jdk 版本(修漏洞)全部重启,这样你不觉得可怕吗
        37
    Luckyray   39 天前   ♥ 3
    最大的优势应该就是环境的一致性了,足以改变软件的分发方式。比如有的复杂应用需要装环境,装类库,假如有几百台服务器需要部署,对运维来说是巨大的挑战。某一次发布版本,部分依赖更新了怎么办?或者单台物理机上,两个应用的依赖冲突了怎么办?有了 docker,那种“我本地没问题的啊”的问题应该具不会出现了。

    其次,应该是资源的隔离,上面说的 tomcat 上部署几个应用,当然可以,其中一个应用负载突然暴增,整个物理机托挂了怎么办? docker 可以直接限制内存占用、cpu 核心数量,应用要死只会自己死。

    然后对个人开发来说,有个好处就是保持自己机器在整洁。经常遇到需要临时安装某些功能或者类库,执行了几个命令之后,它稀里哗啦下载了一堆东西,用完了也不好删除,一是不知道在哪,二是怕误删。有了 docker 不长期用的功能就可以不放在物理机上。我个人开发电脑上就没装 mysql、nginx 这些东西,还有一些使用频次比较低的命令行,都放在了容器里,不用的时候直接关闭容器,还能节省资源。
        38
    lihongjie0209   39 天前   ♥ 2
    这个问题要从不同的角度回答

    1. 作为软件开发者,你可以把 docker 当作软件的分发渠道,可以避免用户的繁琐配置
    2. 作为软件使用者, 你可以把 docker 当作软件的一种形式,可以直接"双击运行"
    3. 作为大规模集群的运维, 你以为他们用的是 docker, 其实他们用的是 k8s, 只是碰巧底层调度的是 docker 而已, 这个东西和个人使用一点关系都没有.
        39
    zong400   39 天前   ♥ 1
    为什么在 vm 里跑 docker ?这是基础资源管理的问题
    你理解的 vm 底层其实是各种云,阿里云、腾讯云、openstack (自建云)等,这些是为了把机房、机架、实体服务器、实体网络等一大堆资源整合利用,也可以说是把这是物理层面的东西虚拟化透明化了。
    而 docker 则是把 OS 虚拟化透明化,就是楼上说的各种跨版本啦、一键部署环境啦这些,开发就只需要专注于代码就好了,这是对程序员或者个人最大的好处。
        40
    micean   39 天前
    我现在都是直接用 idea 的 docker 插件直接把程序部署到测试环境……那还用得着中间搭个 jenkins ……
        41
    marsgt   39 天前
    一个是封装 /隔离,再一个是标准化,
    不让单个项目的依赖影响到整个系统,另外就是可以相对容易的可以封装一套东西、交付给其它人去部署(反过来也是,别人的东西,给你 Dockerfile 或者 Docker-Compose 就能拉起来了),还有就是给虚拟化提供更细的粒度,云平台直接部署 Docker 可以转成可视化的东西,方便管理
        42
    zyy314680012   39 天前 via Android
    @fengbjhqs win 也可以 主要方便安装各种环境
        43
    fengbjhqs   39 天前
    @zyy314680012 win 安装 dorcker,流畅运行就是很麻烦
        44
    cway   39 天前
    说白了就是快速部署,docker 可以把你制作好的镜像传到仓库,以后有需要随时可以用,不用配置环境
        45
    cway   39 天前
    但主要还是 devops 部署用的多,自动化部署项目
        46
    HelloAmadeus   39 天前 via iPhone
    kubernetes 搭配 docker 才能发挥容器的最大优点
        47
    loading   39 天前 via Android
    我觉得,不是要多部署的,小打小闹,公司也不用 docker 部署的话,我建议用虚拟机。
        48
    loading   39 天前 via Android
    如果开发机是 windows,其实比虚拟机还……
        49
    hcymk2   39 天前 via Android
    对个人开发特别是 Java 来说其实意义不大,多版本 jdk 其实不是痛点。
        50
    shm7   39 天前 via iPhone
    意义是在不用重复配置环境吧。有了编排结构以后,服务多副本的更新迭代也会更方便。
        51
    impl   39 天前 via Android
    统一开发环境用 vagrant
        52
    linshiyouxiang   39 天前
    对个人的意义是 重装系统随便搞了,日常各种应用都扔到了 docker 里面,互不干扰.
    vscode 预览版已经支持 docker 的远程接入,跟本地开发没什么区别,正打算把开发也扔到 docker 里面.
        53
    xuanbg   39 天前
    用资源换方便而已,看你是资源值钱还是时间值钱咯。
        54
    sazima   39 天前
    用 docker 不会在服务器上安装一堆乱七八糟的东西, 只需要准备几个 docker-compose 文件就好了.
        55
    mattx   39 天前
    如果从开发&软件工程方面来讨论价值的话, 是不大的. 应该尽量少去折腾, 除非为了环境, 点到为止即可. 从运维方面来说是价值很大.
        56
    neroxps   39 天前
    最简单的例子,以前编译 openwrt 你会被折腾到痛不欲生。而现在 你只需要到 hub.docker.com 那边找一个 openwrt builder 的容器就好了。完善自己的程序编译环境,编译完容器就删掉,剩下就是编译出来的文件,多舒服啊。
        57
    ww2000e   39 天前
    轻量类虚机,环境隔离,方便部署,不一定都要用
        58
    liuguang   39 天前
    方便迁移啊。。随便重装系统都没事
        59
    dreamusername   39 天前
    “每开一个容器都相当于多开了一个基础 linux 镜像”
    比较质疑这一句,tomcat 的 dockfile 基本都是从 openjdk 的包开始的,并不是 centos、debian 这类操作系统的包开始的,当然我也是一桶水不满。
        60
    alexmy   39 天前
    个人的话,就是觉得方便,我都用 docker-compose.yml ,至于别的 k8s 什么的,就没有去折腾了。
        61
    ynohoahc   39 天前
    @dreamusername 我觉得是这样的
        62
    razertory   39 天前   ♥ 1
    假如你一台 linux 机器上需要跑两个服务 A 和 B,并且 A 和 B 跑起来的需要额外安装基础组件 C。不巧的是,A 需要版本 V1.0.0, B 需要版本 V2.0.0。这时候如果 V2.0.0 没有做到向下兼容的话,运维同学就不得不在一个机器安装两个版本不一样的 C。但是!又发现同时安装起来会报冲突。

    如果是 docker 的话可以在各自的容器中安装需要的 C。

    以上。对于个人本地开发同样适用
        63
    justfly   39 天前
    容器的意义就是隐藏要部署的服务的细节 ( python go java 各种环境),从而有一套统一的接口进行操控,其实就是标准化。

    在此之上构建自动调度才更加简单。这些好处在你只有一台服务器,几个进程时体现不出来。你能体会到的就是本机开发有了开箱即用的环境。
        64
    jorneyr   39 天前
    一般小公司还真没太大用,Docker 在微服务盛行的今天,当服务器压力扛不住后 (小公司有几个业务好到阵发的服务器压力太大?),快速增加服务器,快速使用 Docker 部署,启动新服务,关键就是快快快,在部署的时候差不多就是复制粘贴然后就能启动服务了,不需要在新系统上逐个的安装配置各种软件了。
        65
    www5070504   39 天前
    “每开一个容器都相当于多开了一个基础 linux 镜像”

    感觉你把 docker 理解成了类似虚拟机的东西 虽然可以这么理解

    但是底层没有像虚拟机那样虚拟化所以性能损失要少很多

    docker 的意义在于方便的统一开发和部署环境 以及 部署流程的问题吧

    如果让运维去部署 运维很多时候也不知道你这个要怎么启动运行 可能你还得写个启动脚本 就更费劲了。。
        66
    sevncz   39 天前
    隔离环境,安装各种服务不用修改本机环境
        67
    yuhr123   39 天前
    环境隔离呀,这很重要。
    干干净净的来,干干净净的走。
        68
    menyakun   39 天前
        69
    menyakun   39 天前
    @dreamusername openjdk 再往下看一层就是了,*-stretch,*-alpine 就代表是从不同发行版 build 出来的
        70
    ynohoahc   39 天前
    @bjfane 这个不对嘛?
    我们写 Dockerfile 的时候不是经常写 COPY、WORKDIR 的嘛
    如果不是每一个容器有一个基础镜像的话 那么这些操作怎么解释呢?
        71
    HuasLeung   39 天前
        72
    kaneg   39 天前 via iPhone
    无论是对开发还是运维好处都太多。别的不说,以前开发环境部署一套 Oracle 几天都搞不定,还得专业人员干,现在随便抓过来个开发分分钟就搞定了。
        73
    choury   39 天前
    @ynohoahc #70 有基础镜像,但是他们并不需要运行起来,最多占用点磁盘空间,这就是和 vm 有区别的地方。vm 管理的是一个系统,要跑内核的,但是容器管理的是进程,推荐的做法就是一个容器跑一个进程。所以我们可以认为,用容器起进程和直接在机器上起一个进程相比没有额外的开销,只是会损失一点 io (网络,磁盘)性能(大概 5%,也远小于 vm )
        74
    FantaMole   39 天前
    从我的体验来说,在新机器上搭环境变得很简单,不同时期的项目的语言版本和框架版本依赖都是不同的,本地环境只需要 docker,执行 docker build + docker run 两条命令就能快速构建,快速开始测试。从我上家公司的架构层面来讲,微服务后,老项目抽离成服务由 PHP 构成,新服务是由 Java 构成,能让两套开发语言并存。甚至后来我们后端的技术栈还加上了 Node.js 和 Golang,这些都要依靠容器
        75
    0x8C   39 天前
    我在 mac 上写 golang 装 docker 主要是为了解决交叉编译的问题
        76
    galaxyyao   39 天前   ♥ 2
    #### “因为每开一个容器都相当于多开了一个基础 linux 镜像, 然后再在这个基础镜像里跑 tomcat 服务”
    在去看下 docker 原理吧。Namespace+Cgroups 的开销相比虚机的 Hypervisor+Guest OS 不知道低了多少了。
    如果都使用的是同一个 tomcat 镜像,那么通过 overlay2,就算开 10 个容器,存储空间都只需要 1 份。

    #### “用传统的 tomcat 在本地部署几十个 api 服务”
    如果指的是 1 个 tomcat 上 10 个 webapp,那么的确是比 10 个容器占用的资源少。但就像楼上已经说的“ 10 个鸡蛋放在一个篮子里”,能承受 1 个 webapp OOM 导致所有 webapp 不能访问的风险么?根本不用说对每个 webapp 控制 Xms 和 Xmx 内存占用了。
    如果指的是 10 个 tomcat,每个 tomcat 里一个 webapp,那么负载约等于 10 个 tomcat 的容器。但容器在编排,CI/CD 的简易程度,对环境依赖的灵活性,高可用负载均衡等等很多方面远胜。

    #### 对于普通个人开发者
    做私活的好处楼上已经说了。
    另一个好处是如果应用需要依赖数据库 /redis/消息队列等等中间件,以前只有两种方案:要么是依赖一个公共基础环境,会遇到和其他人互相修改对方数据的冲突。debug 了半天发现原来是数据被别人改掉了这种恶心事情发生频率还是挺高的。要么是在本机搭,但如果是 windows/mac 开发机,还必须需要这个中间件在 windows/mac 上有安装包。
    如果有容器,就本地 pull+run 一把梭,问题解决。
        77
    cf020031308   39 天前
    容器不同于虚拟机,是非常轻的。当然再轻也就像你说的一样会有额外开销,反过来又可以说,虽然有额外开销但是非常轻。所以不用纠结,学就是了。
    好处就是封装了环境,不影响宿主机。不但对于公司有好处,对于个人开发者也是好的,比如我之前写过一篇文章 https://cf020031308.github.io/blog/workplace-refactory (装逼用蹩脚英文写的)就是说这事,最近升级了 Majove 又搞破一堆环境,很是心累。
    另外一个好处就是环境固化成了配置文件,交付能力提高了,新机配置无比简单。打破了开发与运维之间的混乱墙,不然也不会几乎同时流行起 DevOps 概念了。
        78
    billlee   39 天前
    @noahzh #12 你这举了个最不恰当的例子吧。JDK 只要设置 PATH 和 JAVA_HOME 就好了,一台机器放上各个版本 JDK 完全没有问题的,应用也可以自带全部依赖。麻烦的是环境隔离做得不好的 C, python 这些。
        79
    FrankHB   39 天前
    @loading 基于 HyperV 的直接就是虚拟机了……
    真要开发还得另说;但光就部署讲,要是直接已经有提供了个 docker image 的情况,还费事把它拆出来自己撸一遍重新部署,那是没事找事。
        80
    native   39 天前
    比如我在这家公司搞了一边开发换环境。到了那个公司还得在搞一遍。有了 docker 就不一样了。 把环境写到 dockerfile 中到了直接运行生成自己需要的开发环境
        81
    FrankHB   39 天前
    跑点题,这玩意儿技术上的出发点就是对没法方便隔离环境的具体负载的变通。
    如果能跑的东西本来就有机制能方便隔离,那么仅仅是为了让环境干净,再套一个间接层的收益自然不大——这里的收益是相对的,很多时候是通过相对替代方案降低成本体现。例如虚拟机比物理机省事,操作系统支持的 namespace 实现的隔离比虚拟机省事,等等。
    但就原始目的来讲,这样的比较也不是绝对的,因为隔离会有功能限制上的代价。隔离完倒腾环境是省事了,但能做的事情往往就少了,在同一个实例上部署其它玩意儿的可能性通常也减少了。所以越是对通用性和灵活性要求越高的场合,细粒度的隔离限制越明显。极端情况下,如果目的不止是隔离,还要强调完整地模拟其它环境,那么当然就不是越轻量越好。比如像 WSL2 不也得依赖虚拟化么,为啥不按 WSL 的套路来?
    还有个问题也是显然的:隔离出来的实例多了就容易冗余。只是业务系统上跑的东西相对专一,本来就无所谓多少共享的依赖,独立部署自然无所谓。不过开发机上来讲,如果不是为了测试生产环境,这样显然不太划算(除非你一个开发机只打算管一个项目)。考虑这点,用隔离环境的思路来实现解决共存这样的问题就明显是跑偏了。要实现这样的目的,应该用更细粒度的非完全隔离的机制,比如 nixpkgs 之类的包管理方案。不过这类东西可能太偏向开发者了,运维基本都没概念更不可能流行,别指望近些年内能在公共生产环境用上,作为开发者还得自己负担环境差异带来的额外成本,于是基本只能自己玩自己的。
        82
    dyllen   39 天前
    个人感受是对于普通开发者就是搞环境方便,用完就没什么用处了,docker 主要是用在运维上面方便,各种扩展方便。
    容器又不是运行在 vm 上面的,vm 是虚拟了硬件,docker 并没有虚拟硬件,用的资源都是主机的。
        83
    1010543618   39 天前
    docker 给客户部署应用多方便啊,要是所有客户都能直接给你一台服务器就另说了
        84
    miao1007   39 天前 via Android
    docker 可以搭建 overlay 网络,多台 ip 一起跑
        85
    KigKrazy   39 天前
    如果你需要管理很多台机器才用,或者需要部署的程序很多。不然如果只有一两个程序其实没必要,增加负担。
        86
    resouer   39 天前
    节省资源有一百种方法,打包应用和 OS 依赖就容器镜像这一种方法。建议读一下这个: https://www.infoq.cn/article/R1p3H3_29f4TYImExsyw
        87
    lionseun   38 天前 via Android
    一键搭建一个 MySQL 一键搭一个 Redis 互不影响,线上本地环境一致
        88
    AlexaZhou   38 天前
    等你遇到需要部署几十上百台机器的时候,就知道 docker 好用了
        89
    abcbuzhiming   38 天前
    对于个人开发者来说最大的好处是环境隔离,无污染
    部署的便捷性要成百上千台机器的时候才体现的出来。k8s 对个人用户不是刚需,但是隔离环境这点确实是刚需
        90
    charlie21   38 天前 via iPhone
    环境隔离:虚拟机 vagrant 能做到、docker 也能做到
    资源隔离:docker composer 能做到
    * 离开了 xx 就不会写代码了 [1]:docker 能做到

    docker 隐藏的细节太多,这会直接导致很多人看似使用了 docker 的便利,实则离开 docker 就不会写代码了(等于把能力捆绑到了 docker 上)。有人将为此付出代价

    (设计师说离开 photoshop 就不会作图了,尚可理解,运维人员说离开 docker 就不会搞运维了,这表明已经将自己的知识栈捆绑在 docker 上,只会沦为笑柄。比如 给你两个看似能起一样作用的 container 哪个好哪个坏都分不出来,快速 pull 了有啥用?直接给你安个后门你会排查问题吗?性能监控更是没得谈了 -- “负载均衡” 这个名词是什么含义 那些 docker 步道者是不会告诉你的,你就一把梭就对了

    docker will cost you, docker 只是有钱人的玩具,但是你不会因为玩了它而变成有钱人,反而会先染上富贵病

    [1]: 离开了 Borg 都不知道怎么写代码
    https://www.infoq.cn/article/R1p3H3_29f4TYImExsyw
        91
    lonelygo   38 天前
    这么说吧:有个项目,后端比较杂,相隔时代久远,不同 JDK、Py2、Py3 都有。
    老板安排了新功能开发,为了省钱,就给了一台机子让你部署测试环境。

    传统部署:起 VM,一台一台 VM 先装起来,然后按照不同版本一台一台装机,然后再部署。嗯,如果运气好,一天没了,如果运气不好,再来一天。
    Docker 呢?一个环境,两条命令,pull / run,就酱。
        92
    CitizenR   38 天前 via iPhone
    当我开发需要当前系统不提供的数据库版本时,我体会出 docker 的好了。
        93
    ZSeptember   38 天前
    个人开发没啥大用。
    不会直接节约资源,只是细粒度的调控资源,可以提高资源利用率。
    有了各种编排平台以后,对公司内部的开发,测试,部署有不少好处。
        94
    mzdblsw8   38 天前
    我觉得先试着用。不喜欢就不用上。
        95
    mml   38 天前
    “别家孩子都在学”
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   914 人在线   最高记录 5043   ·   Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 28ms · UTC 22:05 · PVG 06:05 · LAX 15:05 · JFK 18:05
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1