使用Docker打造自己的开发环境
作为这个时代的程序员真的很幸福,每天不但有一些改变世界的产品出现,而且提高程序员开发效率的工具也是层出不穷。之前介绍过如何使用Vagrant来创建Ceph环境,使用Vagrant可以很方便的管理我们的虚拟机,同时来定制开发团队的开发环境,现在又出现了Docker,让我们有了一个更好的选择。
Docker介绍
之前有幸参加了OSChina在成都举办的源创会,听到了Docker中国社区创始人马全一老师介绍Docker,他们团队在去年就开始研究Docker,但不知道为什么Docker今年开始火了起来,原因可能是Docker今年搞了一次宣传会,IT界各种大佬公司都去捧场了,有Google,RedHat等,然后媒体争相报道,于是Docker就火了。
Docker的介绍也是不断在变,以前官方的Docker的概括是这样的:
An open source project to pack, ship and run any application as a lightweight container.
现在是这样的:
An open platform for distributed applications for developers and sysadmins.
但不管怎样,Docker是一个很好的东西,可以让我们快速创建自己的开发环境,真正做到Build once, Run anywhere
。
Docker命令介绍
如果有过Vagrant使用经验的话,Docker使用起来非常简单,无非就是把Vagrant的box换成image,把Vagrant的VM换成container就可以了。如果没有Vagrant使用经验也没有关系,试试Docker的TryIt,里面有一个教程可以让你快速掌握Docker的一些基本命令。
比较常用的Docker命令:
- docker version: 查看Docker版本。
- docker pull [image name]: 下载一个docker的镜像,类似git拉代码的命令,不过这个是拉docker镜像。
- docker images: 列出所有的镜像。
- docker run [image name] [command]: 运行一个镜像的某个命令,这样会产生一个container。
- docker ps: 列出container。
- docker start [container name]: 启动一个container。
- docker stop [container name]: 停止一个container。
- docker rm [container name]: 删除一个container。
- docker rmi [image name]: 删除一个image镜像。
Docker镜像
在Docker官网上可以看到已经有很多做好的镜像,比如Ubuntu,CentOS,MySql等,而且每天都有一些新的镜像不断在上传,因为上传一个镜像就像github上传代码一样简单。
但是Docker在下载镜像的时候会发现速度很慢,有时候甚至连不上,这时候需要翻墙(可以看看我之前的文章,让路由飞越长城(一),让路由飞越长城(二)),或者找一下国内的镜像(可以看下这里),虽然国内的镜像没有Docker官网的那么全,但基本的镜像还是有的。
Docker & Vagrant
在没有Docker之前,我使用Vagrant来创建自己的开发环境,Docker和Vagrant都有一个很好的特点,就是通过虚拟化环境来创建开发环境,这样的好处是不会影响本机的环境配置。
试想一下,如果在你需要安装Mysql,Ruby,Apache等服务,在本机上就需要做各种配置,像修改环境变量等,遇到版本升级还需要删除本地配置,然后再更新,久而久之本地环境就会被”污染”了,这时候想安装其他服务可能就会报各种莫名其妙的错误。
如果我们有虚拟化环境就不会存在这种问题了,在虚拟环境安装各种服务,不需要的话销毁环境重新创建一个即可,简单又方便。
在Docker推出之后,网上就有各种比较Docker和Vagrant的文章,可以看看StackOverFlow上面的这篇文章,连Docker的作者也来回答这个问题。
其实Docker和Vagrant不一定是竞争的关系,也可以是相辅相成的关系,比如在本地安装Docker,还是需要修改一些本地的配置,以后遇到版本升级还是会遇到修改配置的问题,如果是下载一个Docker的Vagrant box(已经有人制作了一个,见这里),再使用VM安装其他docker镜像就不会有这种问题了。
在网上有人做过Docker的性能评估,分别对比了原生OS,OS安装Docker,OS系统安装虚拟机,虚拟机安装Docker这4种情况的性能情况,最后的结论是在虚拟机上运行Docker性能比较差,建议如果是生产环境还是使用原生的Docker比较好,性能比较文章请见这里。
Steve Wozniak is not boring
在研究Docker的过程中,发现如果创建contrainer的时候不指定containrer名称的话,系统会自动帮你创建名称,而名称是随机生成的。名称随机有2部分组成,左半部分是形容词,右半部分是人名,是一些影响计算机发展的IT名人,在源码中可以看到这些名字的说明。
有趣的是,当名字随机到boring_wozniak
的时候,程序会跳过生成这个名字,而继续生成下个随机名字,旁边有段注释是Steve Wozniak is not boring
,相当好玩。