1、Docker镜像管理和定制 镜像是Docker的核心技术之一。本项目通过两个任务,主要介绍了镜像的基本概念和围绕镜像这一核心概念的具体操作,包括如何使用pull命令获取镜像,如何查看本地已有的镜像信息和管理镜像,如何创建用户定制的镜像,以及如何创建私有仓库。知识目标n 了解镜像的基本概念。n 掌握镜像的常用操作命令。n 了解仓库的基本概念。n 掌握镜像仓库的构建及使用方法。n 掌握构建镜像的基本方法。能力目标n 掌握镜像的基本操作。n 掌握镜像仓库的构建方法。查看和管理Docker镜像2.1任务创建定制的Docker镜像2.2任务Docker镜像管理和定制2.1工程师小王编写完Docker安装
2、手册并提交后,经公司审核,公司安排小王继续编写相关技术手册,继续在公司推广该技术。小王决定编写关于Docker镜像命令的操作手册,并完成构建私有仓库的工作。任务2.1 查看和管理Docker镜像 任务要求2.12.1.1 Docker镜像 Docker镜像类似于虚拟机中的镜像,是一个只读的模板,也是一个独立的文件系统,包括运行容器所需的数据。Docker镜像是Docker容器的静态表示,包括Docker容器所要运行的应用代码及运行时的配置。Docker镜像采用分层的方式构建,每个镜像均由一系列的“镜像层”组成。镜像一旦被创建就无法被修改。任务2.1 查看和管理Docker镜像 相关知识2.1图
3、2-1 Docker容器的分层结构任务2.1 查看和管理Docker镜像 相关知识2.1 Docker镜像采用了写时复制(Copy-on-Write)的策略,在多个容器之间共享镜像,每个容器在启动的时候并不需要单独复制一份镜像文件,而是将所有镜像层以只读的方式挂载到一个挂载点,再在上面覆盖一个可读写的容器层。写时复制策略配合分层机制的应用,减少了镜像对磁盘空间的占用和容器启动时间。任务2.1 查看和管理Docker镜像 相关知识2.12.1.2 Docker镜像仓库 镜像仓库是集中存放镜像的地方,分为公共仓库和仓库。仓库注册服务器(Registry)是存放仓库的地方,一个Docker Regi
4、stry中可私有以包含多个仓库,各个仓库根据不同的标签和镜像名管理各种Docker镜像。一个镜像仓库中可以包含同一个软件的不同镜像,利用标签进行区别。可以利用:的格式来指定相关软件镜像的版本。例如,centos:6.5和centos:7.2代表镜像名为centos,利用标签6.5和7.0来区分版本。如果忽略标签,则默认会使用latest进行标记。任务2.1 查看和管理Docker镜像 相关知识2.11Docker公共仓库 Docker Hub是默认的Docker Registry,由Docker公司维护,其中拥有大量高质量的官方镜像,供用户免费上传、下载和使用。但也有提供收费服务的Regist
5、ry。公共仓库Docker Hub具有以下特点。(1)数量大、种类多。(2)稳定、可靠、干净。(3)仓库名称前没有命名空间。任务2.1 查看和管理Docker镜像 相关知识2.12Docker私有仓库 Docker公有仓库虽然优点有很多,但是也存在一些问题。例如,公司企业级的一些私有镜像,由于镜像涉及一些机密的数据和软件,私密性比较强,因此不太适合放在公有仓库中。此外,出于安全考虑,一些公司不允许公司内网服务器环境访问外网,因此无法下载到公有仓库的镜像。为了解决这些问题,可以根据需要搭建私有仓库,存储私有镜像。私有仓库具有以下特点。(1)安全性和私密性高。(2)访问速度快。(3)自主控制、方便
6、存储和可维护性高。任务2.1 查看和管理Docker镜像 相关知识2.11使用Docker的常用命令(1)获取镜像。命令格式:docker pull Docker Registry地址:说明:如果只指定了镜像的名称,则默认会获取laster标签标记的镜像。例如,获取centos:latess镜像的代码如下。rootmaster#docker pull centos:latest任务2.1 查看和管理Docker镜像 任务实现2.1(2)查看镜像信息。命令格式:docker images 选项:docker images命令的常用选项如下。-a:列出本地所有的镜像(含中间映像层,默认情况下,过滤
7、掉中间映像层)。-f:显示满足条件的镜像。-q:只显示镜像ID。例如,列出本地镜像的代码如下。rootlocalhost#docker images任务2.1 查看和管理Docker镜像 任务实现2.1(3)查找镜像。命令格式:docker search 选项 TERM docker search命令的常用选项如下。-automated:默认为False,即显示automated build 镜像。-no-trunc:默认为False,即显示完整的镜像描述。-s:列出收藏数不小于指定值的镜像。例如,查找镜像名为centos的镜像的代码如下。rootlocalhost#docker search
8、 centos任务2.1 查看和管理Docker镜像 任务实现2.1(4)标记镜像。命令格式:docker tag 镜像名:原标签名 镜像名:新标签名 例如,将centos:latest镜像标记为centos:test镜像。rootlocalhost#docker tag centos:latest centos:test任务2.1 查看和管理Docker镜像 任务实现2.1(5)删除镜像。命令格式:docker rmi 选项 镜像1 镜像2.docker rmi命令的常用选项如下。-f:强制删除。-no-prune:不移除该镜像的过程镜像,默认是移除该镜像的过程镜像的。例如,列出本地主机的所
9、有镜像,并删除镜像名为mysql:latest的镜像的代码如下。rootlocalhost#docker rmi mysql:latest /等价于docker rmi mysql任务2.1 查看和管理Docker镜像 任务实现2.1(6)镜像的导入和导出。利用docker save命令和docker load命令可实现镜像的导入和导出。例如,将ubuntu:latest镜像导出生成ubuntu.tar文件的代码如下。rootlocalhost#docker save-o ubuntu.tar ubuntu:latest 例如,将ubuntu.tar文件导入的代码如下。rootlocalhos
10、t#docker load-input ubuntu.tar 任务2.1 查看和管理Docker镜像 任务实现2.1(7)上传镜像。命令格式:docker push 镜像名:标签名 例如,上传本地镜像centos:test至镜像仓库的代码如下。rootlocalhost#docker push centos:test任务2.1 查看和管理Docker镜像 任务实现2.12.构建Docker私有仓库 利用registry镜像构建Docker私有仓库任务2.1 查看和管理Docker镜像 任务实现2.1实训目的(1)掌握Docker镜像的基本操作命令。(2)掌握私有仓库的构建与应用。实训内容(1)
11、在Docker公有仓库中查找centos和ubuntu镜像。(2)将查找到的centos和ubuntu镜像下载到本地主机中。(3)查看本地的镜像列表。(4)实现镜像的导入、导出操作。(5)构建私有仓库。(6)将本地镜像推送到私有仓库中。(7)删除本地镜像。任务2.1 查看和管理Docker镜像 项目实训2.1查看和管理Docker镜像2.1任务创建定制的Docker镜像2.2任务2.2Docker镜像管理和定制小王在编写完Docker镜像基础操作手册后,镜像基础操作手册中所用的镜像均为Docker Hub提供的镜像,在实际应用过程中,存在与实际需求有差异的问题。因此,小王决定在操作手册中添加关
12、于Docker镜像定制的功能,并通过实例进行说明。任务2.2 创建定制的Docker镜像 任务要求2.22.2.1 通过commit命令创建镜像构建Docker镜像有以下两种方法。(1)使用docker commit命令手动构建。(2)使用docker build命令和Dockerfile文件进行构建docker commit命令只提交容器镜像发生变更的部分,即修改后的容器镜像与当前仓库对应镜像之间的差异部分任务2.2 创建定制的Docker镜像 相关知识2.2Docker Daemon接收到对应的HTTP请求后,需要执行的步骤如下。(1)根据用户请求判定是否暂停该Docker容器的运行。(2
13、)将容器的可读写层导出打包,该读写层代表了当前运行容器的文件系统与当初启动容器的镜像之间的差异。(3)在层存储中注册可读写层差异包。(4)更新镜像历史信息和rootfs,并据此在镜像存储中创建一个新镜像,记录其元数据。(5)如果指定了repository信息,则给上述镜像添加标签信息任务2.2 创建定制的Docker镜像 相关知识2.2docker commit命令的格式如下。docker commit选项 :docker commit命令的常用选项如下。(1)-a:提交镜像的作者。(2)-c:使用Dockerfile指令来创建镜像。(3)-m:提交时的说明文字。(4)-p:在提交时,将容器暂
14、停。任务2.2 创建定制的Docker镜像 相关知识2.2docker commit的缺点:1、在构建镜像中,由于需要安装相关的软件,可能会造成大量不必要的软件也被安装,如果清理软件不小心,也会导致镜像比较大。2、利用docker commit在构建镜像的过程中,由于docker commit对镜像的操作属于黑箱操作,主要指除了制定镜像的用户知识执行过什么命令,怎么生成镜像的,而其他用户无从得知,将会给后期对镜像维护工作带来很大的困难。任务2.2 创建定制的Docker镜像 相关知识2.22.2.2 利用Dockerfile构建镜像 Dockerfile文件是一个文本文件,也是一个Docker
15、可以解读的脚本文件,在这个脚本文件中记录着用户“创建”镜像过程中需要执行的所有命令。Dockerfile从FROM命令开始,紧接着是各种方法、命令和参数。其产出为一个新的可以用于创建容器的镜像。Dockerfile整体就两类语句组成:1.#Comment 注释信息2.Instruction arguments 指令参数,一行一个指令。任务2.2 创建定制的Docker镜像 相关知识2.2说明:n Dockerfile文件名首字母必须大写。n Dockerfile指令不区分大小写,但是为方便和参数做区分,通常指令使用大写字母。n Dockerfile中指令按顺序从上至下依次执行。n Docker
16、file中第一个非注释行必须是FROM指令,用来指定制作当前镜像依据的是哪个基础镜像。n Dockerfile中需要调用的文件必须跟Dockerfile文件在同一目录下,或者在其子目录下,父目录或者其它路径无效。n 编写Dockerfile文件要求尽可能精简。其目的是为了尽可能产生数目较少的中间层镜像。任务2.2 创建定制的Docker镜像 相关知识2.2Dockerfile的常用指令如下:1FROM指令FROM是Dockerfile内置命令中唯一一个必填项,共有以下3种用法。FROM FROM:FROM:任务2.2 创建定制的Docker镜像 相关知识2.22MAINTAINER指令 MAI
17、NTAINER指令可以放置在Dockerfile命令的任意位置。该指令用于声明镜像作者,建议放在FROM指令之后。MAINTAINER指令的格式如下。MAINTAINER 任务2.2 创建定制的Docker镜像 相关知识2.23RUN指令 RUN指令是Dockerfile执行命令的核心部分,是用于在镜像中执行命令的指令,它接收命令作为参数并用于创建镜像。RUN指令有以下两种格式。格式1:RUN 格式2:RUN executable,param1,param2任务2.2 创建定制的Docker镜像 相关知识2.24CMD指令CMD指令与RUN指令基本相似,其指令格式如下。格式1:CMD exec
18、utable,param1,param2格式2:CMD param1,param2格式3:CMD command param1 param2任务2.2 创建定制的Docker镜像 相关知识2.25ENTRYPOINT指令 ENTRYPOINT指令类似于CMD指令,但其不会被docker run的命令行参数指定的指令所覆盖,且这些命令行参数会被当作参数送给ENTRYPOINT指令指定的程序;但是,如果运行docker run时使用了-entrypoint选项,则此选项的参数可当作要运行的程序覆盖 ENTRYPOINT指令指定的程序。ENTRYPOINT指令的格式如下。格式1:ENTRYPOINT
19、 格式2:ENTRYPOINT,.任务2.2 创建定制的Docker镜像 相关知识2.26ENV指令ENV指令的主要功能是设置环境变量。其指令格式如下。格式1:ENV 格式2:ENV=.任务2.2 创建定制的Docker镜像 相关知识2.27ARG指令ARG指令用于定义构建时需要的参数。其指令格式如下。ARG=任务2.2 创建定制的Docker镜像 相关知识2.28ADD指令 ADD指令的功能是将主机目录中的文件、目录及一个URL标记的文件复制到镜像中。其指令格式如下。格式1:ADD.格式2:ADD,.说明:格式2可以用于处理文件路径有空格的情况。任务2.2 创建定制的Docker镜像 相关知
20、识2.29COPY指令 COPY指令和ADD指令的功能及使用方法基本相同,只是COPY指令不会做自动解压工作,其指令格式如下。格式1:COPY.格式2:COPY,.同ADD指令一样,COPY指令格式2也用于处理路径中存在空格的情况。任务2.2 创建定制的Docker镜像 相关知识2.210VOLUME指令 VOLUME指令可实现挂载功能,可以将本地文件夹或者其他容器的文件夹挂载到某个容器中,其指令格式如下。格式1:VOLUME 格式2:VOLUME,任务2.2 创建定制的Docker镜像 相关知识2.211EXPOSE指令EXPOSE指令用于声明运行时的容器服务端口,其指令格式如下。EXPOS
21、E .任务2.2 创建定制的Docker镜像 相关知识2.212WORKDIR指令 WORKDIR指令用于设置容器的工作目录,其指令格式如下。WORKDIR WORKDIR指令指定的工作目录不存在时,会自动创建该目录。WORKDIR指令可以为RUN、CMD、ENTRYPOINT、COPY和ADD指令配置工作目录。任务2.2 创建定制的Docker镜像 相关知识2.21利用Commit命令构建镜像2.利用Dockerfile构建镜像任务2.2 创建定制的Docker镜像 任务实现2.2实训目的(1)掌握利用commit命令构建镜像的方法。(2)掌握利用Dockerfile构建镜像的方法。实训内容(1)下载nginx镜像。(2)利用nginx镜像生成容器后,进入容器,并修改主页。(3)使用commit命令构建新镜像。(4)利用新构建的镜像生成容器,并进行测试。(5)建立镜像目录,在该目录中新建Dockerfile文件。(6)利用docker build命令生成镜像。(7)利用新构建的镜像生成容器,并进行测试。任务2.2 创建定制的Docker镜像项目实训 创建定制Docker镜像2.2ThankYOU!
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。