Docker镜像是什么
Docker image 本质上是一个 read-only 只读文件,这个文件包含了文件系统、源码、库文件、依赖、工具等一些运行 application 所必须的文件。我们可以把 Docker image 理解成一个模板, 可以通过这个模板实例化出来很多容器。
image 里面是一层层文件系统 Union FS。联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统。每一层文件系统我们叫做一层 layer,联合文件系统可以对每一层文件系统设置三种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able),但是 docker镜像中每一层文件系统都是只读的。
构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统。一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层把底层遮住了一样。当你使用的时候,你只会看到一个完全的整体,你不知道里面有几层,也不清楚每一层所做的修改是什么。
为什么需要镜像
在部署应用时,通过手工或写一些脚本的方式进行部署。这样部署面临问题就是云端和本地环境一致问题。用户为每个应用打包过程比较繁琐,需要配置等操作,非常费劲。
然而,Docker 镜像就是为了解决这个打包功能。那么,你可能说 Docker 镜像就是个压缩包,是的,你猜对了,它就像一个压缩包文件。它是如何解决 Paas 时代所面临的云端和本地一致性问题?很简单,它是把一个镜像制作成一个完整的操作系统所有文件和对应的目录结构,这样的压缩包是跟你本地和测试环境用的操作系统一摸一样。
docker 最大的贡献就是定义了容器镜像的分层的存储格式 ,docker 镜像技术的基础是联合文件系统(UnionFS),其文件系统是分层的。这样既可以充分利用共享层,又可以减少存储空间占用
docker 镜像提供了一种打包应用程序和预配置服务器环境的便捷方式,可以很方便的
将其用于个人用途或与其他 Docker 用户公开共享。
镜像命令
命令 | 别名 | 功能 |
---|---|---|
docker images | docker image ls docker image list | 列出本地镜像 |
docker tag | docker image tag | 给镜像打标签,常用于推送镜像仓库 |
docker pull | docker image pull | 从镜像仓库中拉取镜像 |
docker push | docker image push | 推送镜像到仓库 |
docker rmi | docker image rm docker image remove | 删除本地镜像 |
docker build | docker image build | 通过dockerfile制作镜像 |
docker save | docker image save | 将指定镜像保存成tar归档文件 |
docker load | docker image load | 导入使用docker save命令导出的镜像 |
docker image insepect | 查看镜像详细信息 | |
docker history | docker image history | 查看镜像历史 |
docker import | docker image import | 从归档文件docker export中创建镜像 |
docker image prune | 删除不使用的镜像 |
docker images
shell
docker images [options] [repository[:tag]]
参数
- -a:列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层)
- --digests:显示镜像的摘要信息
- -f:显示满足条件的镜像
- --formal:指定返回值的模板文件
- --no-trunc:显示完整的镜像信息
- -q:只显示镜像 ID

docker image inspect
查看镜像详细信息
shell
docker image inspect [options] image [image...]

docker tag
标记本地镜像,将其归入某一仓库。
shell
docker tag source_image[:tag] target_image[:tag]

docker rmi
删除镜像,对于使用的镜像需要先清理容器再删除镜像
shell
docker rmi [options] image [image...]
参数
- -f:强制删除
- --no-prune:不移除该镜像的过程镜像,默认移除

docker save
将指定镜像保存成 tar 归档文件
shell
docker save [options] image [image...]
参数
- -o:输出到哪一个文件

docker load
导入使用 docker save 命令导出的镜像。
shell
docker load [options]
参数
- -i:指定导入的文件
- -q:精简输出信息

docker history
显示镜像历史
shell
docker history [options] image
参数
- -H:大小和日期采用人容易读的格式展现
- --no-trunc :显示全部信息,不要隔断
- -q, --quiet:** **只显示镜像 id 信息;

这是构建nginx镜像"盖的楼"(上面提的联合文件系统)
docker image prune
删除不使用的镜像,有两种含义一种是删除悬虚镜像,另一种是删除没被使用的容器。
shell
docker image prune [options]
参数
- -a:删除全部不使用的镜像(也就是没被使用的容器)
- --fitter:指定过滤条件
- -f:强制删除

镜像操作案例
查找镜像
shell
docker search busybox
但是该命令无法查看到tag,因此大多是去docker hub查看
拉取镜像

查看镜像及列表存储信息

查看镜像仓库在本地的存储信息,进入/var/lib/docker/image
目录,查看overlay2/repositories.json
文件
shell
cd /var/lib/docker/image
cat repositories.json

查看镜像详情

查看镜像分层

打标签

推送到仓库

运行容器
删除镜像
先要退出busybox
用docker ps -a
看看
还有镜像没有删除掉
无法让我们删除掉,是因为刚才我们启动了容器去跑这个镜像,所以要把这个容器删除掉
镜像删除成功