前言
云计算、大数据,移动技术的快速发展,加之企业业务需求的不断变化,导致企业架构要随时更改以适合业务需求,跟上技术更新的步伐。毫无疑问,这些重担都将压在企业开发人员身上;团队之间如何高效协调,快速交付产品,快速部署应用,以及满足企业业务需求,是开发人员亟需解决的问题。Docker技术恰好可以帮助开发人员解决这些问题。
什么是Docker
Docker的英文本意是“搬运工”,在程序员的世界里,Docker搬运的是集装箱(Container),集装箱里装的是任意类型的App,开发者通过Docker可以将App变成一种标准化的、可移植的、自管理的组件,可以在任何主流系统中开发、调试和运行。最重要的是,它不依赖于任何语言、框架或系统。可以说Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
Docker通常用于如下场景:1.web应用的自动化打包和发布;2、自动化测试和持续集成、发布;3、在服务型环境中部署和调整数据库或其他的后台应用;4、从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
为什么使用Docker
那么应用容器长什么样子呢,一个做好的应用容器长得就好像一个装好了一组特定应用的虚拟机一样。比如我现在想用MySQL那我就找个装好MySQL的容器,运行起来,那么我就可以使用 MySQL了。
那么我直接装个 MySQL不就好了,何必还需要这个容器这么诡异的概念?话是这么说,可是你要真装MySQL的话可能要再装一堆依赖库,根据你的操作系统平台和版本进行设置,有时候还要从源代码编译报出一堆莫名其妙的错误,可不是这么好装。而且万一你机器挂了,所有的东西都要重新来,可能还要把配置在重新弄一遍。但是有了容器,你就相当于有了一个可以运行起来的虚拟机,只要你能运行容器,MySQL的配置就全省了。而且一旦你想换台机器,直接把这个容器端起来,再放到另一个机器就好了。硬件,操作系统,运行环境什么的都不需要考虑了。
在公司中的一个很大的用途就是可以保证线下的开发环境、测试环境和线上的生产环境一致。当年在 Baidu 经常碰到这样的事情,开发把东西做好了给测试去测,一般会给一坨代码和一个介绍上线步骤的上线单。结果代码在测试机跑不起来,开发就跑来跑去看问题,一会儿啊这个配置文件忘了提交了,一会儿啊这个上线命令写错了。找到了一个 bug 提上去,开发一看,啊我怎么又忘了把这个命令写在上线单上了。类似的事情在上线的时候还会发生,变成啊你这个软件的版本和我机器上的不一样……在 Amazon 的时候,由于一个开发直接担任上述三个职位,而且有一套自动化部署的机制所以问题会少一点,但是上线的时候大家还是胆战心惊。
若果利用容器的话,那么开发直接在容器里开发,提测的时候把整个容器给测试,测好了把改动改在容器里再上线就好了。通过容器,整个开发、测试和生产环境可以保持高度的一致。
Docker在ubuntu下安装
Docker 支持多种平台下的安装运行,现在我们选取结合度最高的ubuntu来说明安装过程。
首先需要明确Docker支持的ubuntu版本:
Ubuntu Trusty 14.04 (LTS) (64-bit)
Ubuntu Precise 12.04 (LTS) (64-bit)
Ubuntu Raring 13.04 and Saucy 13.10 (64 bit)
目前Docker仅支持以上三种ubuntu版本。请大家在安装时,确认ubuntu版本。
如果你准备启用UFW的话,请参考以下额外步骤:
Docker使用桥接技术来管理各容器的网络访问。但是Ubuntu默认是关闭对外网络访问的,所以在安装之前你需要启用防火墙的网络访问功能。
$ sudo nano /etc/default/ufw
# Change:
# DEFAULT_FORWARD_POLICY="DROP"
# to
DEFAULT_FORWARD_POLICY="ACCEPT"
修改完成后,我们需要重新加载UFW。
$ sudo ufw reload
UFW默认存在一套网络访问规则,如果你需要其他服务器可以访问到你的虚拟容器,那么就需要修改一下UFW的访问规则(Docker默认端口是2375,所以需要UFW允许2375的数据访问)。
$ sudo ufw allow 2375/tcp
(因为Ubuntu的安装过程类似,我们只以一个版本的安装为例)
Ubuntu Trusty 14.04 (LTS) (64-bit)
Ubuntu Trusty使用的是3.13.0的Linux内核,在安装Docker时需要安装docker.io,安装过程中所需要的各种依赖包都可以在Ubunut官方资料库中找到。
Ubuntu (或者Debian)因为历史原因,内置了一个叫做docker的KDE3/GNOME2安装包,所以我们需要安装和执行的docker应用名称都改为docker.io
Installation
执行以下命令,就可以安装docker的最新版本(至少在译者翻译时为最新版本╮(╯▽╰)╭)
$ sudo apt-get update
$ sudo apt-get install docker.io
$ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
$ sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io
OK了,执行完以上命令后,Docker在Ubuntu上面就安装好了。当然过一段时间后,你安装的版本就不会是最新版本了。这种情况下你可以安装以下的方式进行Docker升级。
1、确认/usr/lib/apt/methods/https是否存在,如果不存在,那么先安装apt-transport-https( apt-get install apt-transport-https )。
2、将Docker官方资料库的访问Key添加到你本地系统。
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
3、上面一步执行成功后,就开始安装Lxc-docker包。
$ sudo sh -c "echo deb https://get.docker.io/ubuntu docker main\
> /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update
$ sudo apt-get install lxc-docker
4、如果你感觉以上三步很麻烦,那么就执行下面的这一句吧(前提是CURL已经安装好了)。
$ curl -sSL https://get.docker.io/ubuntu/ | sudo sh
讲过以上几步,你就安装最新版本的docker了。最后就是开始执行docker吧
$ sudo docker run -i -t ubuntu /bin/bash
Docker未来发展
任何一项新技术的出现,都需要一个发展过程,比如云计算为企业所接受用了将近五年左右时间,OpenStack技术也经历了两、三年才受到人们的认可。因此,虽然Docker技术发展很快,但技术还不够成熟,对存储的灵活的支持、网络的开销和兼容性方面还存在限制,这是Docker没有被企业大范围使用的一个主要原因。另外一个原因是企业文化是否与DevOps运动一致,只有企业支持DevOps,才能更大地发挥Docker的价值。最后一个原因就是安全性问题,Docker对于Linux这一层的安全的隔离还有待改进,才能进一步得到企业的认可。惠普刘艳凯认为,这也是Docker需要在下一步中改进的一方面。
相关资料
Docker,从这里做起
5分钟弄懂Docker!
Docker学习总结之docker安装 - vikings`s blog
docker中文网