458软件下载:绿色安全的手机App下载平台
所在位置:首页 > 新闻资讯 > 开源应用容器引擎Docke基本概念分析,Docke的优势是什么?

开源应用容器引擎Docke基本概念分析,Docke的优势是什么?

发布时间:2023-02-20 22:29来源:458软件下载

  在计算机技术日新月异的今天,Docker在国内发展的如火如荼,特别是在一线互联网公司,Docker的使用是十分普遍的,在理解docker之前,我们先熟悉两个概念,容器和虚拟机。

  一、容器与虚拟机

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

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

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

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

  Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离,相当于在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。

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

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

  二、Docker的优势

  1、Docker启动快速,属于秒级别。虚拟机通常需要几分钟去启动。

  2、Docker需要的资源更少,Docker在操作系统级别进行虚拟化,Docker容器和内核交互,几乎没有性能损耗,性能优于通过?Hypervisor层与内核层的虚拟化

  3、Docker更轻量,Docker的架构可以共用一个内核与共享应用程序库,所占内存极小。同样的硬件环境,Docker运行的镜像数远低于虚拟机数量,对系统的利用率非常高

  4、安全性,?Docker?的安全性也更弱。Docker?的租户root和宿主机root等同,一旦容器内的用户从普通用户权限提升为root权限,它就直接具备了宿主机的root权限,进而可进行无限制的操作。虚拟机租户root权限和宿主机的root虚拟机权限是分离的,并且虚拟机利用如intel的vt-d和vt-x的ring-1硬件隔离技术,这种隔离技术可以防止虚拟机突破和彼此交互,而容器至今还没有任何形式的硬件隔离,这使得容器容易受到攻击

  5、可管理性:Docker?的集中化管理工具还不算成熟。各种虚拟化技术都有成熟的管理工具,例如VMware?Vcentor提供完备的虚拟机管理能力

  6、高可用和可恢复性:Docker?对业务的高可用支持是通过快速重新部署实现的。虚拟化具备负载均衡,高可用,容错,迁移和数据保护等经过生产实践检验的成熟保障机制,VMware可承诺虚拟机99.9999%高可用,保证业务连续性

  7、交付、部署:虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化。?Docker?在Dockerfile?中记录了容器构建过程,可在集群中实现快速分发和快速部署

  三、Docker的三个基本概念

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

  Image(镜像)

  Container(容器)

  Repository(仓库)

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

  那么镜像到底是什么呢?

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

  2、?Container?(容器)

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

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

  3、Repository(仓库)

  Docker仓库是集中存放镜像文件的场所,镜像构建完成后,可以很容易在当前宿主上运行,但是,如果需要在其他服务器上使用这个镜像,我们需要一个集中的存储、分发镜像的服务,Docker?Registry?(仓库注册服务器)就是这样的服务。有时候会把仓库(Repository)和仓库注册服务器(Registry)混为一谈,并不严格区分。?实际上,一个Docker?Registry?中可以包含多个仓库(Repository?),每个仓库可以包含多个标签?,每个标签对应着一个镜像。所以说,镜像仓库是Docker?用来集中存放镜像文件的地方类似于我们之前常用的代码仓库。

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

  (1)public(共有仓库)

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

  (2)private(私有仓库)

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

  四、Docker的架构

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

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

  Docker采用的是C/S架构,客户端向服务器发送请求,服务器负责构建、运行和分发容器。客户端和服务器可以运行在同一个Host上,客户端也可以通过socket或REST?API与远程的服务器通信。

  1、Docker?Client

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

  2、Docker?Daemon

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

  Docker?Daemon?的架构如下所示:

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

  运行过程的作用有以下几种可能:

  向Docker?Registry获取镜像

  通过grapthdriver执行容器镜像的本地化操作

  通过networkdriver执行容器网络环境的配置

  通过execdriver执行容器内部运行的执行工作

  由于Docker?Daemon和Docker?Client的启动都是通过可执行文件Docker来完成的,因此两者的启动流程非常相似。Docker可执行文件运行时,运行代码通过不同的命令行flag参数,区分两者,并最终运行两者各自相应的部分。

  启动Docker?Daemon时,一般可以使用一下命令来完成

  docker--daemtruedocker–ddocker–d=true

  再由docker的main函数来解析以上命令的相应的flag参数,并最终完成Docker?Daemon的启动。

  Docker?Daemon的启动流程:

  默认配置下,?Docker?Daemon只能相应来自本地host的客户端请求。如果要允许远程客户端请求,需要在配置文件中打开TCP监听。我们可以照着如下步骤进行配置:

  (1)编辑配置文件?/etc/systemd/system/multi-user.target.wants/docker.service,在环境变量?ExecStart后面添加?-H?tcp://0.0.0.0,允许来自任意?IP?的客户端连接。

  (2)重启Docker?Daemon

  systemctldaemon-reloadsystemctlrestart?docker.service

  (3)我们通过以下命令即可实现与远程服务器通信

  docker-H?服务器IP地址?info

  -H?是用来指定服务器主机,info子命令用于查看docker服务器的信息

  3、Docker?Image

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

  • 下载排行榜
  • 热门排行榜