容器技术基础(二)|学习笔记-阿里云开发者社区

开发者社区> -技术小能手-> 正文

容器技术基础(二)|学习笔记

简介: 快速学习容器技术基础(二)
+关注继续查看

开发者学堂课程【现代应用容器技术快速入门:容器技术基础(二)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/830

容器技术基础(二)

------马永亮


目录

一、Docker系统组件

二、Docker镜像

三、Docker容器

四、Docker容器的状态数据存储

五、存储卷

六、将容器接入网络


一、Docker系统组件

●Docker系统有三个关键组件

 ◆Docker CLI

 ◆Docker Daemon

 ◆Registry

Docker 系统有三个关键的组件,第一个是Docker CLI,也就是Docker的客户端,第二个叫做docker daemon,也叫Docker的服务端,也叫docker守护进程运行有docker daemon的主机,通常把它称为叫Docker host。事实上Docker host也就是用来运行docker容器的主机,而Docker CLI或Docker client通过docker daemon所暴露出来的rest API2者之间进行通信,由client发出容器相应的生命周期管理中的一些操作,比如像创建、启动、删除、停止等等一系列的管理操作,而后,Doctor demo则负责执行由client所发过来的,或者通过其socket API所接收到的此类的请求。

要注意的是,当需要创建有容器的时候,Docker Daemon所在的Docker house的主机本地应该基于某种方式存储有叫docker的镜像文件。

docker的镜像是一种特殊的文件,这种文件可以理解为就是一种特殊格式组织和打包的文件系统,或者称之为一个对应的文件系统,经特殊格式或叫遵循镜像特殊格式组织和打包出来以后对应的文件。就是docker所能够兼容和使用的镜像文件,而且docker镜像文件是基于分层机制构建的,当客户端如果发出了一个docker容器的创建操作请求时,这时docker daemon就会在本地去找有没有这个docker镜像,如果有docker镜像,此时docker daemon就会在该镜像的基础物质上创建和运行出来一个容器都要看到这个概念,那么,万一在对应的docker host的本地没有相应镜像的时候,DockerDaemon会自行到远程的一个称之为registry的,也就是docker的镜像注册表的主机之上去检索,请求检索和下载对应的镜像文件到本地先存储下来,然后再基于该镜像文件。创建出来容器好,所以docker系统有三个关键组件,Docker client、docker daemon和docker registry都要注意。

●Docker Daemon

 ◆REST AP

 ◆Objects

  ★lmage

  ★Container

  ★Volume

  ★Network

image.png

Docker host当中的docker demo所提供的是rest API,因此完成整容器管理的这个过程当中,或者为了便于容器管理,那么这个如。API将对应的操作、数据、数据项或者可操作的数据项都变成了Registry资源,因而这些资源实例化出来以后就是一个一个对应的对象。Docker Daemon支持多种不同类型的对象,分别用于实现不同的数据项的管理,比如Image,那就所谓的docker镜像,可以施加在这个对象之上的操作绝大多数。遵循我们对应的Registry风格,无非就是增、删、改、查,最为主要的就是CROD的一个操作对应的,除了镜像的增、删、改、查之外,那我们也可以实现在Docker主机上实现容器的增删改查,与container相关,所以第二个对象是container第三类对象类型或者资源类型,其实就是能够为我们对应的容器提供超过或者偷独立于容器生命周期的存储空间和组件,叫做volume,也称之为叫做数据卷或存储卷。不同的文档当中对此的称呼方式有所不同,这里按照存储卷来说,第四类对象比较重要的对象,称之为叫做network很显然前面提到过的Docker或者现代容器技术将依赖于内核儿空间当中的隔离机制,这些叫名称空间的称之为名称空间的隔离机制。而众多名称空间当中有一种叫做network的名称空间,就是用于为容器提供独立的网络名称空间,从而拥有独立的内核中的协议栈网络接口等相应功能的组建的。

一个docker容器通常被称为叫应用容器,这是有别于LXC时代的容器的第二点。因为Docker通常假设一个容器当中,只应该运行某一个特定的进程及其子进程,那么如果该进程停止了,或转入后台去运行了该容器,自己就将种植。因此,将不需要再为容器内部单独运行一个类似于传统操作系统,用户空间中的这样的进程,可以理解为单独运行的进程本身就是该用户空间中的的,比如Init,那如果要运行一个理单行的话本,那么该用户空间当中将只运行该中的及其init的子进程,包括Nginx也可能就是该容器中只会运行nginx的各个word,而无需再去运行专用的一个supervisor,就是一个专门的管理进程,将来在恩格斯进程中只是帮器去完成所谓的这种进程终止操作,只需要交给宿主机的父进程来完成就可以,当然这其中容器运行时的参与,所以这个是需要特别加补充说明的,根据此前的描述。那么由此可见,当需要创建一个容器时,它的大体步骤在docker上应该是这样来完成的。第一,使用docker客户端向doctordaemon发起容器创建的请求。接着,Docker daemon将在本地检索用户指定启动容器时的那个镜像文件是否存在。如果存在,将基于该镜像文件直接启动创建并启动该容器。

如果说本地没有该镜像文件,将去到远程的registry上,这个registry是docker daemon当中,通过其配置文件配置的,如过没有文件配置的话指的就是doctor had,大家应该对此很熟悉,叫做docker hub的registry,所以它下载到对应的镜像文件以后再去只使用后边的容器生命周期中的管理操作,包括创建和启动操作啊,万一容器中的进程启动失败了。那么该容器将转为停止状态。当然,一个处于停止状态的容器,也可以被执行删除操作。这就是container的生命周期管理操作。

由此可见,与nginx时代的一个显著不同还在于,无需再为创建的容器去专门用模板通过安装的方式生成文件系统目录结构生成文件系统输,也就是创建出一个独立隔离的文件系统空间来,而它的使用方式是借助于镜像文件,借助于本地的镜像文件来生成的。另外一个特别需要说明的是镜像,对于每一个容器来说,每个主线的每一个容器来说都是只读的,所以基于同一个镜像,可以启动多个容器,而且在多个容器,彼此之间互相并不能看到对方容器的修改操作。

二、Docker镜像

运行容器时,基于Mount名称空间建立的隔离文件系统中的内容来自镜像

Docker镜像是一个特殊的文件系统,它必须包含运行应用程序所需的一切-所有依赖项、配置、脚本、二进制文件等

镜像还包含容器的其他配置,例如环境变量、要运行的默认命令、和其他元数据

通常,镜像还要定义默认启动的应用

Docker镜像由许多层(Layer)叠加而成

依赖于特殊的存储驱动,例如aufs、devicemapper、 overlay2等;

尽管每种存储驱动程序实现的管理方式不尽相同,但它们都使用可堆叠的镜像层和写时复制(CoW)策略。

三、Docker容器  

运行有DockerDaemon的主机负责管理本地容器实例的生命周期;

Docker Daemon通过其监听的SocketAPI接收Docker对象的管理请求,包括容器的生命周期中的各类管理操作

容器实例的创建要基于本地存储的Docker镜像进行

实例启动后,要在前台(foreground,不能转为守护进程模式)运行镜像中定义的默认应用,或用户指定的应用创建容器时,指定了本地不存在的镜像时,则需要由Docker Daemon自动至Registry上进行下载Docker Daemon默认使用的Registry是DockerHub。

需要下载某容器所依赖的镜像时,需要去Docker Registry基础上去下载,而Docker registry通常就是一个基于HTTP协议,当然也可能是HTTPS,一般而言,都应该要求是HTTPS这种协议所定义的一个服务器,他通过HTTPS协议输出其服务接口,而后在这样一个服务器上,他同样基于所谓的存储驱动程序来将镜像文件统一集中的存储下来,并提供一个检索可检索的接口允许。那也可能是个外部接口,也可能是一个API接口,它允许用户打开这么一个对应的服务。这个服务上的接口上能够检索出用户所需的镜像是否存在,如果存在,则基于相应的协议,允许docker daemon将其下载到我们docker主机的本地来进行存储。所以刀客的所在的主机上也应该有存储驱动程序,用于存储本地的一个镜像文件。

四、Docker容器的状态数据存储  

对于同一个主机上的容器来说,底层的Docker镜像处于只读状态,进程的读写操作只能在创建容器时生成的叠加于镜像栈最上层的可写层中进行,该层也称为容器层,根据同一镜像,Docker能够创建出运行环境完全一致的容器,在容器中添加新数据或修改现有数据的结果,都存储在由容器附加在镜像栈顶的可写层中删除容器,将一同删除其可写层,这将导致容器生成的状态数据全部丢失。

五、存储卷

●存储卷

 ◆支持使用存储卷(Volume)技术来绕过存储驱动程序,将数据存储在宿主机可达的存储空间上,以实现跨容器生命周期的数据持久性;

 ◆也支持使用卷驱动器(Docker引擎上的存储卷插件)将数据直接存储于远程存储设备上,以实现跨主机生命周期的数据持久性。

六、将容器接入网络

将容器接入网络通常要经由这样几个步骤:

1.准备好相应的容器网络,通常是虚拟网络;

●单机的桥接式网络;

●跨主机的Overlay或Underlay网络;

2.为每个容器配置一个独占的Network名称空间;

3.为容器添加专用的接口设备,并将其接入到容器网络中;

4.为容器接口分配相应的IP地址及其它网络属性值,并按需生成NAT规则;

image.png

对于Docker容器(引擎)而言,在创建一个容器的时候,如果这个容器需要接入网络,必须提供一个便捷的接口,或者一个便捷的命令,来实现类似诸多步骤要完成的各种各样的功能。Docker默认安装完,在单机上它支持四种网络模式,其实能够看到的只有三种。第一种叫做none模式。可以理解为就表示容器除了有lo接口之外,没有任何别的接口,只有aux接口,没有任何别的接口,也意味着他不接入网络。那一般而言,批处理作业,尤其是不需要网络通信的批处理作业,那通常可能会使用这种模式。第二种称之为叫做bridge模式,那这个bridge模式就可以这么来想象。安装完Dorker并启动以后,它会初始生成一个叫做Dorker零的网桥。可以理解成就是个软件模拟出来的交换机,它就叫Dorker零,而且有固定的网络地址,172.17.0.0,16位的原码是这个网络,所以这个桥就意味着创建的任何一个创建任何一个容器,只要接了该网络的话,就意味着我们需要为我们的容器,基于内核当中的非ETF虚拟模块,或者叫模块为生成一对虚拟以太网接口,可以理解为就是一对虚拟网以太网网卡,就好像一根网线连了两头,这两头儿各有网络能通信的二层接口模块,其中一头给他关联到一头儿,关联到容器的网络名称空间中去。

image.png



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Docker学习笔记——制作容器与容器概念
Docker能做些什么? 1.docker能够解决虚拟机能够解决的问题 2.隔离应用依赖 3.创建应用镜像并复制 4.创建容易分发的即启即用的应用 5.docker的想法是创建软件程序可移植的轻量容器   镜像 1.
1330 0
使用TensorFlow,GPU和Docker容器进行深度学习
数据科学家使用GPU来提高TensorFlow的计算速度,但GPU价格昂贵,也需要对其所占用的资源进行认真的管理。本文将带你来一起解决这一问题。
7497 0
阿里云容器服务团队实践——Alluxio优化数倍提升云上Kubernetes深度学习训练性能
近些年,以深度学习为代表的人工智能技术取得了飞速的发展,正落地应用于各行各业。越来越多的用户在云上构建人工智能训练平台,利用云平台的弹性计算能力满足高速增长的AI业务模型训练方面的需求,然而这种“本地存储+云上训练”的训练模式加剧了计算存储分离架构带来的远程数据访问的性能影响。
3391 0
SAS学习笔记之《SAS编程与数据挖掘商业案例》(3)变量操作、观测值操作、SAS数据集管理
SAS学习笔记之《SAS编程与数据挖掘商业案例》(3)变量操作、观测值操作、SAS数据集管理 1. SAS变量操作的常用语句 ASSIGNMENT 创建或修改变量 SUM 累加变量或表达式 KEEP 规定在数据集中保留的变量 DROP 规定在数据集中删除的变量 ARRAY 定义一个数组 RENAME
1389 0
阿里云开源 image-syncer 工具,容器镜像迁移同步的终极利器
为什么要做这个工具? 由于阿里云上的容器服务 ACK 在使用成本、运维成本、方便性、长期稳定性上大大超过公司自建自维护 Kubernets 集群,有不少公司纷纷想把之前自己维护 Kubernetes 负载迁移到阿里云 ACK 服务上。
3154 0
【收藏】2018年不容错过的20大人工智能/机器学习/计算机视觉等顶会时间表
计算机科学,尤其是人工智能领域相比其他学科更重视会议,最新、最重要的工作往往先发表在相关顶会上。本文介绍了2018年值得关注的20个顶会,包括人工智能、机器学习、计算机视觉、自然语言处理、体系结构等领域。
7467 0
以Docker容器方式安装Ceph
获取Ceph的Docker镜像 因为公司对于网络环境的限制,安装ceph时使用ceph-deploy反而很不方便,且ssh免密码方式也不适用,所以使用docker方式安装。 Git地址 https://github.
3124 0
1280
文章
0
问答
来源圈子
更多
技术图谱:由专家组参与技术图谱的绘制与编写,知识与实践的结合让开发者们掌握学习路线与逻辑,快速提升技能 电子书:电子书由阿里内外专家打造,供开发者们下载学习,更与课程相结合,使用户更易理解掌握课程内容 训练营:学习训练营 深入浅出,专家授课,带领开发者们快速上云 精品课程:汇集知识碎片,解决技术难题,体系化学习场景,深入浅出,易于理解 技能自测:提供免费测试,摸底自查 体验实验室:学完即练,云资源免费使用
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载