所在的位置: php >> php资源 >> Docker应用容器引擎

Docker应用容器引擎

北京专门治疗白癜风的医院 https://jbk.39.net/yiyuanzaixian/bjzkbdfyy/bdf/

Docker应用容器引擎

li_zliang·济南

一、关于Docker理论

1.1容器和虚拟机

我们在理解docker之前,首先我们得先区分清楚两个概念,容器和虚拟机。

虚拟机:

我们用的传统虚拟机如VMware,VisualBox之类的需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用。每一台虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。

容器:

容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。

容器技术是实现操作系统虚拟化的一种途径,可以让您在资源受到隔离的进程中运行应用程序及其依赖关系。通过使用容器,我们可以轻松打包应用程序的代码、配置和依赖关系,将其变成容易使用的构建块,从而实现环境一致性、运营效率、开发人员生产力和版本控制等诸多目标。容器可以帮助保证应用程序快速、可靠、一致地部署,其间不受部署环境的影响。容器还赋予我们对资源更多的精细化控制能力,让我们的基础设施效率更高。

1.2什么是docker

Docker属于Linux容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的Linux容器解决方案。

Docker将应用程序与该程序的依赖,打包在一个文件系统里面。运行这个文件系统,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了Docker,就不用担心环境问题。

总体来说,Docker的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

1.3Docker的基本概念

从上图我们可以看到,Docker中包括三个基本的概念:

Image(镜像)

Container(容器)

Repository(仓库)

镜像是Docker运行容器的前提,仓库是存放镜像的场所,可见镜像更是Docker的核心。

1.3.1Image(镜像)

Docker镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

1.3.2Container(容器)

容器(container)的定义和镜像(image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

由于容器的定义并没有提及是否要运行容器,所以实际上,容器=镜像+读写层。

1.3.3Repository(仓库)

Docker仓库是集中存放镜像文件的场所。镜像构建完成后,可以很容易的在当前宿主上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,DockerRegistry(仓库注册服务器)就是这样的服务。

仓库又可以分为两种形式:

public(公有仓库)

private(私有仓库)

DockerRegistry公有仓库是开放给用户使用、允许用户管理镜像的Registry服务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。

除了使用公开服务外,用户还可以在本地搭建私有DockerRegistry。Docker官方提供了DockerRegistry镜像,可以直接使用做为私有Registry服务。当用户创建了自己的镜像之后就可以使用push命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上pull下来就可以了。

1.3.4镜像标签(tag)

为区分一个仓库中的不同镜像(不同镜像版本),DockerHub引入标签。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过仓库名:标签的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以latest作为默认标签.。

为了方便镜像的查找,同一个镜像可以存在不同的标签。如ubuntu:latest与ubuntu:16.04可能具有相同的镜像ID,镜像ID才是镜像的唯一标识。

1.4Docker的架构

Docker使用C/S结构,即客户端/服务器体系结构。Docker客户端与Docker服务器进行交互,Docker服务端负责构建、运行和分发Docker镜像。Docker客户端和服务端可以运行在一台机器上,也可以通过RESTful、stock或网络接口与远程Docker服务端进行通信。

这张图展示了Docker客户端、服务端和Docker仓库(即DockerHub和DockerCloud),默认情况下Docker会在Docker中央仓库寻找镜像文件,这种利用仓库管理镜像的设计理念类似于Git,当然这个仓库是可以通过修改配置来指定的,甚至我们可以创建我们自己的私有仓库。

Docker的核心组件包括:

DockerClient

Dockerdaemon

DockerImage

DockerRegistry

DockerContainer

1.4.1DockerClient

DockerClient,也称Docker客户端。它其实就是Docker提供命令行界面(CLI)工具,是许多Docker用户与Docker进行交互的主要方式。客户端可以构建,运行和停止应用程序,还可以远程与Docker_Host进行交互。最常用的Docker客户端就是docker命令,我们可以通过docker命令很方便地在host上构建和运行docker容器。

1.4.2Dockerdaemon

Dockerdaemon是服务器组件,以Linux后台服务的方式运行,是Docker最核心的后台进程,我们也把它称为守护进程。它负责响应来自DockerClient的请求,然后将这些请求翻译成系统调用完成容器管理操作。该进程会在后台启动一个APIServer,负责接收由DockerClient发送的请求,接收到的请求将通过Dockerdaemon内部的一个路由分发调度,由具体的函数来执行请求。

dockerdaemon包含以下三部分:

DockerServer

Engine

Job

DockerDaemon可以认为是通过DockerServer模块接受DockerClient的请求,并在Engine中处理请求,然后根据请求类型,创建出指定的Job并运行。DockerDaemon运行在Dockerhost上,负责创建、运行、监控容器,构建、存储镜像。

1.4.3DockerImage

Docker镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。我们可将Docker镜像看成只读模板,通过它可以创建Docker容器。

镜像有多种生成方法:

从无到有开始创建镜像

下载并使用别人创建好的现成的镜像

在现有镜像上创建新的镜像

我们可以将镜像的内容和创建步骤描述在一个文本文件中,这个文件被称作Dockerfile,通过执行dockerbuilddocker-file命令可以构建出Docker镜像。

1.4.4DockerRegistry

Dockerregistry是存储dockerimage的仓库,它在docker生态环境中的位置如下图所示:

运行dockerpush、dockerpull、dockersearch时,实际上是通过dockerdaemon与dockerregistry通信。

1.4.5DockerContainer

Docker容器就是Docker镜像的运行实例,是真正运行项目程序、消耗系统资源、提供服务的地方。DockerContainer提供了系统硬件环境,我们可以使用DockerImages这些制作好的系统盘,再加上我们所编写好的项目代码,run一下就可以提供服务啦。

1.4.6Docker组件是如何协作运行容器

看到这里,我相信各位读者朋友们应该已经对Docker基础架构已经熟悉的差不多了,我们还记得运行的第一个容器吗?现在我们再通过hello-world这个例子来体会一下Docker各个组件是如何协作的。

容器启动过程如下:

Docker客户端执行dockerrun命令

Dockerdaemon发现本地没有hello-world镜像

daemon从DockerHub下载镜像

下载完成,镜像hello-world被保存到本地

Dockerdaemon启动容器

具体过程可以看如下这幅演示图:

我们可以通过dockerimages可以查看到hello-world已经下载到本地

我们可以通过dockerps或者dockercontainerls显示正在运行的容器,我们可以看到,hello-world在输出提示信息以后就会停止运行,容器自动终止,所以我们在查看的时候没有发现有容器在运行。

我们把Docker容器的工作流程剖析的十分清楚了,我们大体可以知道Docker组件协作运行容器可以分为以下几个过程:

Docker客户端执行dockerrun命令

Dockerdaemon发现本地没有我们需要的镜像

daemon从DockerHub下载镜像

下载完成后,镜像被保存到本地

Dockerdaemon启动容器

二、docker安装(在线安装)

docker版本

Docker分为CE和EE两大版本。CE即社区版(免费,支持周期7个月),EE即企业版,强调安全,付费使用,支持周期24个月。

DockerCE的安装请参考官方文档:

MacOS:


转载请注明:http://www.aierlanlan.com/rzgz/7864.html