Docker容器技术与应用项目5-容器相关技术课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Docker容器技术与应用项目5-容器相关技术课件.pptx》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Docker 容器 技术 应用 项目 相关 课件
- 资源描述:
-
1、项目5 容器相关技术通过本章了解Docker容器相关技术,底层技术,Docker 内部以及容器之间管理数据,网络功能,Docker API,安全。目录任务任务5.1 Docker底层技术底层技术任务任务5.2 存储存储任务任务5.3 网络网络任务任务5.4 Docker API任务任务5.5.安全安全任务5.1 Docker底层技术 Docker 底层使用的核心技术包括 Linux 上的命名空间(Namespaces)控制组(Control groups)联合文件系统(Union file systems)和容器格式(Container format)。图5.1 虚拟机技术与容器技术的对比5.
2、1.1 命名空间nameSpace 命名空间是 Linux 内核一个强大的特性。每个容器都有自己单独的命名空间,运行在其中的应用都像独立的操作系统中运行一样。命名空间保证了容器之间彼此互不影响。Linux内核提供了六种namespace隔离的系统调用,如下表所示。Namespace系统调用参数隔离内容UTSCLONE_NEWUTS主机名与域名IPCCLONE_NEWIPC信号量、消息队列和共享内存PIDCLONE_NEWPID进程编号NetworkCLONE_NEWNET网络设备、网络栈、端口等等MountCLONE_NEWNS挂载点(文件系统)UserCLONE_NEWUSER用户和用户组表
3、5.1 namespace六项隔离5.1.2控制组cgroupcgroups是Linux内核提供的一种机制,cgroup可以根据特定的行为,把一系列系统任务及其子任务整合或分隔到不同的资源等级分组中,从而为系统资源管理提供一个统一的框架。主要的功能包括:资源限制(Resource Limitation):cgroups可以对进程组使用的资源总额进行限制。如设定应用运行时使用内存的上限,一旦超过这个配额就发出OOM(Out of Memory)。优先级分配(Prioritization):通过分配的CPU时间片数量及硬盘IO带宽大小,实际上就相当于控制了进程运行的优先级。资源统计(Account
4、ing):cgroups可以统计系统的资源使用量,如CPU使用时长、内存用量等等,这个功能非常适用于计费。进程控制(Control):cgroups可以对进程组执行挂起、恢复等操作。通俗的来说,cgroups可以限制、记录、隔离进程组所使用的物理资源(包括:CPU、memory、IO等),为容器实现虚拟化提供了基本保证,是构建Docker等一系列虚拟化管理工具的基础。Cgroup功能实现特点:(1)cgroups的API以一个伪文件系统的方式实现,即用户可以通过文件操作实现cgroups的组织管理。(2)cgroups的组织管理操作单元可以细粒度到线程级别,用户态代码也可以针对系统分配的资源创
5、建和销毁cgroups,从而实现资源再分配和管理。(3)所有资源管理的功能都以subsystem(子系统)的方式实现,接口统一。(4)子进程创建之初与其父进程处于同一个cgroups的控制组。5.1.3联合文件系统UnionFS联合文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改按层(Layer)叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。联合文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。Aufs是Docker最初采用的文件系统,由于Aufs未能加入到Linux内核,考虑到兼容性问题,
6、加入了Devicemapper的支持。Docker 目前支持的联合文件系统种类包括 Aufs、btrfs、vfs和DeviceMapper。典型的Linux文件系统由bootfs和rootfs两部分组成,bootfs(boot file system)主要包含bootloader和kernel,bootloader主要是引导加载kernel,当kernel被加载到内存中后bootfs就被umount了。rootfs(root file system)包含的就是典型 Linux 系统中的/dev,/proc,/bin,/etc等标准目录和文件。Docker镜像的典型结构如右图。传统的Linux加
7、载bootfs时会先将rootfs设为read-only,然后在系统自检之后将rootfs从read-only改为read-write,然后就可以在rootfs上进行写和读的操作了。为了形象化Docker的镜像结构,docker pull一个ubuntu:14.04的镜像,使用docker images-tree查看结果如下:rootqingze qingze#docker images-treeWarning:-tree is deprecated,it will be removed soon.See usage.511136ea3c5a Virtual Size:0 B 3b363fd9
8、d7da Virtual Size:192.5 MB 607c5d1cca71 Virtual Size:192.7 MB f62feddc05dc Virtual Size:192.7 MB 8eaa4ff06b53 Virtual Size:192.7 MB Tags:ubuntu:14.04因为如果高Docker版本,docker image不再使用,可以使用“docker history 镜像ID”来查看。可以看到Ubuntu的镜像中有多个长ID的layer,且以一种树状结构继承下来,如下图。其中,第n+1层继承了第n层,并在此基础上有了自己的内容,直观上的表现就是第n+1层占用磁盘空
9、间增大。并且,不同的镜像可能会有相同的父镜像。例如,图中Tomcat和Nginx 继承于同一个Vim 镜像,这种组织方式起到共享的作用,节约了镜像在物理机上占用的空间。使用docker save命令保存镜像tar,查询其结构。rootqingze qingze#docker save-o ubuntu.tar ubuntu:14.04rootqingze qingze#tar-tf ubuntu.tar 3b363fd9d7dab4db9591058a3f43e806f6fa6f7e2744b63b2df4b84eadb0685a/3b363fd9d7dab4db9591058a3f43e80
10、6f6fa6f7e2744b63b2df4b84eadb0685a/VERSION3b363fd9d7dab4db9591058a3f43e806f6fa6f7e2744b63b2df4b84eadb0685a/json3b363fd9d7dab4db9591058a3f43e806f6fa6f7e2744b63b2df4b84eadb0685a/layer.tar511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158/511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d
11、4d2698e22c158/VERSION511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158/json511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158/layer.tar607c5d1cca71dd3b6c04327c3903363079b72ab3e5e4289d74fb00a9ac7ec2aa/607c5d1cca71dd3b6c04327c3903363079b72ab3e5e4289d74fb00a9ac7ec2aa/VERSIO
12、N607c5d1cca71dd3b6c04327c3903363079b72ab3e5e4289d74fb00a9ac7ec2aa/json607c5d1cca71dd3b6c04327c3903363079b72ab3e5e4289d74fb00a9ac7ec2aa/layer.tar8eaa4ff06b53ff7730c4d7a7e21b4426a4b46dee064ca2d5d90d757dc7ea040a/8eaa4ff06b53ff7730c4d7a7e21b4426a4b46dee064ca2d5d90d757dc7ea040a/VERSION8eaa4ff06b53ff7730c
13、4d7a7e21b4426a4b46dee064ca2d5d90d757dc7ea040a/json8eaa4ff06b53ff7730c4d7a7e21b4426a4b46dee064ca2d5d90d757dc7ea040a/layer.tarf62feddc05dc67da9b725361f97d7ae72a32e355ce1585f9a60d090289120f73/f62feddc05dc67da9b725361f97d7ae72a32e355ce1585f9a60d090289120f73/VERSIONf62feddc05dc67da9b725361f97d7ae72a32e35
14、5ce1585f9a60d090289120f73/jsonf62feddc05dc67da9b725361f97d7ae72a32e355ce1585f9a60d090289120f73/layer.tarrepositories5.1.4 容器管理 1)Libcontainer在2013年Docker刚发布的时候,它是一款基于LXC的开源容器管理引擎。随着Docker的不断发展,它开始有了更为远大的目标,将底层实现都抽象化到Libcontainer的接口。这就意味着,底层容器的实现方式变成了一种可变的方案,无论是使用namespace、cgroups技术或是使用systemd等其他方案,只
15、要实现了Libcontainer定义的一组接口,Docker都可以运行。这也为Docker实现全面的跨平台带来了可能。Libcontainer功能实现上涵盖了包括namespaces使用、cgroups管理、Rootfs的配置启动、默认的Linux capability权限集、以及进程运行的环境变量配置。本身主要分为三大块工作内容,一是容器的创建及初始化,二是容器生命周期管理,三则是进程管理,调用方为Docker的execdriver。容器的监控主要通过cgroups的状态统计信息,未来会加入进程追踪等更丰富的功能。另一方面,Libcontainer在安全支持方面也为用户尽可能多的提供了支持和
16、选择。2)runCLinux基金会于2015年6月成立OCI(Open Container Initiative)组织,旨在围绕容器格式和运行时制定一个开放的工业化标准。OCI的目标是为了避免容器的生态分裂为“小生态王国”,确保一个引擎上构建的容器可以运行在其他引擎之上。这是实现容器可移植性至关重要的部分。该组织一成立便得到了包括谷歌、微软、亚马逊、华为等一系列云计算厂商的支持。3)containerd2016年12月Docker 将Docker Engine 中的核心元件Containerd 开源,作为一个独立的开源项目独立发展,目标是提供一个更加开放、稳定的容器运行基础设施。Contain
17、erd可以说是Docker 引擎的引擎(Runtime)。和包含在Docker Engine里containerd相比,独立的containerd将具有更多的功能,可以涵盖整个容器运行时管理的所有需求。Containerd面向运维人员而构建,目的构建工业级规模的Docker系统,在性能上进行了优化,Containerd利用runC来提供高级功能,比如热迁移(checkpoint&restore)seccomp以及用户命名空间支持,这将为Docker引入这些功能敞开大门。containerd的功能和架构如下:Containerd分三层,最上层为API,包括GRPC API(Go RPC)和Met
18、rics API。中间层为内部子系统,包括三个:(1)Distribution:和Docker Registry打交道,拉取镜像(2)Bundle:管理本地磁盘上面镜像的子系统。(3)Runtime:创建容器、管理容器的子系统。最下面为功能组件包括内容、元数据、快照、执行器和监控器。任务5.2 存储下面介绍Docker 内部以及容器之间管理数据。在容器中管理数据主要有两种方式。(1)数据卷(2)数据卷容器5.2.1 数据卷1)数据卷(Data volumes)。数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特性:(1)数据卷可以在容器之间共享和重用。(2)对数据
19、卷的修改会立马生效。(3)对数据卷的更新,不会影响镜像(4)数据卷默认会一直存在,即使容器被删除。数据卷的使用,类似于Linux下对目录或文件进行mount,镜像中的被指定为挂载点的目录中的文件会隐藏掉,能显示看到的是挂载的数据卷。2)创建一个数据卷在用 docker run 命令的时候,使用-v 标记来创建一个数据卷并挂载到容器里。在一次 run 中多次使用可以挂载多个数据卷。下面创建一个名为 web 的容器,并加载一个数据卷到容器的/webapp 目录。$sudo docker run-d-P-name web-v/webapp training/webapp python app.py可
20、以在Dockerfile中使用 VOLUME 来添加一个或者多个新的卷到由该镜像创建的任意容器。3)删除数据卷数据卷是被设计用来持久化数据的,它的生命周期独立于容器,Docker不会在容器被删除后自动删除数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷。如果需要在删除容器的同时移除数据卷。可以在删除容器的时候使用 docker rm-v 这个命令。4)挂载一个主机目录作为数据卷使用-v 标记也可以指定挂载一个本地主机的目录到容器中去。$sudo docker run-d-P-name web-v/src/webapp:/opt/webapp training/webapp
21、python app.py上面的命令加载主机的/src/webapp 目录到容器的/opt/webapp 目录。这个功能在进行测试的时候十分方便,比如用户可以放置一些程序到本地目录中,来查看容器是否正常工作。本地目录的路径必须是绝对路径,如果目录不存在Docker 会自动为你创建它。Docker 挂载数据卷的默认权限是读写,用户也可以通过:ro 指定为只读。$sudo docker run-d-P-name web-v/src/webapp:/opt/webapp:ro training/webapp python app.py5)查看数据卷的具体信息在主机里使用以下命令可以查看指定容器的信息
22、,在输出的内容中找到其中和数据卷相关的部分,可以看到所有的数据卷都是创建在主机的/var/lib/docker/volumes/下面的$docker inspect web.Volumes:/webapp:/var/lib/docker/volumes/fac362.80535,VolumesRW:/webapp:true.6)挂载一个本地主机文件作为数据卷-v 标记也可以从主机挂载单个文件到容器中$sudo docker run-rm-it-v/.bash_history:/.bash_history ubuntu/bin/bash这样就可以记录在容器输入过的命令了。如果直接挂载一个文件,很
23、多文件编辑工具,包括 vi 或者 sed-in-place,可能会造成文件 inode 的改变,所以最简单的办法就直接挂载文件的父目录。5.2.2 数据卷容器数据卷容器(Data volume containers)涉及容器间共享的持久化、序列化的数据持久性的数据,最好创建数据卷容器。1)创建数据卷容器。(1)首先,创建一个名为 dbdata 的数据卷容器:$sudo docker run-d-v/dbdata-name dbdata training/postgres echo Data-only container for postgres(2)然后,在其他容器中使用-volumes-fr
24、om 来挂载 dbdata 容器中的数据卷。$sudo docker run-d-volumes-from dbdata-name db1 training/postgres$sudo docker run-d-volumes-from dbdata-name db2 training/postgres(3)可以使用超过一个的-volumes-from 参数来指定从多个容器挂载不同的数据卷。也可以从其他已经挂载了数据卷的容器来级联挂载数据卷。$sudo docker run-d-name db3-volumes-from db1 training/postgres2)利用数据卷容器来备份、恢复
25、、迁移数据卷。可以利用数据卷对其中的数据进行进行备份、恢复和迁移。(1)备份:首先使用-volumes-from 标记来创建一个加载 dbdata 容器卷的容器,并从主机挂载当前目录到容器的/backup 目录。命令如下:$sudo docker run-volumes-from dbdata-v$(pwd):/backup ubuntu tar cvf/backup/backup.tar/dbdata容器启动后,使用了tar 命令来将dbdata 卷备份为容器中/backup/backup.tar 文件,也就是主机当前目录下的名为 backup.tar 的文件。(2)恢复:如果要恢复数据到一
展开阅读全文