进一步理解镜像
镜像(image)通常是指一系列文件或一个磁盘驱动器的精确副本。镜像文件其实和ZIP压缩包类似,是将特定的一系列文件按照一定的格式制作成单一的文件,方便用户下载和使用,例如一个测试版的操作系统、游戏等。
在云计算环境下,镜像就是一个虚拟机模板,它预先安装基本的操作系统和其他软件,创建虚拟机时首先需要准备一个镜像,然后启动一个或多个该镜像的实例,就创建好虚拟机了。
docker镜像是用于创建docker容器的只读模板,是按照docker要求定制的应用程序,就像软件安装包一样,一个docker镜像可以包括一个应用程序和能够运行它的基本操作系统环境,例如,一个web应用的镜像可以包括服务器软件和用户开发的web应用程序和能够运行它的操作系统环境
docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了运行时准备的一些配置参数。镜像不包含任何动态数据,其内容在构建之后也不会被改变
镜像是创建容器的基础,当运行容器时,如果本地不存在使用的镜像,docker就会自动从docker注册中心拉取
镜像的基本信息和标识

REPOSITORY:镜像仓库名
TAG:镜像标签
IMAGE ID:镜像id,是镜像的唯一标识,可以加上--no-trunc显示完整的镜像id
CREATED:镜像创建的时间
SIZE:镜像的大小
三种标识镜像的方法
1.镜像ID
2.镜像的名称:REPOSITORY : TAG
省略TAG,表示默认使用的最新版(latest)
3.镜像的摘要值:IMAGE[@DIGEST]
镜像描述文件Dockerfile
Dockerfile是一个文本文件,包含了要构建镜像的全部指令,docker通过读取文件中的指令自动构建镜像
父镜像与基础镜像
一个镜像的父镜像是指该镜像的Dockerfile文件中有FROM指定的镜像,所有后续的指令都应用到这个父镜像
基于没有提供FROM指令,或者FROM指令的参数为“scratch”(空白镜像)的Dockerfile所构建的镜像被称为基础镜像
docker官方提供的基础镜像通常是各种Linux发行版的镜像,这些镜像比传统的操作系统镜像文件或者虚拟机镜像文件小得多

镜像的分层结构
传统的分层结构

通过联合文件系统来实现,对于镜像A,用户可以访问file1~file4,第一层是基础镜像,通常是操作系统
优点:
便于修改:直接修改某层,不需要修改整个镜像
共享资源:有着相同环境的应用程序的镜像共享同一个底层镜像,不需要每个镜像都创建一个底层环境,内存也只需要加载同一个底层环境
问题:
会让镜像的层数越来越多,而联合文件系统所允许的层数有限
需要修改大文件时,以文件为粒度的“写时拷贝”需要复制整个大文件进行修改,会影响操作效率
基础镜像需要修改时维护工作量很大
镜像使用者无法对镜像进行审计
基于Dockerfile的镜像分层结构(推荐)
每一层由镜像的Dockerfile指令决定,除了最后一层,每层都是只读的
FROM ubuntu:15.04
COPY . /app
RUN make /app
CMD python /app/app.py
上面的Dockerfile包括四条命令,每个命令创建一个层
FROM指令:从创建一个源自Ubuntu15.04基础镜像层开始
COPY指令:从docker客户端当前目录添加一些文件
RUN指令:使用make命令构建应用程序
CMD指令:指定要在容器执行什么命令
拉取镜像时是每一层独立拉取的,保存在docker本地存储区域
docker操作命令
被操作的镜像对象可以使用上文所述的三种标识镜像的方法
docker较新版本提供了一个统一的镜像操作命令
docker image COMMAND
如docker image pull对应docker pull,docker image rmi对于docker rmi
291

被折叠的 条评论
为什么被折叠?



