自己动手写Docker
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第1章 容器与开发语言

1.1 Docker

最近一段时间,云计算领域最火的莫过于“容器”一词。提到容器,就不得不提Docker,可以说Docker已经成为了容器的代名词。那么,什么是Docker?Docker又能做什么呢?本章我们就来简单介绍一下Docker。

1.1.1 简介

Docker 是一个开源工具,它可以将你的应用打包成一个标准格式的镜像,并且以容器的方式运行。Docker 容器将一系列软件包装在一个完整的文件系统中,这个文件系统包含应用程序运行所需要的一切:代码、运行时工具、系统工具、系统依赖,几乎有任何可以安装在服务器上的东西。这些策略保证了容器内应用程序运行环境的稳定性,不会被容器外的系统环境所影响。

图1.1是一个容器镜像的结构图。从中可以看到,镜像可以把系统级依赖都打包成一个文件,所有的容器会共享一个Kernel,因此在同一个Kernel下可以运行各种Linux发行版的容器。

图1.1

Docker容器具有以下3个特点。

轻量级:在同一台宿主机上的容器共享系统Kernel,这使得它们可以迅速启动而且占用内存极少。镜像是以分层文件系统构造的,这可以让它们共享相同的文件,使得磁盘使用率和镜像下载速度得到提高。

开放:Docker 容器基于开放标准,这使得Docker 容器可以运行在主流Linux 发行版和Windows操作系统上。

安全:容器将各个应用程序隔离开来,这给所有的应用程序提供了一层额外的安全防护。

1.1.2 容器和虚拟机比较

容器和虚拟机同样有着资源隔离和分配的优点,但是由于其架构的不同,容器比虚拟机更加便携和高效。

虚拟机包含用户的程序,必要的函数库和整个客户操作系统,所有的这些差不多需要占用好几个GB的空间。图1.2为虚拟机的架构图。

图1.2

容器包含用户的程序和所有的依赖,但是容器之间是共享Kernel的。各个容器在宿主机上互相隔离,并且在用户态下运行。Docker 容器不和任何基础设施绑定,它可以运行在任何电脑、IDC和云上。图1.3为Docker容器的架构图。

图1.3

1.1.3 容器加速开发效率

Docker 容器可以帮助开发者跳过设置冗杂的开发环境,专注于开发软件的新功能,具体有如下3项。

加速开发:再也不用等待数小时设置开发环境,可以很方便地使生产环境的代码在本地跑起来。

赋能创造力:Docker容器的隔离特性可以让开发者摆脱限制。开发者可以为自己的应用选择最好的语言和工具,再也不用担心产生内部工具的冲突。

消除环境不一致:将应用程序的配置和所有依赖打包成一个镜像在容器中,可以保证应用在任何环境中都可以按照预期来运行,再也不用担心不得不在不同环境中安装相同软件和配置的问题。

1.1.4 利用容器合作开发

Docker 镜像可以存储到Docker Hub中,团队成员可以通过Docker Store、Docker Hub管理分享镜像。所有的变化和历史都可以在整个组织间查看。

而且,你可以很简单地分享你的容器,不需要担心环境依赖产生的不一致问题,其他团队也可以很简单地引用你的容器,而不需要去关心它是如何工作的。

1.1.5 利用容器快速扩容

Docker 允许动态地改变应用程序,可以通过扩容快速提高应用程序的能力并及时修复缺陷。Docker容器可以秒级启动和停止,因此,它可以在需要的时候快速扩容出大量的应用程序,扛住并发的压力。

1.1.6 安装使用Docker

Docker就是一个这样的工具。它可以帮助开发者很方便地去构建、部署、运行自己的程序,还可以让你非常迅速地测试你的项目并将其部署到生产环境中。

首先,你需要在自己的机器上安装Docker,这里以在Ubuntu 14.04系统上安装Docker为例。

curl-sSL https://get.docker.com|sh

运行以上命令,一段美妙的小脚本就这样被安装到了你的机器上,它完成了安装Docker需要的所有内容。下面,就开始使用它吧。以安装一个WordPress为例,看看Docker是如何快速安装一个WordPress的。以前安装WordPress,可能需要去了解PHP、MySQL,还有服务器的系统,最后才去安装WordPress,非常麻烦。但是,如果换一种方式,使用Docker来安装呢?

docker run-d-p 80:80--name wordpress wordpress

运行以上命令,Docker会自动从Docker Hub中拉取WordPress镜像,这个镜像是已经被build好的,包含了PHP、MySQL和WordPress。你所做的工作就是等待Docker帮你把这个服务启动起来以后,在浏览器上访问你的服务器IP,就可以看到WordPress的安装页面,然后一步步点击页面按钮完成安装即可。对于MySQL密码,可以使用如下命令获取。

echo $(docker logs wordpress|grep password)

上面这条命令就可以获得MySQL密码,将其填写到网页中,就得到了一个可以运行的WordPress,然后开始愉快地使用它吧。

是不是感受到了Docker的威力?其实这只是Docker强大功能的冰山一角。快速部署是Docker其中的一个特性。你不需要登录到服务器,将运行环境一个一个地安装好,最后再部署自己的代码。Docker像集装箱一样,帮助你打包好了一切,你只需要开箱使用即可。就像刚才的例子,还可以非常简单地再次运行刚才的命令,只需要换一下映射的端口,就可以再启动一个WordPress,这是安装原生应用所不敢想象的。