灌水 初步使用 Docker 后感

陈恒捷 · 2015年05月13日 · 最后由 思寒_seveniruby 回复于 2015年05月14日 · 3276 次阅读
本帖已被设为精华帖!

没想到被加精了,现在把精华部分——思寒的评论在一楼.,免得被精华吸引的大伙被我水了。。。

思寒的评论在一楼:

此处开始是原来的水贴。。。

这几天在尝试用 docker 来配置 appium 源码环境和 ELK,虽然还没完成,但感受到了一些 docker 的特点,觉得挺不错的,在这里分享一下。

这个纯属水贴,主要是让对 docker 没有了解的人了解一下 docker 是神马,关于 docker 的原理及深入了解请查看 docker 官方网站的介绍

什么是 docker

docker 是一种基于 linux 容器技术的虚拟化技术。相比虚拟机,容器虚拟化减少了操作系统这个庞大的部分,但相应地,它只能运行 Linux 上的程序。

虚拟技术早就有了,但为何现在 docker 能如此流行

在 docker 出来之前,我们用的虚拟化技术主要是虚拟机。对于个人用途,虚拟机已经能满足大部分需要了。但当遇上需要配置大量虚拟机的环境时,虚拟机就显得比较臃肿了。

下面我们看看在 windows 下用 docker 和用虚拟机搭建一个基于 Ubuntu 的 LAMP 服务器有什么不同:

虚拟机:

  1. 安装虚拟机软件,如 Virtualbox
  2. 建立一个虚拟机,在里面安装 Ubuntu 系统
  3. 安装 apache
  4. 安装配置 MySql
  5. 安装配置 PHP

Docker:

  1. 安装虚拟机软件 boot2docker
  2. 安装 docker
  3. 使用 docker run -d -p 80:80 -p 3306:3306 tutum/lamp 下载并启动 LAMP

使用 Docker ,你节省了:

  1. 数百兆甚至 1G 的空间
  2. 虚拟机的安装镜像(某些时候获取这些镜像所花的时间很可观)
  3. 一个完整的 Ubuntu 系统

所以,docker 相比虚拟机,最大的优势在于快速部署和使用,同时由于 docker 不是完整的虚拟机,它的开启和关闭速度要比虚拟机快的多(一般 10s 内)。

除此之外呢?

Docker 把容器镜像做成了类似代码库的形式,并把它们放到 DockerHub 上供所有人自由下载。从此之后,部署服务器环境变成了在 DockerHub 上寻找合适的镜像并下载使用,我们再也不用按着各种官方文档来慢慢配置服务器啦。

悄悄告诉你: Docker 还支持版本管理呢。

这么好的东西为啥我们都没怎么用过?

是的,对各种环境部署来说, Docker 是一个好东西。但对于对运维领域接触较少的人,没用过 docker 是正常的。因为 docker 运行的程序都没有 GUI 界面,而且 docker 只能运行基于 Linux 的程序(感谢思寒补充,docker 也可以运行 .net 程序,详细请看 Running ASP.NET 5 applications in Linux Containers with Docker)。在这个操作系统界面还要比颜值的时代,没有图形化界面的虚拟化技术普罗大众怎么会感兴趣呢?

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 14 条回复 时间 点赞

我们公司用到了 docker. 说下我的感受吧.

目前测试环境是用 docker 构建的. 除了 docker 环境外, 也同时编写了一部分的自动化控制脚本搭建. 两者并行是因为历史原因. 在组内我是推荐用 docker 的. 也受到了质疑. 说下我的感受吧.
docker 最大的特点

虚拟化.

这个虚拟机技术会为未来的运维和云中心节省很大一笔收入. 因为他没有了虚拟机 OS 这个很大的负担. 节省的资源很大. 这个肯定会被所有的云计算服务商重视.
容器技术是工作于进程. 是内核进行了资源隔离. 他的性能接近原生. 如果是单纯当成一个虚拟机软件. 那还不如 virtualbox 方便.. 他的这个性能提升对我们 QA 基本是没太大收益的. 对运维和全球的节省那可很大了. 所以几乎所有的云计算中心都在尝试或者已经使用容器技术. 未来更多可能是跟虚拟化融合.主体计算肯定会在容器中.

面向交付.

docker 基于进程. 他发布出去后用户面对的也是进程入口. 这样的交付方式革命性的变化. 举个例子. 我要安装 jira. 传统的方法是安装服务器, 安装 tomcat, 下载 jira. 配置 jira,启动 jira. 而在 docker 中. 所有过程就是一个 docker run xxx/jira 一行命令即可搞定. 其他软件也是如此. 它是面向交付的.比如复杂的 ELK, 也只是几个命令就可以搭建起来. 很多细节都被封装起来了.

环境版本化管理.

新老版本更新的时候, 对于一家公司同时维护一套环境我觉得已经很吃力了.更别提是维护两套新老版本的环境. 这在测试中是很需要的. 但是维护起来却复杂. 环境大家要抢着用. 用坏了还得修复. 新老版本重新搭建费时费力. 架构复杂等都在制约 QA. 而 docker 把持续交付变成了现实, 而且还大大的扩展了概念. 利用 docker. 同时维护起来很多套完全不同环境不同分支的环境.

压力

在推动 docker 使用的过程中 我收到了很多的压力和动力. COO 研发总监和测试经理都曾经提出过质疑, 但是后来都给予了不少支持. 得以让我有机会可以继续改进 docker 在测试中的应用. 新的技术会带来新的收益, 并同时带来新的坑. 我也在磕磕绊绊中一路路的走过来了. 不过没有这些坑. 我估计 3 个月前就分享给大家了.

收益

前面介绍的 docker 后两大优点让我们公司受益很大. 我们的研发模式是分支开发主干发布. 这就意味着同时会有很多分支在进行开发测试. 共用一套环境很容易出错. 也存在资源争抢. 就是部署多套更新维护也很费劲.我的做法如下

  1. 用 docker 实现环境的自动化部署.
  2. 搭建一个每日构建的环境. 基于要发布的 master 分支
  3. 对同时在开发的各个分支分别根据需要构建特定分支的环境.
  4. 研发和测试通过 jenkins 上的一个 job 自动构建环境. 构建的时候需要协商不同模块的分支. 然后一个定制化的环境就出来了

这样环境的管理就变的非常有趣了, 环境开始跟代码一样进入了版本化管理了时代..
主干版本的环境一直存在. 每日构建. 构建的时候对环境建立一个 tag 标记. 可以跟研发的 commit 保持一致.
其他人测试只需要在自己的机器上动态的生成新环境即可.
每个人都有自己的一套或者多套环境.
docker 可以随时决定启动某个老版本的环境进行验证. 也可以决定启动两个不同分支的环境进行对比.

我搭建了一个 docker distribution. 也就是原来的 docker registry. 公司内任何人都是随时利用 docker 命令直接同步完整的过去并启动使用

对于 docker,我也很开放. 我告诉所有人, 不管我们用不用 docker, OneAPM 的客户很多已经开始用 docker 了, 他们希望我们的监控产品可以支持 docker. 甚至在 docker 里面运行, 所以 docker 本身就是我们应该测试的一种场景.
最重要的是, 我们要观察 docker 和传统环境管理两条路的效果, 让组员去选择他们喜欢的技术体系. 经过不断的观察和验证, 我发现在使用了 docker 之后组内的人都倾向于用 docker. 至于研发, 则是强烈赞同用 docker. 研发还想上 Mesos 管理, 这次则是轮到我反对了, 我觉得目前整个公司都还刚用上 docker, 很多人还没概念, 不要走的太超前....
说话的时候我都感觉到我也快成了一种阻碍生产力发展的因素了.

现状

目前我仍然在不断的研究如何让 docker 跟持续交付, 环境版本化, 甚至是更多的测试技术融合在一起 ,比如新老版本的变更 diff, 问题自动定位. 数据库和接口 diff 测试. 以及新老版本的性能对比等. docker 仍旧不稳定.我们公司仍在验证和探索阶段.
我总体很看好 docker 的发展.

docker 的最新现状

  1. docker 已经支持 windows, 微软已经发布了支持 IIS 的 docker
  2. docker 已经在所有大公司里面都开始用起来了, 目前主要是运维.
  3. 原来越多的产品在使用 docker 作为发布方式
  4. jenkins+mesos+docker 已经成为新一代的架构选型.

不明觉历

闲的时候跟你学习学习

赞~喜欢这种有实践有前瞻的干货~

docker 去年开始关注,但一直没时间研究,对它也有质疑。公司内部运维仍在使用 vmware 的 esxi 作为虚拟化手段,确实很头疼,但若运维改造成 docker 这看起来是一个很大的工程。最主要的是服务端没有统一可靠的图形化管理,docker 最近收购了 Kitematic,期待不久就会有一个可靠的、官方的图形化管理工具。

另,我公司也正在探索运维自动化、安全与 docker~@seveniruby oneAPM 我也使用过,还请售前来讲解了一次,也许以后有合作机会~

我用 docker 搭建了 ELK。感觉如果不熟练的话,效率还是很低的。。

曾经关注过,没有实践过。

#5 楼 @lihuazhang 昨晚我用 docker 试着搭了 ELK,后面可以访问到 Kibana ,但还在学习 ELK 到底要怎么用中。。。以前从未接触过 ELK 。。。

#1 楼 @seveniruby 你们 COO 居然会反对用 Docker,当年还是他安利我 Docker 啊。

#7 楼 @chenhengjie123 你能听说到 ELK 已经算不错了.这几个关键词是我最近一两个月开始念叨和忽悠的

#8 楼 @fiona 别直说名字. docker 他是支持的. 他希望是 docker 之上更高层的封装 vagrant. vagrant 是最合适的工具. 在 docker 不支持 windows 的时候, 只有 vagrant 支持全平台. docker 目前也只是刚刚开始支持 windows. 还没真正的用起来, 只是半个月前才发布. 我当时推的时候是在半年前, 那个时候 docker 还不成熟. 他现在已经接受了 docker 应用在测试环境了.

别搞的太有压力. 我单独开一个帖子. 把我总结的 ppt 也放上来吧. 没有你的疑问, 我也不会写这些.

初步看了下,减少了操作系统安装,那后面发布部署到实体服务器上是否会有差异?

#10 楼 @seveniruby 感谢提醒和分享,看来我要再请他吃饭了。

#13 楼 @fiona 别讨论这个事情啊 不然我要吃不了兜着走 我原文已经删了八卦了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册