菜鸟入门Docker—认识Docker

Posted 杨友山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了菜鸟入门Docker—认识Docker相关的知识,希望对你有一定的参考价值。

你好!Docker。欢迎来到Docker。

Docker是GitHub上最活跃的项目之一,大受开源爱好者追捧,号称要成为所有云应用的基础。各大公司的IT从业人员正在如火如荼的进行应用容器化改造。

那么Docker到底是什么?是干嘛的?且听博主一一道来。

一、Docker是什么

介绍前先给大家普及一下云计算中的几个概念:IaaS、PaaS和SaaS。

基础结构即服务 (IaaS)

基础结构即服务是最灵活的云服务类别。 它旨在完全控制运行应用程序的硬件(IT 基础结构服务器和虚拟机 (VM)、存储、网络和操作系统)。 使用 IaaS 时,你是租用硬件,而不是购买硬件。 它是即时计算基础结构,可通过 Internet 进行预配和管理。

平台即服务 (PaaS)

PaaS 为生成、测试和部署软件应用程序提供一个环境。 PaaS 旨在帮助快速创建应用程序,而无需管理底层基础结构。 例如,使用 PaaS 部署 Web 应用程序时,无需安装操作系统、Web 服务器甚或系统更新。

PaaS 是云中的完整开发和部署环境,其资源使组织能够提供从简单的基于云的应用到复杂的支持云的企业应用程序的所有内容。 资源是按照“即用即付”的方式从云服务提供商处购买的,并通过安全的 Internet 连接进行访问。

服务型软件 (SaaS)

SaaS 是面向最终客户的集中托管和管理软件。 它通常基于这样的架构,其中同一版本的应用程序用于所有客户,并通过月度或年度订阅获得许可。

1.1、Docker的由来

好了回到正题。

Docker是dotCloud公司开源的一款产品。dotCloud公司是主要基于PaaS平台为开发者提供服务的。Docker没火之前这个公司是一家很普通的公司。在2013年的时候,dotCloud的CEO把内部使用的Container容器技术单独拿出来开源,于是就有了2013年3月发布的Docker的V1.0版本,并且此后每月一更新。

  于是Docker很快受到开发者的关注,并且表现出浓厚的兴趣,开始加入到Docker社区参与开发。紧接着,Google、IBM、RedHat、Rackspace等公司都表示支持并加入Docker阵营。

到目前Docker还GitHub上的云平台领域关注度排名第一,远超过也很火的Openstack。

1.2、Docker的结构

从软件的角度来看,Docker是一个Golang开发的开源程序,源代码托管在:

https://github.com/docker/docker上。采用C/S架构,主要包含Docker Server和Docker Client。

  从使用场景来看,Docker主要由两部分组成:Docker仓库和Docker自身程序。

  Docker仓库,官方仓库地址:https://hub.docker.com/,上面有很多应用,有大公司打包的应用,还有很多个人开发者上传的应用。如下图,

 

  Docker自身程序,Docker是一个单机版程序,运行在Linux操作系统上(也可运行在Windows和Mac上,但目前主流还是运行在Linux系统),是用户态程序,通过接口与内核交互。前面讲到,Docker是C/S架构,Docker Daemon(Docker守护程序)作为Server端,以后台守护进程方式运行。Docker Client可以在本地通过bin命令发送指令,也可以在远端通过RESTful API形式发送指令,Server端接收到指令,然后执行一系列任务。

1.3、Docker使用流程

第一步,要在Linux上安装Docker软件包,启动Docker守护进程;

第二步,通过Docker Client发送指令;

第三步,Server端Docker守护进程接受指令并执行;

第四步,Server端返回结果给客户端。

如果我们要运行一个Docker应用DockerApp9527,DockerApp9527是一个已经开发好的,并上传到官方仓库中的一个应用。过程如下图。

 

1)、Docker Client向Daemon发送启动App9527的指令

2)、服务器上并没有安装此应用,Docker Daemon发请求给Docker官方仓库,搜索App9527

3)、找到这个应用,下载到服务器上

4)、Docker Daemon启动这个应用

5)、启动结果返回给客户端

二、Docker化应用的形式

Linux下的软件非常多,同时部署方式也各不相同。有些依赖特定Linux版本,有些依赖第三方软件和共享库。

如何解决这些问题,一种方式是,将软件和依赖的环境,依赖配置文件都打包在一起,以虚拟机的形式放到官方仓库。这样,其他人就下载后直接以虚拟机的形式运行。如图

这种部署方式,由于带上了依赖的操作系统和其他项,这个应用可能有几个G。

Docker解决了这个问题。Docker引入了分层的概念。把一个应用分为任意多个层,例如,操作系统是第一层,依赖的库和第三方软件是第二层,应用的软件包和配置是第三层。如果两个层相同,就共享这些层。

上面的应用A和B操作系统层是一样的,那么就可以共享这些层,安装应用A时下载了操作系统层。安装B时就不用下载操作系统层了,如下图

 

这时带来另一个问题,如果应用A需要修改操作系统的某个配置,而B不需要修改。

Docker规定层次有优先级,上层和下层有相同的文件和配置时,上层覆盖下层,数据以上层为准。而且给了每个应用一个优先级很高的空白上层。如果需要修改下层文件,把文件拷贝到这个优先级最高的空白层,下层文件不做改变。因此,在A看来配置修改成功,而B来看操作系统没有修改。如图

然而事情还没结束,前面说到这个应用是以虚拟机的形式运行的,主流虚拟机有:KVM,Xen,VMWare,VirtualBox等,虚拟机其实还比较重,不光占用大量资源,而且启动也很慢。

以OpenVZ,VServer,LXC为代表的容器类虚拟机,是一种内核虚拟化技术,与宿主机运行在相同的Linux内核,不需要指令级模拟,性能消耗小,是轻量级的虚拟化容器。Docker使用了LXC让虚拟机变得轻量化。

 

在Docker官方仓库里,只需它有完整的文件系统和程序包,没有动态生成新文件需求;当把这个应用下载到宿主机上运行对外提供服务时,有可能修改文件,这时使用空白层。Docker把这两种状态分别做了定义:镜像(image)和容器(container),如图

 

在官方仓库中的应用都是镜像形式,把镜像从Docker仓库下拉到本地,以这个镜像为模板启动应用,叫容器。

 镜像和容器是Docker中两个重要概念。

至此,我们了解了Docker的由来,为了解决Linux上软件安装问题逐步演化而来,了解了Docker的分层原因,最后知道了什么是镜像和容器。

以上是关于菜鸟入门Docker—认识Docker的主要内容,如果未能解决你的问题,请参考以下文章

大白话Docker入门

docker使用入门

容器:docker,k8s与云原生入门介绍

Docker入门(包含Docker常用命令)

宋宝华:Docker 最初的2小时(Docker从入门到入门)

宋宝华:Docker 最初的2小时(Docker从入门到入门)