Docker之二三事

要说最近比较热门的东西,当属颠覆整个汽车行业的特斯拉了。不过今天要介绍的是一个跟特斯拉一样在网上很火的东东,叫做Docker。前段时间一直比较忙,其实关注到Docker也有一些时间了。最近两天看了Docker的各种教程和资料,并亲自动手尝试了一下,感觉Docker之所以火,确实有它的优势和原因。

什么是Docker

简单的说,Docker基于LXC(Linux Container)并在此基础上进行了优化,让其使用更加容易和方便。Docker比较类似于虚拟机(Virtual Machine)的概念,但是比虚拟机轻量级得多,你可以简单的认为它是你的应用程序运行时的一个容器。另外,你也可以把它假想为一个“沙盒”(Sandbox),这样的沙盒,在Docker里面被称为容器(Container)。在一台机器上你可以运行多个容器,这些容器是相互隔离,互不影响的。

Docker的优势

相比虚拟机技术,Docker更加轻量级,并且在运行时的开销也比虚拟机小得多。在创建虚拟机的时候,你需要为虚拟机单独分配需要独占的内存和磁盘资源,Docker里面并不需要这么做。

我们可以想象一下我们平时配置和部署服务器环境的需求,假如我们的网站是基于Wordpress构建的,这意味着我们需要在服务器上安装PHP,MySQL,Apache或者Nginx各种所需的环境,等待环境搭建好之后,再去真正的部署和安装Wordpress,每次折腾服务器环境将花掉不少的时间开销。更加悲剧的是,假如有一天我们的服务器到期了,需要换到另外一家服务商提供的新服务器,于是,我们不得不备份和导出数据,然后再去新的服务器上,重新把PHP,MySQL,Web服务器,Wordpress重新倒腾一番,再导入数据,完成服务器的迁移。想必对于运维的同学,这样的事情几乎经常发生。

现在有了Docker,这样的悲剧可以终止了。你可以想象,假如你的应用部署在一个Container里面,这个容器包含了Wordpress运行时所需要的所有环境,包括数据和文件以及运行时的系统环境。迁移服务器,不过就是把这个Container放到新服务器运行罢了。这样的迁移将省掉大部分的时间花销。通过Docker的push和pull操作,迁移变得相当简单。

简单总结一下Docker的优点:

  • 运行时所需的资源比虚拟机少,而效率又比虚拟机高
  • 提供隔离的执行环境,每个运行的容器互不影响
  • 容器运行时可以提供交互式的shell,登录到容器中操作的感觉跟你用SSH登录到一个服务器上操作没有区别。
  • 官方提供丰富的image资源,包括各种版本Linux的base image,用户可以方便的在此基础上构建自己的容器运行。
  • 采用跟Git类似的设计理念,用户可以通过commit从自己的容器中生成自己的image。
  • 引入社交化功能,用户随时可以通过pull和push命令,取用别人创建的image,以及上传分享自己的image。
  • 支持Dockerfile部署机制,用户可以通过脚本的方式实现自定义和自动化部署,非常具有灵活性。

如何学习Docker

经过这两天的使用,感觉Docker是非常容易上手的,尤其是你之前学过Git并理解commit/push/pull的含义的话…… Docker的官方已经有非常详细的文档。

入门

强烈建议过一遍官方提供的这个交互式的学习教程,只有不到十步,你就可以大致了解docker的用法了:https://www.docker.io/gettingstarted/

进阶

通过入门教程,相比你已经懂得如何从image创建和运行属于自己的容器,并将它上传和分享到Docker的Repository里面,接下来就该学习如何写Dockerfile来实现自动化部署的需求。你需要再过一遍Dockerfile的教程:https://www.docker.io/learn/dockerfile/

学完教程,应该能熟练的用docker了。哥也折腾出了基于golang的img: https://index.docker.io/u/timothyye/golang/,以后要在各个服务器上部署golang运行环境就方便多了,直接pull这个image就行了。另外,Dockerfile也折腾出了一个,这个golang的image就是用这个dockerfile生成的:https://github.com/TimothyYe/docker-golang,供大家参考。

支持原创技术分享,据说打赏我的人,都找到了女朋友!