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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 快速学习容器技术基础(二)

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

课程地址: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



相关文章
|
8天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
11天前
|
运维 持续交付 Docker
深入理解Docker容器化技术
深入理解Docker容器化技术
|
7天前
|
安全 持续交付 云计算
揭秘云计算中的容器化技术及其优势
揭秘云计算中的容器化技术及其优势
12 1
|
7天前
|
缓存 监控 开发者
掌握Docker容器化技术:提升开发效率的利器
在现代软件开发中,Docker容器化技术成为提升开发效率和应用部署灵活性的重要工具。本文介绍Docker的基本概念,并分享Dockerfile最佳实践、容器网络配置、环境变量和秘密管理、容器监控与日志管理、Docker Compose以及CI/CD集成等技巧,帮助开发者更高效地利用Docker。
|
9天前
|
Kubernetes Cloud Native Docker
云原生技术探索:容器化与微服务的实践之道
【10月更文挑战第36天】在云计算的浪潮中,云原生技术以其高效、灵活和可靠的特性成为企业数字化转型的重要推手。本文将深入探讨云原生的两大核心概念——容器化与微服务架构,并通过实际代码示例,揭示如何通过Docker和Kubernetes实现服务的快速部署和管理。我们将从基础概念入手,逐步引导读者理解并实践云原生技术,最终掌握如何构建和维护一个高效、可扩展的云原生应用。
|
11天前
|
Cloud Native 持续交付 Docker
Docker容器化技术:从入门到实践
Docker容器化技术:从入门到实践
|
12天前
|
存储 Kubernetes 调度
基于容器化技术的性能优化实践
基于容器化技术的性能优化实践
24 3
|
21天前
|
存储 持续交付 虚拟化
|
11天前
|
数据中心 开发者 Docker
理解并实践Docker容器化技术
理解并实践Docker容器化技术
|
18天前
|
人工智能 Anolis 开发者