Docker镜像操作
镜像是容器运行时的基础,容器是镜像运行后的形态。镜像是一个包含程序运行必要依赖、环境和代码的只读文件。
镜像的最底层是一个启动文件系统(bootfs)镜像,bootfs的上层镜像叫做根镜像。一般来说,根镜像是一个操作系统(例如 Ubuntu、CentOS)。用户的镜像必须构建与根镜像上,在根镜像上,用户可以构建出各种各样的其他镜像。
镜像的本质就是一系列的文件集合,一层嵌套一层
镜像的写时复制机制
通过 docker run 命令指定一个容器创建镜像时,实际上是在该镜像之上创建一个空的可读写的文件系统层级,可以将这个文件系统层级当成一个临时的镜像来对待,而命令中所指的模版镜像则可以称之为父镜像。父镜像的内容都是以只读的方式挂载进来的,容器会读取共享父镜像的内容,用户所做的所有修改都是在文件系统中,不会对父镜像造成任何影响。当然用户可以通过其他一些手段使修改持久化到父镜像中,这个我们后面会详细介绍到。
简而言之,镜像就是一个固定的不会变化的模版文件,容器是根据这个模版创建出来的,容器会在模版的基础上做一些修改,这些修改本身并不会影响到模版,我们还可以根据模版(镜像)创建出来更多的容器。
镜像查看
docker images
可以查看本地的所有镜像

| 参数 | 说明 |
|---|---|
| REPOSITORY | 仓库名称,仓库一般是用于存放同一类型的镜像。仓库的名称由其创建者指定、若没有,则为 <none> |
| TAG | 用于区分同一仓库中的不同镜像,默认为 latest |
| IMAGE ID | 镜像的唯一标识符 |
| CREATED | 表示镜像创建的时间 |
| SIZE | 表示镜像的大小 |
REPOSITORY 仓库名称有多种形式:
- [namespeace/ubuntu]
这种仓库名称由命名空间和实际的仓库名组成,中间通过 / 隔开。当开发者在 Docker Hub 上创建一个用户时,用户名就是默认的命名空间,这个命令空间是用来区分 Docker Hub 上注册的不同用户或者组织(类似于 GitHub 上用户名的作用),如果想将自己的镜像上传到 Docker Hub 上供别人使用,则必须指定命名空间,否则上传会失败 - [ubuntu]
这种只有仓库名,对于这种没有命名空间的仓库名,可以认为其属于顶级命名空间,该空间的仓库只用于官方的镜像,由 Docker 官方进行管理,但一般会授权给第三方进行开发维护。当然用户自己创建的镜像也可以使用这种命名方式,但是将无法上传到 Docker Hub 上共享 - [hub.c.163.com/library/nginx]
这种指定 url 路径的方式,一般用于非 Docker Hub 上的镜像命名,例如一个第三方服务商提供的镜像或者开发者自己搭建的镜像中心,都可以使用这种命名方式命名
docker images n*
如果镜像过多,也可以用通配符进行筛选
镜像搜索
docker search
该命令用于在 Docker Hub 上所有符合要求的镜像

镜像下载
docker pull
该命令可以先从 Docker Hub 下载需要的镜像,再做其他操作

镜像删除
docker rmi
该命令用于删除镜像,参数为 镜像id 或者 镜像name ,支持多镜像批量删除,多个参数之间用空格隔开
若该镜像被一个容器所依赖,要删除该镜像,得先删除所依赖的容器
