Blog Archives

bara-基于Nginx和Dokcer的单机灰度测试环境原型

什么是bara bara,即日语的バラ,也就是玫瑰。 bara是一个基于Nignx和Docker的多版本程序同时在线的简易测试环境,只能单机使用,并且只是一个PoC而已,仅供参考。 简单来说,就是使用Nginx做反向代理,代理到后面的Docker容器,bara能动态创建Nignx配置文件,重启Nginx;而浏览器可以通过设置特殊header(默认为一个字母v)来通过Nginx代理,访问指定的后面的Docker容器。 bara概览 bara架构很简单,一个Nginx服务器运行在host上,画图如下: 其背后用到的主要原理就是Nginx的proxy_pass以及map功能,Nginx会根据浏览器设置的自定义header(v)的值,根据map的映射关系,找到合适的upstream代理过去而已。 而bara,就是发挥了Nginx的强大功能,和Docker的灵活轻便,从而能在一台主机上,跑n个版本的应用程序,以方便测试。 bara还有一个概念就是Nginx的配置文件模板,Nginx的配置文件是根据这个模板动态创建的,这个模板如果有{{upstream}}占位符,则会被bara系统自动根据运行中的容器来替换为一个upstream列表。 bara的代码在: https://github.com/liubin/bara。 下面,我们就来看看如何使用。 开始使用 启动前的配置 首先,需要修改config/initializers/docker.rb和 config/initializers/nginx.rb 这两个配置文件,指定如何连接Docker daemon和Nginx的配置文件位置以及nginx可执行程序的位置。 创建Nignx配置文件模板 Nginx配置文件模板是动态创建Nginx配置文件的模板,可以根据情况,准备多个模板。在Nginx服务页面,创建Nginx配置文件的时候,会基于状态为active的模板来创建Nginx的配置文件。 Nginx配置文件模板列表页面: 编辑模板页面: 拉取镜像到该host bara还提供了简单的镜像管理功能:列表,拉取,删除。如果镜像太大,尽量避免在线操作,还是直接在console中使用docker pull来拉取。 这是镜像列表页面: 启动容器 容器列表页面: 启动容器页面: 目前比较简单,只有一个容器名和CMD参数可以填写,默认会以-d和-P的形式启动容器。 生成Nginx配置文件和重启Nginx服务 在Nignx服务页面,可以完成查看当前Nginx配置文件内容,在线修改,以及重启Nginx服务器等。 这是一个Nignx配置文件例子: 设置客户端header 这里我使用了Chrome的插件ModHeader,这个插件,可以根据指定的url规则,设置自定一个header,这里我们添加了v这个header。ModHeader设置页面如下: 如果没有设置header,则Nginx会使用map中default的值作为upstream,目前为取得容器列表后的最后一个容器。 限制 目前bara只是一个原型,有很多不足,可能有人会觉得它 单机 使用-P

Posted in DevOps, Docker, Rails, Tech Tagged with: ,

创建基于Docker的E*K(ElasticSearch、Fluentd、Kibana)日志采集系统

说道日志采集和可视化,有很多方案,而最多的应该莫过于ELK了(ElasticSearch、Logstash和Kibana),而这一套软件,目前也同归于同一项目:https://www.elastic.co/。 不过我日志采集系统我没有使用Logstash,而是采用了Fluentd。 一共有两个Docker镜像,一共是日志采集,即fluentd-agent(https://github.com/liubin/fluentd-agent),另一个是日志存储(es)和可视化(kibanna)es-dashboard(https://github.com/liubin/es-dashboard)。其中fluentd-agent运行于nginx服务器上(也可以自己修改td-agent.conf来改写规则),而es-dashboard由两个应用组成,es和kibana,它们既可以运行在一个容器中,也可以分开运行,具体见后面说明。 1. 在同一容器中运行es和kibana sudo docker run -p 9200:9200 -p 9300:9300 -p 5601:5601 liubin/es-dashboard 2. 或者在两个容器中运行es和kibana 2.1. 启动es sudo docker run -p 9200:9200 -p 9300:9300 liubin/es-dashboard –name es /tmp/start.sh es 2.2. 启动kibana 得到上一个容器的IP地址和es端口后,启动第二个容器 sudo docker run -p 5601:5601 -e

Posted in Docker, Tech

Docker,云时代的程序交付方式

Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engine 的正式发布?Azure入华?还是AWS落地中国?留在每个人大脑中的印象可能各不相同,但要是让笔者来排名的话那么Docker绝对应该算是第一位的。如果你之前听说过它的话,那么也许你会说“没错,就是它”,因为几乎世界各地的开发、运维都在谈论着Docker;如果你还没听说过Docker,那么我真的建议你花上10分钟来阅读本文。 1. Docker简介 1.1. 什么是Docker? Docker是一个重新定义了程序开发测试、交付和部署过程的开放平台。Docker也是容器技术的一种,它运行于Linux宿主机之上,每个运行的容器都是相互隔离的,也被称为轻量级虚拟技术或容器型虚拟技术。而且它有点类似Java的编译一次,到处运行,Docker则可以称为构建一次,在各种平台上运行,包括本地服务器和云主机等(Build once,run anywhere)。 容器就是集装箱,我们的代码都被打包到集装箱里;Docker就是搬运工,帮你把应用运输到世界各地,而且是超高速。 Docker是开源软件,代码托管在GitHub上,使用Go语言编写。Go可以称得上是互联网时代专门为开发分布式、高并发系统而生的编程语言。Docker也可以说是Go语言的一个杀手级应用,而且在Docker生态圈里很多软件也都是使用Go语言编写的。 1.2. Docker历史 Docker项目始于2013年3月,由当时的PaaS服务提供商dotCloud开发,dotClound也是YCombinator S10的毕业生。尽管Docker项目很年轻,到现在也只有15个月而已,然而它的发展势头如此之猛已经让很多人感叹不已了。 2013年10月dotCloud公司名字也由dotCloud, Inc.改为Docker, Inc.,集中更多的精力放到了Docker相关的研发上。 1.3. Docker的技术基石 在进入Docker的世界之前,我们先来看一下Docker实现所依赖的一些技术。 实际上Docker的出现离不开很多Linux kernel提供的功能,甚至可以说Docker在技术上并没有什么特别重大的创新之处,利用的都是已经非常成熟的Linux技术而已,这些技术早在Solaris 10或Linux Kernel 2.6的时候就有了。可以毫不夸张的说Docker就是“站在了巨人的肩膀上”。 下面我们就先来了解一下Docker主要利用的Linux技术。 1.3.1. 容器技术 容器(Container)有时候也被称为操作系统级虚拟化,以区别传统的Hypervisor虚拟技术。它不对硬件进行模拟,只是作为普通进程运行于宿主机的内核之上。 在容器中运行的一般都是一个简易版的Linux系统,有root用户权限、init系统(采用LXC容器的情况下)、进程id、用户id以及网络属性。 容器技术在云计算时代已经被大量使用。Google公司的Joe Beda在今年5月做了一次题为《Containers At Scale

Posted in Docker, Tech

单机版Mesos + Marathon + Deimos + Docker

最近关于Docker的Blog很多都提到了Mesos,确实是在复杂的应用环境下,如何管理集群是一个非常现实的问题。 本文就是参考各种资料,利用Vagrant+VirtualBox构建了一个单机版的Mesos环境。 1. 什么是Mesos? Apache Mesos是一个分布式系统的集群管理软件,它能为我们需要执行的任务在复杂系统中进行资源分配等工作。 Mesos主要由4个模块组成。 进行系统总体管理的Mesos master 为集群提供资源的Mesos slave 进行资源分配、调度(scheduling)的Framework 在Mesos slave上执行具体命令的Executor 关于Mesos的架构,可以参考这里的官方说明。 2. 什么是Marathon? Marathon是Mesos的一个Framework,用来执行需要长时间运行的任务。如果把Mesos比喻成数据中心的Kernel的话,那么Marathon就是它的init活着upstart守护进程。 它还具备HA,Health Checks,服务发现等功能。 3. 什么是Deimos? Deimos是一个Mesos的Docker接口(Plugin),Mesos的Executor,用来集成Docker容器,它是Mesos-Docker的替代产品。 4. 开始试验 4.1. 安装 如果你也用Vagrant的话,那么直接可以使用Provisioning脚本就可以了,我已经放到了GitHub上:https://github.com/liubin0329/mesos-marathon-deimos-vagrant 下载下来之后直接vagrant up就可以。 如果是手工自己安装,可以参考install.sh脚本。 4.2. 测试 启动服务之后,就可以使用例子中的JOB测试了。 为了启动速度,我们预先pull镜像下来。 然后就可以提交Job了。 这个job.json很简单,其意义也很容易理解。主要是cmd这个参数,这是一个简单的理由nc命令实现的Web服务器,放8090端口的时候只是打印出Hello World而已。 值得注意的是如果你的机器硬件不是特别好,需要注意提交job的时候设施合适的CPU和内存使用量,否则很可能导致因为申请不到资源而不能启动任务。 5.

Posted in Docker, Tech

不可变基础设施 – Immutable Infrastructure

本文禁止转载! 3/8号参加了Docker Beijing Meetup,这是一份迟来的总结。 不过这里我倒不想多说Docker的东西,那天我的话题参见这里(http://glide.so/liubin0329/746ff18f318ba1baaf77)。 本文主要想说的是“Immutable Infrastructure”,即“不可变基础设施”这个概念。 这个词汇最初应该是由Chad Fowler提出的,关于Chad Fowler,熟悉Ruby的人都应该知道,是一个热情的Ruby/Rails信者,活跃于各种conferences上,现在也是比较有名的TODO软件公司6Wunderkinder的CTO。 什么是 Immutable Infrastructure? Immutable Infrastructure,直译过来就是不可变基础设施,所谓基础设施,可以认为是我们平常运维中涉及到的所有硬件、软件等的组合。而所谓的不可变,即安装一次,不做修改,用过即扔。有点像一次性产品,或者可以称为即抛型。 按照“The Codeship Workflow: Immutable Infrastructure”给出的定义,不可变基础设施可以定义为如下: Automate the setup and deployment for every part and every layer of your infrastructure. Never change any part of your system

Posted in Docker, Tech Tagged with: , , , , , , ,

【翻译】Docker镜像文件(images)的存储结构

原文作者: Troy Howard(http://blog.thoward37.me/) 原文地址:http://blog.thoward37.me/articles/where-are-docker-images-stored/ 翻译:刘斌(http://liubin.org/) 本文地址:http://liubin.org/2014/03/10/about-docker-images-storage/ ‎ 关于本文的任何指正,请在新浪微博联系我或者在Twitter上。 如果你是刚开始接触 Docker的话,按照官方文档里的例子,很容易入门并且进行一些简单的工作。但是,如果再深入一些,比如要创建自己的Dockerfile的话,你就可能会有点感到困惑了。在众多初学者比较容易迷惑的问题中,这是一个非常普遍的问题: 我的Docker镜像(images)保存在哪里呢? – 每个人  这个问题也着实让我挠头。更糟糕的是,作为一个新手,你的最终目标是将自己笨手笨脚创建的Docker镜像发布到官方的Docker镜像索引上。 快来看看我创建的Docker镜像吧,它非常棒 thoward/i_have_no_idea_what_im_doing. 但这不是我想要做的。 还有更糟糕的事情,在这之前很长的一段时间里,你都没法删除你发布的镜像,你那些让人羞愧尴尬的学习过程将永久性的贴在那里。 幸运的是,现在删除一个自己发布的镜像文件已经变得非常简单了。 所以,在这里我做一下小小的澄清。如果你满足下面的条件的话,那么请放心,你的镜像文件是不可能被发布为公开镜像的: 你还没有在官方的public index注册账号。 你没有通过 docker login 命令登录。 你没有运行 docker push 命令将自己的镜像发布到public index上。 术语(用语、关键概念) Docker所使用的术语,也是其致使用户产生困惑的原因。比如Docker可能会使用overlap,或者含义模糊,或者被错误使用的用语,也可能使用有悖于人们常识认识的用语。 所以,在这里我们先对一些术语做一下解释。 镜像(Image) vs Dockerfile  这组概念很少会让人产生疑惑,但是这两者的区别非常重要。Docker在镜像(image)中运行你的代码,而不是Dockerfile。Dockerfile是通过docker build命令来编译镜像的配置文件。 如果你去浏览一下public index的话,你将会看到那里罗列了很多镜像文件。但是,也许有些奇怪的是,你将看不到任何编译出它们的dockerfile。镜像文件就是从Dockerfile编译而得到的不透明资产(opaque asset )。 当你用docker push命令发布自己的镜像的时候,你发布的不是任何你的代码,而是由你的代码编译出来的镜像文件。 注册表(Registry) vs 索引(Index) 注册表(镜像注册表,registry)和索引(镜像索引,index)这两个概念,以及它们的区别也很特殊。 一个索引(index)用来管理用户账号,权限,搜索,打标签(tagging),以及其它可以方便的通过Web界面来完成的工作。

Posted in Docker Tagged with: , , , , , ,

【翻译】DockerUI:Go编写的Web版Docker管理工具

原作者:cpw(http://cpw.hatenadiary.jp/about ) 原文:http://cpw.hatenadiary.jp/entry/2013/08/29/225457 翻译:刘斌(http://liubin.org) Docker的架构非常优秀,很简单的就可以创建可执行的容器。但是目前的很多操作都是基于CUI的,我在想要不要用Node.js做一个GUI的工具出来呢? Node.js非常有意思,想用它来做点东西。我在调查Docker的时候,发现了DockerUI(https://github.com/crosbymichael/dockerui)这个软件,这不正是我想做的么?本来还想通过做个小东西来学学Node.js呢。。。。先把Node.js放一边,试试DockerUI吧。 安装 DockerUI主页里有安装说明,最简单的方法是直接使用官方制作好的Docker镜像。 $ sudo docker pull crosbymichael/dockerui 由于DockerUI使用了Docker的Remote API,所以也需要做这方面的设置。像下面那样修改/etc/init/dockerd.conf文件,在启动docker守护进程的时候加上-H参数和-api -enable-cors参数。 description “Docker daemon” start on filesystem or runlevel [2345] stop on runlevel [!2345] respawn exec /usr/local/bin/docker -d -H=”unix://var/run/docker.sock” -H=”tcp://172.16.35.134:4243″ -api-enable-cors 修改配置文件后需要重启一下dockerd服务。 $ sudo stop dockerd $

Posted in Docker, go, Tech Tagged with: ,

无觅相关文章插件,快速提升流量