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

大家有谁开始在自己的网站基础架构里用 Docker 了么?

  •  
  •   Livid · 2015-06-22 11:26:46 +08:00 · 8283 次点击
    这是一个创建于 3470 天前的主题,其中的信息可能已经有所发展或是发生改变。
    感觉按照 Docker 的设计哲学,一切应该尽可能拆得非常细,存储应该尽可能依赖各种云存储而不是 host。

    但是对于一些本身很简单,但是可能会有多个依赖(Redis,Memcached,Mongo,MySQL……)的应用,Docker 似乎让事情变得更复杂了。

    比如就目前 V2EX 的规模来说,我暂时还没有想明白上 Docker 的价值。

    而且,假设部署新代码就是部署一个新的 container,那么在切换的过程中,为了保证完全不影响流量的稳定,还是有一些定制工具需要开发。比如,在前面加上 HAProxy 或者 Nginx,然后新的 container 确认起来(通过了所有的自动化测试)之后,将 LB 里的后端端口指向新的 container,然后 rm 旧的。
    21 条回复    2015-06-22 18:18:55 +08:00
    liujiantao
        1
    liujiantao  
       2015-06-22 11:30:12 +08:00 via Android
    暂时没有这个意向,可能一些大规模网站应对各种各样的需求会考虑,拆的细同样可以保证以后迭代各版本有优势 (个人观点,轻喷
    phoenixlzx
        2
    phoenixlzx  
       2015-06-22 11:30:56 +08:00
    我只知道在之前公司折腾 docker 的时候差点把我的 SSD 写坏掉。
    Livid
        3
    Livid  
    MOD
    OP
       2015-06-22 11:31:27 +08:00
    @phoenixlzx SSD 什么型号?
    johnsmith123
        4
    johnsmith123  
       2015-06-22 11:36:29 +08:00
    没有意义,docker的存在价值就是鸡肋。只不过一些**跟风投钱罢了。

    我认为:没钱还敢用docker/openstack?
    phoenixlzx
        5
    phoenixlzx  
       2015-06-22 11:39:18 +08:00
    @Livid Intel 530 240G

    我不知道是不是我的方法不对,执行 Dockerfile 的时候每个步骤都会创建一个镜像快照(?),写盘数据量貌似很大,几乎不能再进行其他磁盘操作(打开其他程序也不可以)
    HowardMei
        6
    HowardMei  
       2015-06-22 11:43:07 +08:00   ❤️ 1
    你的感觉是对的,目前Docker最大的价值是多用户环境隔离和Customization Freeze,我是Saltstack + Docker搭配着用,主要是把一些配置和代码改动存成模板,转变成客户可点击的按钮,自有网站用Docker没太大意义,后台运维工作会增加。

    其实Microservices只是最近吹得比较热,有很多人反对,因为服务依赖这个坑一点都不小,只适合特定的App,一般的Python程序,完全可以用类似 https://github.com/pantsbuild/pex 这样打包的方式管理。
    Livid
        7
    Livid  
    MOD
    OP
       2015-06-22 11:43:10 +08:00
    @phoenixlzx 530 是很好的 SSD 了。

    执行操作的时候有没有看到 iostat?
    jokester
        8
    jokester  
       2015-06-22 11:55:50 +08:00
    only using for test purpose
    phoenixlzx
        9
    phoenixlzx  
       2015-06-22 11:57:58 +08:00
    @Livid 我敲了... 然后 iostat 等 docker 跑完了才起来于是一切正常....
    loading
        10
    loading  
       2015-06-22 12:02:33 +08:00 via Android
    我觉得,docker是给大公司超大云用的,几个人玩起来比较累,不值得。
    fangpeishi
        11
    fangpeishi  
       2015-06-22 12:10:28 +08:00   ❤️ 1
    @phoenixlzx 姿势可以优化,写盘数据量很大猜测因为Dockerfile里面每一个命令都会生成一层镜像。不过Dockerfile有构建缓存,把一些固定性的命令写在前面,写在一起,会变动的命令写在结尾,这样每次构建的时候可以最大化的利用缓存。以后每次新加的命令也尽可能写到最末尾。
    qq286735628
        12
    qq286735628  
       2015-06-22 12:14:37 +08:00
    可能docker对于自己写的代码,才有比较强的存在感。

    比如自己写的网站的php部分等,通常自己写的这部分代码,封装和启停机制都稍微弱一点,docker可以做封装,并轻松帮你实现多实力的启停。

    但是对于想Nginx、MySQL、Redis等等这些已经成熟的服务,真的觉得存在感好弱。这些个服务软件,本身就有自己的世界观,每一款都有自己的集群和单机配置方案,用docker之后,总感觉改变了这些服务默认的机制。

    再说docker的快速启动服务这个特性,apt-get install nginx && server nginx start,不见得比docker慢,还是上面的原因,因为这些常用服务,ubuntu的包管理都帮你封装好了。
    evlos
        13
    evlos  
       2015-06-22 12:21:06 +08:00 via iPhone   ❤️ 1
    我用 dokku 来部署自己的网站,跟 Heroku 一样的 git 部署方式,超方便。
    adjusted
        14
    adjusted  
       2015-06-22 12:25:31 +08:00
    docker 的设计貌似是多个进程每个进程快速启动和关闭来部署,那mysql怎么办 ?
    CMGS
        15
    CMGS  
       2015-06-22 12:26:56 +08:00   ❤️ 2
    自行开发的应用上 docker 只是一条出路而已……涉及到拆分啊什么的其实最大的问题并非技术问题,而是政治问题。

    @Livid 说的并没错,带有状态的服务,最重的那一端如何和业务组织编排才是最核心的问题,docker 带来的应用层收益相比于编排的成本实在太低。从这个角度来看 docker 并没有什么卵用。

    所以问题的核心是哪里呢?

    编排系统,尤其是对 Nginx MySQL Redis 这样的本身存在的 binary 服务都能做的编排系统,并非简单的只用于自行开发的业务,这才是 Google Borg(Omega) 的核心价值。Docker 只是在这个编排系统中作为一个容器引擎罢了,说白了 Rkt AppC 哪个不能做啊。

    因此,我组是自行开发了一套编排系统(http://github.com/HunanTV),目前结合 Redis Cluster 3.0 爽得飞起……开发测试机平台也在上线中,目前基本没跑公司看得见的业务(政治问题),反而在成熟服务编排上下了很多的功夫(Dns体系,Redis,Yarn etc...)



    这个视频就是我们对 Redis 集群控制的界面,恩完全无人值守毫秒级的扩容缩容响应,大概这样吧。

    总之我个人认为 Docker 是个 engine,把它看做一个 Platform 实在是高估它了,加之 Docker 实现代码实在是啧啧啧,因此编排和资源控制才是系统工程师应该关注的地方。
    paicha
        16
    paicha  
       2015-06-22 12:45:11 +08:00
    对于 leancloud 这种 BaaS 服务商还是很有价值的,资源隔离、降低消耗。
    evlos
        17
    evlos  
       2015-06-22 12:48:57 +08:00
    给一个新的 Linode 部署我的网站,用 docker 的话我只需要以下几个步骤

    1. docker run --name="mariadb" -d -p 3306:3306 -v /var/storage/mysql:/var/lib/mysql tutum/mariadb

    2. docker run --name="phpmyadmin" -d -p 8080 --link mariadb:mariadb -e VIRTUAL_HOST=db.eternalelf.com maxexcloo/phpmyadmin

    3. 打开 db.eternalelf.com:8080 导入数据库

    4. 在 python 项目里,新建一个文件叫 Procfile 内含 web: python app.py,然后 pip freeze > requirements.txt,git remote add deploy [email protected]:test,git push deploy master,应用就被部署到 test.eternalelf.com 这个地址了

    以后每次我更新代码后直接 git push deploy master 搞定,超方便。

    ---


    如果用 dokku 来部署代码的话,它会自动检测你的新容器是否正常运行之后,再把 nginx 指向新容器,然后删除旧容器。
    evlos
        18
    evlos  
       2015-06-22 12:51:01 +08:00   ❤️ 1
    @adjusted MySQL 可以只部署一个,或者部署多个的话改一下指令中的端口即可

    docker run --name="mariadb" -d -p 外部端口:3306 -v /var/storage/mysql:/var/lib/mysql tutum/mariadb
    evlos
        19
    evlos  
       2015-06-22 13:05:01 +08:00
    直接用 docker 很难体现出它的优势,毕竟只是一个容器引擎,再装一个比如像 dokku 这样的 mini-paas 平台,才能发能发挥出引擎的效能。
    fsw90628
        20
    fsw90628  
       2015-06-22 17:42:07 +08:00
    其实 docker 是一个经历了好几个阶段才达到的结果:

    虚拟机 - Puppet/Chef/ansible - docker

    Docker 兼顾了 configuration 的灵活性 和 虚拟机的可迁移性 (portability) 和隔离功能。

    ps. 公司用 docker 做 auto build 和 auto scale
    fredcc
        21
    fredcc  
       2015-06-22 18:18:55 +08:00
    docker方便了快速部署异构环境的工作,不过现阶段管理工具门槛还略高。
    我们是因为异构环境和设备资源原因,使用esx和xen资源消耗过大,改为使用docker跑应用服务器,mysql和nginx还使用传统方案,memcache等视情况而定。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2381 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:29 · PVG 10:29 · LAX 18:29 · JFK 21:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.