部署 Docker 前必须问自己的四个问题

2013年4月Docker被正式发布开源,所以在软件行业中Docker还很年轻。像我这样的网虫(nerds),对于这么明星耀眼的软件,首先看到的是它的潜质,并思考如何开始在各种场景下的使用它。

现在很多博主仍在聚焦Docker的优势,而我们感觉到已经是时候认真的询问在什么场景下、为什么这是我们最佳的选择方案。而且更重要的是,当你 可能在两者之间做出最好抉择的时候。在慎重思考以下几点后,我们最终没有将Docker用于生产环境。但是,如果你已经将Docker用于生产,我们也愿 意听一下你的原因。

我将在这篇文章中分享一下我们的一些发现和一些关键问题的概括,如果你也有计划实施使用Docker,这些问题你应该会遇到的。

我们也希望从你们那里听到:你认为是什么驱动你采用Docker的?你怎么看待未来工具的变化?你期望它们能做到什么地步?

1-你到底需要做多少?

Docker提供功能广泛,这里有几个的例子:

Images(镜像):Docker可以通过Pull和Push命令构建对象到服务中心

Containers(容器):Docker可以通过Start/Stop命令管理容器的生命周期

Logging(日志):Docker可以通过stdout,stderro捕获输出所有的容器内部信息

Volumes(存储):Docker可以创建和管理容器的相关文件存储

Networking(网络):Docker可以创建管理虚拟的接口和内部所有容器之间的网络桥接

RPC:Docker服务器提供允许外部程序去控制所有容器的行为的API

提供的功能越多必然会增加一定程度的复杂度,据使用sloccount 统计,仅仅在main repo中就有97100行代码。它们在Docker中全有或者全部没有关系。所有的特性被打包到一个二进制的文件中,没有方法可以实现只打进去一半。所 以,如果你准备开始使用Docker,就应该考虑是否需要它提供的这些功能。

2-搞这么复杂值得吗?

一年前,我们为了寻找方法简化构建运行时的管理,开始了Docker跟Jenkins结合使用。开始这个想法后我们不得不开始担忧构建依赖或同时构建造成的环境污染等问题。每一次在新容器的构建,Docker将被隔离。这个做法(指隔离Docker的操作,译者注)在我们仅仅需要Java和Docker而不必处理其它的冲突依赖时简化了我们的设置。

做了这些工作良好的运行了一段时间后,也引入了不少的问题。管理运行时容器并非是不重要的,我们要清理掉旧的容器会留下的文件目录,否则可能最终引起机器故障。

为了解决这些问题,我们不得不构建了一个包装工作(参考cide)来管理Docker容器的每次构建。
当cide构建时,我们也会和Dockerfile构建者关注一些灵活性问题,它不能较好的使用Gemfiles来适应私有库的依赖管理。仅仅是获取运行时和清理工作至少要花费三次的不同迭代。

最终新的解决方案要比先前的好。但是我们觉到这些可以更加简单 ,可以跟工具集更紧密的结合。像所有优秀的开发者一样,你可以在一个在抽象层寻找一个解决方案,但是它并不是那么完美。

3–你能处理故障吗?

Pusher的例子略微小众化,因为我们有长期运行的客户端连接,这些连接有偿提供给我们的客户以便可靠快速的使用。我们必须先限制分发用户的数量。实际上,当我们部署时就已经采取额外的步骤去限制故障了(参考crank的实例)。

Docker是按一个月或者两个月的频次发布新的版本,你很可能像通过二进制更新到最新版。但是,由于Docker是结构化层次的,要想升级就必须关闭宿主机上的所有的容器。这就必然会增加引入新的故障挑战。

目前,这是我们放弃在主生产环境使用Docker最大的原因。我们计划通过替换整个机器环境,通过重定向转换DNS流量,但是直到现在我们也没有解决这个问题。依据你应用程序的架构,这些经验也可以为提供一些建议。

如果你在此处不太注意,就会发现自己重建整个应用程序只是为了适应这种模式而已。这也是我们决定放弃使用Docker的另一个原因。我们怀疑它能添加延迟和一些额外的开销。

4–你有技术支持吗?

最终还是想想看吧,你需要扪心自问你具有操作知识吗?我们发现找到详细的实例Docker部署信息非常困难。我们遇到的都是一些操作的问题以及如何处理它们。

一旦你深入发掘Docker的更多操作,你就发现网上的一点点文档完全不够的。所以有两种方式获得问题的解答:要么多花费时间思考问题,多去论坛交流刷刷问题,或者你总是能搜索到Docker提供的专门支持问题。

本质上,能搜索的是有很多的基础入门信息,但是很少量的信息是在最优解和可操作性上是可用的。超过现在的水平去理解它是一个长期的实用解决方案这个问题是很难做到的。我们想给正在做出决定的人提供一点力所能及的帮助,这也是我们分享这篇文章其中原因之一。

那么我们应该部署Docker吗?

最后这是一个你自己能回答的问题。根据你的使用情况,Docker中无所不包的方法是完美的。 如果说万丈高楼平地起,它确实是一个不错的开端。

但是如果你已经有一个已经发布架构,你就应该问一下自己到底是否真的合适了。我们建议先规划好你的应用程序蓝图,确认你应该需要什么功能,然后检 测这些功能Docker是否提供。如果你在构建一些很简单的应用,它可能不是你的理想工具。如果上线的时间是一个障碍,它可能也不是你的理想工具。

对于那些已经运行在Docker生产环境的,我们很乐意想听你们对于工具的发现和怎么在社区交流中得到一个真实的交流从而改善社区的经验。

====================================分割线================================
文章转载自 开源中国社区[http://www.oschina.net]

时间: 2024-07-30 14:51:58

部署 Docker 前必须问自己的四个问题的相关文章

部署Docker前必须问自己的四个问题

本文讲的是部署Docker前必须问自己的四个问题,[编者的话]Docker是当前技术领域最火热话题了,但是真正应用到生产环境并取得革命性成功的案例却并不多.很多人提起这个话题,往往认为Docker不够稳定,坑多,但在在实际的生产实践过程中,很多用户反馈Docker本身的稳定性不错,毕竟Docker依赖的容器技术在过去几年已经在大量的企业生产环境运行.但是也有相当多的企业在调研后放弃使用Docker,究竟是什么样的原因呢?对我们自己来说Docker到底适合我们的项目吗?且看Pusher的一位工程师

在决定离开公司前需要问自己的四个问题

你该怎么去判断你待在同一家公司是不是已经够久了?是不是应该去想办法另谋他就了? GE的传奇总裁杰克‧威尔许(Jack Welch)在LinkedIn发表了一篇文章,希望这篇文章能够帮助大家解答这个问题.在文章中,威尔许提到了一位在知名企业担任投资经理的朋友,在有一天这位朋友开车上班去的时候,他和往常一样将车停在相同的位置,然后他却发现,自己怎么样都无法走出车外. 「可能我在这家公司已经待的太久了.」他这么想.如果你问他哪里出了问题?那么他的答案:「这并不是因为一件事,而是我发现所有的事情都已经不

阿里云部署Docker(5)----管理和发布您的镜像

出到这节,我在百度搜索了一下"阿里云部署Docker",突然发现怎么会有人跟我写的一样呢?哦,原来是其他博客系统的爬虫来抓取,然后也不会写转载自什么什么的.所以,我终于明白为什么那些大咖的文章总会在文章的开头写明,转载请注明原创来自xxx的.恩.get it,从这篇开始,我也要这样了. 本文欢迎转载,但要尊重本人劳动成果,转载注明转自"http://blog.csdn.net/minimicall/" http://blog.csdn.net/minimicall/

Kubernetes持续部署Docker Apps

本文讲的是Kubernetes持续部署Docker Apps[编者的话]本文是Codeship系列文章(Continuous Deployment for Docker Apps to Kubernetes)的第二篇,介绍了Codeship的相关配置项.如果已经等不及了,你可以下载电子书<Continuous Deployment for Docker Apps to Kubernetes> 这一系列文章中,我们介绍过了using Kubernetes for deployments.本篇我们

做产品前六问自己

最近做产品很迷茫,不知道自己做的产品到底干嘛的,有时做到一半时或者遇到难题时才反过来思考自己做的产品到底是干什么的,哪类用户会去用,用户会喜欢吗--当这一切问题烦绕着自己时,才发现迷失在产品怪圈里了.当然不排除很多产品的需求来自市场.来自于BOSS敲板定的,但你是产品经理,当你都没办法说服自己时,这产品是否还值得继续做下去呢?做产品前六问自己: 第一问:你的产品定位是什么? 1.产品是什么? 你要做的产品是被http://www.aliyun.com/zixun/aggregation/6579

新疆局召开会议,部署春节前、春节期间快递服务保障工作

为切实做好春节期间全区快递服务保障工作,确保行业安全.平稳运行,根据http://www.aliyun.com/zixun/aggregation/5145.html">国家邮政局相关要求,1月29日,新疆邮政管理局召开会议,部署春节前.春节期间快递服务保障工作.局党组成员.市场监管处处长安长来出席会议并讲话.新疆快递行业协会会长徐永枫,乌鲁木齐市邮政管理局局长严利霞出席会议,乌鲁木齐地区主要快递企业负责人参加会议. 会上,安长来处长传达了国家邮政局关于做好春节期间快递服务工作的安排部署,

从零开始安装、编译、部署 Docker

简介 主要介绍如何从基础系统debian部署docker 关于docker基础知识在 相关资料 里有链接 安装docker 1.使用root用户身份添加apt源 添加public key使docker的安装源授信 $ curl -s 'https://sks-keyservers.net/pks/lookup?op=get&search=0xee6d536cf7dc86e2d7d56f59a178ac6c6238f52e' | sudo apt-key add --import 安装apt的ht

OpenStack Magnum如何部署Docker Swarm等容器

OpenStack Magnum通常用于部署和监控容器--如Docker Swarm.Google Kubernetes 和 Apache Mesos等,但是除此之外这个项目还有一些其他有用工具. 易于部署,并且体积要比hypervisor小很多,这些都是容器技术日益流行的原因,此外,单个容器只需要完成特定任务.现在最为常见的三种容器是Docker Swarm.Google Kubernetes和Apache Mesos. 使用容器技术,管理员能够部署完整应用或者是应用的重要组成部分,并且其体积

阿里云部署Docker(7)----将容器连接起来

路遥知马力,日久见人心.恩.该坚持的还是要坚持. 今天看到一个迅雷的师弟去了阿里,祝福他,哎,虽然老是被人家捧着叫大牛,我说不定通过不了人家的面试呢,哎,心有羞愧.  本文为本人原创,转载请表明来源:http://blog.csdn.net/minimicall 我们在阿里云上部署Docker服务系列教程已经到了第7节, 需要回顾的同学可以翻看我的博客. 今天,我们学习一下怎么将docker里面的容器连接起来.例如我是一个web服务,我需要用到mysql服务,如果它们属于不同的容器内,如果连接.