Docker镜像是一个只读的docker容器的模版,含有启动docker容器所需的文件系统结构及其内容。这个文件系统就是rootfs。rootfs是Docker容器在启动时内部进程可见文件,即docker容器的根目录,rootfs通常包含一个操作系统运行所需的文件系统。如一个Unix系统中的/usr/bin、/lib/tmp等等。

特点
分层机制。
方便管理。
体积小,直接使得docker在使用中占用资源小。

Image特性-分层
Aufs:Docker 镜像采用分层的方式构建,每个镜像都由一系列的“镜像层”组成。分层结构是docker镜像如此轻量的重要原因,当需要修改容器镜像内的某个文件时,只需要对最上方的读写层进行变动,不覆写下层已有的系统文件。

docker inspect命令查看docker镜像详细信息

Image特性-写时复制
Docker镜像使用写时复制(copy-on-write)策略,在多个容器间共享镜像,每个容器在启动的时候并不需要复制一镜像文件,而是将所有镜像层以只读的方式挂载到一个挂载点,在再上面覆盖一个可读写的容器层。当写入数据时,会把变化的文件内容写到可读写层。

Image特性-内容寻址
在dockerl.10版本后,引入一个重要的特性内容寻址存储机制。新模型对镜像层的内容计算检验和生成一个哈希值,并以此哈希值作为镜像层的唯一标志。

Image特性-联合挂载
联合挂载(union filesystem)技术可以在一个挂载点同时挂载多个文件系统,将挂载点的原目录与被挂载内容进行整合,使得最终可见文件系统将会包含整合之后的各层的文件和目录。

Commit方式制作镜像
语法
docker commit [container的ID] [新的image_name]

过程
运行一个容器实例
docker run -it --name httpd centos:latest /bin/bash //httpd为实例容器名称

容器内安装httpd
yum -y install httpd

制作镜像
docker commit 容器名称 centos:httpd

Build方式制作镜像
通过使用dockerfile可以自定义属于自己的镜像。Dockfile是一种被Docker程序解释的脚本。Dockerfile有自己书写格式和支持的命令,Dockex程序解决这些命令间的依赖关系。
Docker程序将读取Dockerfile,根据指令生成定制的image。它明确的表明image是怎么产生的。

Dockerfile 指令选项
FROM              #指定构建镜像的基础源镜像。
MAINTAINER        #指定创建镜像的用户。
RUN               #是在docker build时执行的命令。
COPY              #复制本地主机文件到镜像中。
ADD               #复制本地主机文件到镜像中,压缩包会被解压。
CMD               #在docker run运行时执行的命令。
EXPOSE            #仅仅只是声明端口。
ENV               #设置环境变量,且只能设置一个。
ENTRYPOINT        #配置容器启动后执行的命令。
VOLUME            #定义匿名数据卷。
WORKDIR           #指定工作目录。
USER              #用于指定执行后续命令的用户和用户组。
ONBUILD           #用于延迟构建命令的执行。

语法
docker build -t 镜像名:镜像TAG Dockerfile文件所在路径
过程
创建工作目录
 mkdir /docker-build && cd /docker-build
创建Dockerfile文件
    vim Dockerfile  #写上之前的例子
 制作镜像
    docker build -t centos:httpd ./