文档章节

Moving to Docker(一)

DockOne
 DockOne
发布于 2015/01/31 15:39
字数 1036
阅读 165
收藏 13

本文迁移至Docker系列的第一篇,这个系列介绍了我所在的公司是怎么把基础设施从PaaS迁移到Docker上的。如果你对基础已经很了解了,可以直接看本文底部的几个技术专题。

上个月,我一直在折腾开发环境。这是我个人的经验和故事,关于如何在Docker上简化Rails项目的部署工作。

当我开始创建Touchware的时候,我还是个独立开发者。项目比较小,也不复杂,也不需要维护,甚至不需要部署到很多机器。经过去年一年的发展,我们成长为有10名员工的公司了,同样在增长的还有我们的服务端程序和API。

Step1 Heroku

虽然我们还是个小公司,但是我们还是需要让事情尽可能的便捷。当我们在寻找解决方案时,我们希望找到可以帮助我们减轻对硬件依赖负担的工具。由于我们主要开发RoR项目,而Heroku不仅对RoR有很好的支持,而且还提供常用的数据库(Postgres/Mongo/Redis等),于是我们就明智的使用了它。

Heroku有很好的技术支持和文档说明使得部署工作非常轻松。唯一的问题是,当你的公司还处于发展阶段,开销很多,而用Heroku也不是很划算。

Step2 Dokku

为了尝试并降低成本,我们决定试试Dokku,引用GitHub上的一句话来说,Dokku是迷你版本的Heroku。

Docker powered mini-Heroku in around 100 lines of Bash

我们在DigitalOcean上购买了很多台机器,都预装了Dokku。Dokku大多时候跟Heroku很像,但是当有的项目需要调整配置参数或者是需要特殊的依赖时,它就无能为力了。我们有一个应用,它需要对图片进行多次转换,这导致我们找不到一个适合版本的imagemagick运行在安装了Dokku的Docker容器内。尽管我们还有很多应用运行在Dokku上,但我们还是不得不迁移一些到Heroku。

Step3 Docker

几个月前,由于开发环境和生产环境的问题,几个项目需要重新调整,我决定使用Docker。Docker简单来说就是用于容器化应用,简化部署工作。由于一个Docker容器已经包含项目运行所需要的所有依赖,只要它能在你的笔记本上运行,就能在任何一个别的远程服务器的生产环境上运行,包括Amazon的EC2和DigitalOcean上的VPS。

Docker IMHO特别有意思的原因是:

  • 它促进了模块化和关注点的分离:你只需要去考虑应用的逻辑部分(负载均衡:1个容器;数据库:1个容器;web服务器:1个容器)

  • 在部署的配置上比较灵活:容器可以被部署在大量的HW上,也可以容易地重新部署在不同的服务器或者服务提供者上。

  • 它允许非常细粒度的优化应用的运行环境:由于你可以为你的容器自己创建镜像,就可以自己去配置环境。


它也有一些缺点:

  • 它的学习曲线非常的陡峭(这是从一个软件开发者的角度来看,而不是经验丰富的运维人员)。

  • 搭建环境不见得,尤其是还需要自己搭建一个私有的Registry。


在接下来的几篇文章中,将会介绍如何搭建一个半自动化的Docker部署系统。

  • 搭建一个私有Registry(翻译中)

  • 配置Rails项目的半自动化部署方案(翻译中)


本文转载自:http://dockerone.com/article/169

DockOne
粉丝 8
博文 12
码字总数 5880
作品 0
海淀
私信 提问
《Moving to Docker》系列之译者序

无论是大公司还是小型创业公司,都有遇到过系统环境选择、开发环境和生产环境不一致以及如何快速部署的问题,这些琐碎的问题不仅消耗了大量的时间去排查,而且还容易反复再犯。于是,开发者们...

DockOne
2015/02/05
570
2
Moving to Docker(一)

【编者的话】本文是《Moving to Docker》系列的第一篇文章,这个系列的文章讲述了创业公司如何把基础服务迁移到Docker上,以及迁移过程中的经验教训。本文主要介绍了Touchware为什么要从Her...

DockOne
2015/01/31
2
0
Docker与Vagrant之间的特点比较

  以下内容均出自Vagrant作者(Mitchell Hashimoto)与Docker作者(Solomon Hykes)在stackoverflow上面一个问题讨论。在这个问题中,双方阐述了vagrant和docker的特点和使用范围,对于深入理解...

果树啊
2015/06/15
208
0
Running RancherOS using Docker Machine

Running RancherOS using Docker Machine Before we get started, you’ll need to make sure that you have docker machine installed. Download it directly from the docker machine rel......

openthings
2016/04/06
113
0
Docker 0.8 发布,宣布将每月发布新版

Docker 0.8 带来了BTRFS和OSX支持等诸多新特性。此次发布还宣布新的版本发布策略,计划每月发布一个新版本。 此次更新主要集中在了大量的bug修正、性能调优、稳定性提升、还有代码清理,文档...

windyland
2014/02/06
5.1K
6

没有更多内容

加载失败,请刷新页面

加载更多

CQRS与AXON

CQRS 看了蛮多文章,只会CRUD,却不懂CQRS,CQRS是遵循DDD思想而产生的一种模式,Command and Query Responsibility Segregation 命令与查询隔离。查询就直接通过正常的模式service调dao层。...

无极之岚
14分钟前
2
0
OSChina 周三乱弹 —— 欢迎你来做产品经理

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :10多次劲歌金曲获奖,更多叱咤歌坛排名,黎明才应该是四大天王之首,只可惜拍的电影太少。单曲循环一个多月的歌,力荐 《无名份的...

小小编辑
29分钟前
32
2
500行代码,教你用python写个微信飞机大战

这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。 帮助蹲厕族、YP族、饭圈女孩在无聊之余可以有一样东西让他们振作起来!...

上海小胖
今天
8
0
关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
7
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部