Docker容器技术与应用教案.docx
- 文档编号:26335179
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:51
- 大小:243.49KB
Docker容器技术与应用教案.docx
《Docker容器技术与应用教案.docx》由会员分享,可在线阅读,更多相关《Docker容器技术与应用教案.docx(51页珍藏版)》请在冰豆网上搜索。
Docker容器技术与应用教案
教案
课程名称
Docker容器技术与应用
课程代码
系(部)
教研室(实验室)
授课教师
职称
年月
课程
名称
Docker容器技术与应用
总计:
64学时
课程
类别
专业课
课程代码
讲授:
34学时
实验:
30学时
上机:
学时
其他:
学时
授课
教师
学分
授课
对象
教材和主要参考资料
《Docker容器技术与应用》
课
程
简
介
《Docker容器技术与应用》是云计算技术与应用的专业必修课,是云计算技术与应用专业中一门实践性很强的专业核心课程,主要内容包括Docker的发展、Docker的概念与特点、Docker的安装方法、Docker镜像管理、Docker容器管理、Docker网络和数据卷管理、Docker编排工具使用、自动化部署、Kubernetes的概念和基本操作等。
教
学
难
点
重
点
1.了解容器技术的发展历程;识记Docker的基本概念和特点;理解Docker与传统虚拟机的区别,掌握Docker的常用安装方法。
2.了解镜像的基本概念和常用操作命令的使用;了解仓库的基本概念;掌握公有仓库的使用和私有仓库构建的方法;掌握构建镜像的基本方法。
3.了解容器的基本概念、特点和实现原理;理解镜像和容器的关系;掌握容器的基本使用和运维管理;了解CGroups的功能;掌握利用CGroups对资源控制的方法。
4.了解Docker网络的相关理论知识;掌握Docker网络的配置和使用;了解Docker存储技术、数据卷和数据卷容器的使用方法。
5.了解容器编排的管理方法和基本使用方法;了解容器集群的管理方法和基本使用方法。
6.了解Rancher容器管理平台的功能组件;了解Jenkins持续集成工具。
7.了解Kubernetes的相关理论知识;理解Kubernetes的架构和工作流程。
授课题目:
项目1Docker概述
授课方式
(请打√)
理论课■讨论课□实验课■习题课□其他□
课时
安排
6
教学大纲要求:
了解容器技术的发展历程;掌握Docker的基本概念和特点;掌握Docker与传统虚拟机的区别,掌握Docker的常用安装方法。
知识目标
⏹了解容器技术的发展历程。
⏹掌握Docker的基本概念和特点。
⏹掌握Docker与传统虚拟机的区别,掌握Docker的应用。
能力目标
⏹熟练掌握XX、Google等搜索工具的使用方法。
⏹掌握在CentOS7中安装Docker的步骤。
⏹掌握在Windows中安装Docker的步骤。
⏹掌握Docker启动和验证的基本方法。
教学重点及难点:
重点:
Docker的基本概念和特点,Docker与传统虚拟纲的区别。
难点:
Docker常用安装方法。
作业、讨论题、思考题:
课后总结分析
教学内容:
任务1.1认识Docker技术
1.1.1Docker的发展历程
信息技术的飞速发展,促使人类进入云计算时代,云计算时代下孕育出众多的云计算平台。
但众多的云平台之间标准规范不统一,每个云平台都有各自独立的资源管理策略、网络映射策略和内部依赖关系,导致各个平台无法做到相互兼容、相互连接。
同时,应用的规模愈发庞大、逻辑愈发复杂,任何一款产品都无法顺利地从一个云平台“迁移”到另外一个云平台。
Docker利用容器技术弥合了各个云平台之间的差异,Docker通过容器来打包应用、解耦应用和运行平台。
在进行迁移的时候,只需要在新的服务器上启动需要的容器即可,而所付出的成本代价是极低的。
Docker最初是dotCloud公司的创始人SolomonHykes所带领的团队发起的,其主要项目代码在GitHub上进行维护。
1.1.2Docker的概念与特点
1.Docker的定义
Docker是以Docker容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员设计,用于构建、发布和运行分布式应用的平台。
它是一个跨平台、可移植且简单易用的容器解决方案。
Docker的源代码托管在GitHub上,基于Go语言开发,并遵从Apache2.0协议。
Docker可在容器内部快速自动化地部署应用,并通过操作系统内核技术(namespace、CGroups等)为容器提供资源隔离与安全保障。
2.优点
(1)更快的交付和部署
(2)高效的资源利用和隔离
(3)环境标准化和版本控制
(4)更轻松的迁移和扩展
(5)更简单的维护和更新管理
1.调研Docker与传统虚拟机的区别
传统虚拟机运行在宿主机之上,具有完整的操作系统。
其自身的内存管理通过相关的虚拟设备进行支持。
在虚拟机中,可为用户操作系统和虚拟机管理程序分配有效的资源,从而在单台主机上并行运行一个或多个操作系统的多个实例。
每个客户操作系统都作为主机系统中的单个实体运行,但会占用较多的CPU、内存、硬盘资源。
图1-1传统虚拟机架构
Docker不同于传统的虚拟机,Docker容器是使用Docker引擎而不是管理程序来执行的。
它只包含应用程序及依赖库,基于Libcontainer运行在宿主机上,因此容器比虚拟机小,并且由于主机内核的共享,可以更快地启动,具有更好的性能、更少的隔离和更好的兼容性。
启动容器只需几秒即可完成。
由于Docker轻量、资源占用少,使得Docker可以轻易地应用到构建标准化的应用中。
图1-2Docker架构
Docker容器技术与传统虚拟机技术的特性比较如表1-1所示
表1-1Docker容器技术与传统虚拟机技术的特性比较
特性
技术
容器
虚拟机
启动速度
秒级
分钟级
性能
接近原生
较弱
内存代价
很小
较多
占用磁盘空间
一般为MB
一般为GB
运行密度
单机支持上千个容器
单机支持几十个虚拟机
隔离性
安全隔离
完全隔离
迁移性
优秀
一般
2.Docker的用途
(1)简化配置
(2)代码管理化管理
(3)开发人员的生产化
(4)隔离应用
(5)整合服务器
(6)调试能力
(7)多租户环境
(8)快速部署
任务1.2熟悉Docker的安装方法
1.2.1Docker架构
Docker采用客户端/服务器(Client/Server,C/S)架构模式,Docker架构如图1-3所示。
DockerDaemon作为服务端接收客户端的请求,服务器端负责构建、运行和分发容器。
客户端和服务器端可以运行在同一个Host上,客户端也可以通过Socket或RESTAPI与远程的服务器端通信。
DockerDaemon可以守护进程在宿主机后台运行,用户并不直接与其进行交互,而是通过DockerClient间接和其通信。
DockerClient以系统命令的形式存在,用户使用Docker命令来与DockerDaemon交互。
DockerDaemon接收用户指令并与Docker共同守护进程通信。
图1-3Docker架构
1.2.2Docker的核心组件
Docker的核心组件包括Docker客户端(Client)、Docker服务器(DockerDaemon)、Docker镜像(Image)、Docker仓库和Docker容器(Container)。
1.Docker客户端
Docker客户端通过命令行或者其他工具使用DockerAPI与Docker的守护进程通信。
2.Docker服务器
DockerDaemon是服务器组件,以Linux后台服务的方式运行。
3.Docker镜像
Docker镜像就是一个只读的模板,镜像可以用于创建Docker容器,每一个镜像由一系列的层组成。
4.Docker仓库
Docker仓库类似于代码仓库,它是Docker集中存放镜像文件的场所。
有时候,人们会把Docker仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。
实际上,仓库注册服务器是存放仓库的地方,其上往往存放着多个仓库,每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签来进行区分。
Docker仓库分为公有(Public)仓库和私有(Private)仓库两种形式。
目前,最大的公有仓库是DockerHub,存放了数量庞大的镜像供用户下载。
当然,Docker也支持用户在本地网络中创建一个私有仓库。
当用户创建了自己的镜像之后,可以使用push命令将其上传到公有或者私有仓库中,这样,当用户需在另一台主机上使用该镜像时,只需要将镜像从仓库中获取下来即可。
5.Docker容器
Docker利用容器来运行应用。
容器是从镜像创建的运行实例,它可以被启动、开始、终止、删除。
容器是一个隔离环境,多个容器之间不会相互影响,以保证容器中的应用运行在一个相对安全的环境中。
1.2.3Docker的版本分类
Docker的早期版本是docker-io,版本号是1.*,最新版是1.13。
Docker从1.13版本之后采用时间线的方式作为版本号,分为DockerCE(社区版)和DockerEE(企业版)。
DockerCE(社区版)是免费提供给个人开发者和小型团体使用的,DockerEE(企业版)会提供额外的收费服务,如经过官方测试认证过的基础设施、容器、插件等。
Docker现在改为基于YY.MM版本。
DockerCE(社区版)按照stable和edge两种方式发布,每个季度更新stable版本,每个月份更新edge版本。
例如,使用基于月份的发行版本,17.03的第1版就指向17.03.0,如果有漏洞/安全修复需要发布,那么将会指向17.03.1等
授课题目:
项目2镜像管理和定制
授课方式
(请打√)
理论课■讨论课□实验课■习题课□其他□
课时
安排
12
教学大纲要求
让学生了解镜像的基本概念;掌握镜像的常用操作命令;了解仓库的基本概念;掌握镜像仓库的构建及使用方法;掌握构建镜像的基本方法。
知识目标
⏹了解镜像的基本概念。
⏹掌握镜像的常用操作命令。
⏹了解仓库的基本概念。
⏹掌握镜像仓库的构建及使用方法。
⏹掌握构建镜像的基本方法。
能力目标
⏹掌握镜像的基本操作。
⏹掌握镜像仓库的构建方法。
教学重点及难点:
重点:
镜像的基本概念和特点,镜像的基本操作命令,仓库的基本概念,构建自定义镜像。
难点:
镜像的基本操作命令,镜像仓库的构建,构建自定义镜像。
作业、讨论题、思考题:
课后总结分析:
教学内容:
任务2.1查看和管理Docker镜像
【相关知识】
2.1.1Docker镜像
Docker镜像类似于虚拟机中的镜像,是一个只读的模板,也是一个独立的文件系统,包括运行容器所需的数据。
Docker镜像是Docker容器的静态表示,包括Docker容器所要运行的应用代码及运行时的配置。
Docker镜像采用分层的方式构建,每个镜像均由一系列的“镜像层”组成。
镜像一旦被创建就无法被修改。
图2-1Docker容器的分层结构
Docker镜像采用了写时复制(Copy-on-Write)的策略,在多个容器之间共享镜像,每个容器在启动的时候并不需要单独复制一份镜像文件,而是将所有镜像层以只读的方式挂载到一个挂载点,再在上面覆盖一个可读写的容器层。
写时复制策略配合分层机制的应用,减少了镜像对磁盘空间的占用和容器启动时间。
2.1.2Docker镜像仓库
镜像仓库是集中存放镜像的地方,分为公共仓库和仓库。
仓库注册服务器(Registry)是存放仓库的地方,一个DockerRegistry中可私有以包含多个仓库,各个仓库根据不同的标签和镜像名管理各种Docker镜像。
一个镜像仓库中可以包含同一个软件的不同镜像,利用标签进行区别。
可以利用<仓库名>:
<标签>的格式来指定相关软件镜像的版本。
例如,centos:
6.5和centos:
7.2代表镜像名为centos,利用标签6.5和7.0来区分版本。
如果忽略标签,则默认会使用latest进行标记。
1.Docker公共仓库
DockerHub是默认的DockerRegistry,由Docker公司维护,其中拥有大量高质量的官方镜像,供用户免费上传、下载和使用。
但也有提供收费服务的Registry。
公共仓库DockerHub具有以下特点。
(1)数量大、种类多。
(2)稳定、可靠、干净。
(3)仓库名称前没有命名空间。
2.Docker私有仓库
Docker公有仓库虽然优点有很多,但是也存在一些问题。
例如,公司企业级的一些私有镜像,由于镜像涉及一些机密的数据和软件,私密性比较强,因此不太适合放在公有仓库中。
此外,出于安全考虑,一些公司不允许公司内网服务器环境访问外网,因此无法下载到公有仓库的镜像。
为了解决这些问题,可以根据需要搭建私有仓库,存储私有镜像。
私有仓库具有以下特点。
(1)安全性和私密性高。
(2)访问速度快。
(3)自主控制、方便存储和可维护性高。
【任务实现】
1.使用Docker的常用命令
(1)获取镜像。
命令格式:
dockerpull[DockerRegistry地址]<镜像名>[:
<标签名>]
说明:
如果只指定了镜像的名称,则默认会获取laster标签标记的镜像。
例如,获取centos:
latess镜像的代码如下。
[root@master~]#dockerpullcentos:
latest
(2)查看镜像信息。
命令格式:
dockerimages[选项][<镜像名>][:
<标签名>]
dockerimages命令的常用选项如下。
①-a:
列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层)。
②-f:
显示满足条件的镜像。
③-q:
只显示镜像ID。
例如,列出本地镜像的代码如下。
[root@localhost~]#dockerimages
(3)查找镜像。
命令格式:
dockersearch[选项]TERM
dockersearch命令的常用选项如下。
①--automated:
默认为False,即显示automatedbuild镜像。
②--no-trunc:
默认为False,即显示完整的镜像描述。
③-s:
列出收藏数不小于指定值的镜像。
例如,查找镜像名为centos的镜像的代码如下。
[root@localhost~]#dockersearchcentos
(4)标记镜像。
命令格式:
dockertag[镜像名]:
[原标签名][镜像名]:
[新标签名]
例如,将centos:
latest镜像标记为centos:
test镜像。
[root@localhost~]#dockertagcentos:
latestcentos:
test
(5)删除镜像。
命令格式:
dockerrmi[选项]镜像1[镜像2...]
dockerrmi命令的常用选项如下。
①-f:
强制删除。
②--no-prune:
不移除该镜像的过程镜像,默认是移除该镜像的过程镜像的。
例如,列出本地主机的所有镜像,并删除镜像名为mysql:
latest的镜像的代码如下。
[root@localhost~]#dockerrmimysql:
latest
//等价于dockerrmimysql
(6)镜像的导入和导出。
利用dockersave命令和dockerload命令可实现镜像的导入和导出。
例如,将ubuntu:
latest镜像导出生成ubuntu.tar文件的代码如下。
[root@localhost~]#dockersave-oubuntu.tarubuntu:
latest
例如,将ubuntu.tar文件导入的代码如下。
[root@localhost~]#dockerload--inputubuntu.tar
(7)上传镜像。
命令格式:
dockerpush[镜像名]:
[标签名]
例如,上传本地镜像centos:
test至镜像仓库的代码如下。
[root@localhost~]#dockerpushcentos:
test
2.构建Docker私有仓库
利用registry镜像构建Docker私有仓库
任务2.2创建定制的Docker镜像
【相关知识】
2.2.1通过commit命令创建镜像
构建Docker镜像有以下两种方法。
(1)使用dockercommit命令手动构建。
(2)使用dockerbuild命令和Dockerfile文件进行构建
dockercommit命令只提交容器镜像发生变更的部分,即修改后的容器镜像与当前仓库对应镜像之间的差异部分
DockerDaemon接收到对应的HTTP请求后,需要执行的步骤如下。
(1)根据用户请求判定是否暂停该Docker容器的运行。
(2)将容器的可读写层导出打包,该读写层代表了当前运行容器的文件系统与当初启动容器的镜像之间的差异。
(3)在层存储中注册可读写层差异包。
(4)更新镜像历史信息和rootfs,并据此在镜像存储中创建一个新镜像,记录其元数据。
(5)如果指定了repository信息,则给上述镜像添加标签信息
dockercommit命令的格式如下。
dockercommit[选项]<容器ID或容器名>[<仓库名>[:
<标签>]]
dockercommit命令的常用选项如下。
(1)-a:
提交镜像的作者。
(2)-c:
使用Dockerfile指令来创建镜像。
(3)-m:
提交时的说明文字。
(4)-p:
在提交时,将容器暂停。
dockercommit的缺点:
1、在构建镜像中,由于需要安装相关的软件,可能会造成大量不必要的软件也被安装,如果清理软件不小心,也会导致镜像比较大。
2、利用dockercommit在构建镜像的过程中,由于dockercommit对镜像的操作属于黑箱操作,主要指除了制定镜像的用户知识执行过什么命令,怎么生成镜像的,而其他用户无从得知,将会给后期对镜像维护工作带来很大的困难。
2.2.2利用Dockerfile构建镜像
Dockerfile文件是一个文本文件,也是一个Docker可以解读的脚本文件,在这个脚本文件中记录着用户“创建”镜像过程中需要执行的所有命令。
Dockerfile从FROM命令开始,紧接着是各种方法、命令和参数。
其产出为一个新的可以用于创建容器的镜像。
Dockerfile整体就两类语句组成:
#Comment注释信息
Instructionarguments指令参数,一行一个指令。
说明:
⏹Dockerfile文件名首字母必须大写。
⏹Dockerfile指令不区分大小写,但是为方便和参数做区分,通常指令使用大写字母。
⏹Dockerfile中指令按顺序从上至下依次执行。
⏹Dockerfile中第一个非注释行必须是FROM指令,用来指定制作当前镜像依据的是哪个基础镜像。
⏹Dockerfile中需要调用的文件必须跟Dockerfile文件在同一目录下,或者在其子目录下,父目录或者其它路径无效。
⏹编写Dockerfile文件要求尽可能精简。
其目的是为了尽可能产生数目较少的中间层镜像。
Dockerfile的常用指令如下:
1.FROM指令
FROM是Dockerfile内置命令中唯一一个必填项,共有以下3种用法。
FROM
FROM
FROM
2.MAINTAINER指令
MAINTAINER指令可以放置在Dockerfile命令的任意位置。
该指令用于声明镜像作者,建议放在FROM指令之后。
MAINTAINER指令的格式如下。
MAINTAINER
3.RUN指令
RUN指令是Dockerfile执行命令的核心部分,是用于在镜像中执行命令的指令,它接收命令作为参数并用于创建镜像。
RUN指令有以下两种格式。
格式1:
RUN
格式2:
RUN["executable","param1","param2"]
4.CMD指令
CMD指令与RUN指令基本相似,其指令格式如下。
格式1:
CMD["executable","param1","param2"]
格式2:
CMD["param1","param2"]
格式3:
CMDcommandparam1param2
5.ENTRYPOINT指令
ENTRYPOINT指令类似于CMD指令,但其不会被dockerrun的命令行参数指定的指令所覆盖,且这些命令行参数会被当作参数送给ENTRYPOINT指令指定的程序;但是,如果运行dockerrun时使用了--entrypoint选项,则此选项的参数可当作要运行的程序覆盖ENTRYPOINT指令指定的程序。
ENTRYPOINT指令的格式如下。
格式1:
ENTRYPOINT
格式2:
ENTRYPOINT["
6.ENV指令
ENV指令的主要功能是设置环境变量。
其指令格式如下。
格式1:
ENV
格式2:
ENV
7.ARG指令
ARG指令用于定义构建时需要的参数。
其指令格式如下。
ARG<参数名>[=<默认值>]
8.ADD指令
ADD指令的功能是将主机目录中的文件、目录及一个URL标记的文件复制到镜像中。
其指令格式如下。
格式1:
ADD
格式2:
ADD["
说明:
格式2可以用于处理文件路径有空格的情况。
9.COPY指令
COPY指令和ADD指令的功能及使用方法基本相同,只是COPY指令不会做自动解压工作,其指令格式如下。
格式1:
COPY
格式2:
COPY["
同ADD指令一样,COPY指令格式2也用于处理路径中存在空格的情况。
10.VOLUME指令
VOLUME指令可实现挂载功能,可以将本地文件夹或者其他容器的文件夹挂载到某个容器中,其指令格式如下。
格式1:
VOLUME<路径>
格式2:
VOLUME["<路径1>","<路径2>",…]
11.EXPOSE指令
EXPOSE指令用于声明运行时的容器服务端口,其指令格式如下。
EXPOSE<端口1>[<端口2>...]
12.WORKDIR指令
WORKDIR指令用于设置容器的工作目录,其指令格式如下。
WORKDIR<工作目录>
WORKDIR指令指定的工作目录不存在时,会自动创建该目录。
WORKDIR指令可以为RUN、CMD、ENTRYPOINT、COPY和ADD指令配置工作目录。
授课题目:
项目3D
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Docker 容器 技术 应用 教案