第五章-镜像

Docker镜像是什么

每一层文件系统我们叫做一层 layer,联合文件系统可以对每一层文件系统设置三 种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able),但是 docker 镜像中每一层文件系统都是只读的。

构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层 的修改,增加了一层文件系统。一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层把底层遮住了一样。当你使用的时候,你只会看到 一个完全的整体,你不知道里面有几层,也不清楚每一层所做的修改是什么。

镜像命令详解

命令清单

命令别名功能
docker imagesdocker image ls / docker image list列出本地镜像
docker tagdocker image tag给镜像打标签, 可用于推送镜像仓库
docker pulldocker image pull从镜像仓库拉取镜像
docker pushdocker image push推送镜像到仓库
docker rmidocker image rm / docker image remove删除本地镜像
docker builddocker image build通过 dockerfile制作镜像
docker savedocker image save将制定镜像保存成tar归档文件
docker loaddocker image load导入使用 docker save 导出的镜像
docker image inspect 查看镜像的详细信息
docker historydocker image history查看镜像历史
docker importdocker image import从归档文件 docker export 中创建镜像
docker image prune 删除不使用的镜 像

在这一章,我们只详细介绍上面的部分命令,有一些我们会到特定的章节详细讲解。

docker rmi

删除本地某个镜像。

关键参数。

docker save 和 docker load

现在可以把这个镜像加载回来。

关键参数

docker history

其他参数大家都可以尝试。

docker image prune

删除不使用的镜像。

镜像操作案例

实战流程如下所示。

查找镜像
下载镜像
查看镜像及列表存储位置
查看镜像详情
查看镜像详情
查看镜像分层
打标签
推送镜像
运行容器
镜像删除

查找镜像

下载镜像

下载成功。

查看镜像及列表存储位置

东西存在这。

关注这里面的一个一个文件夹,/data/var/lib/docker/image/overlay2/这里面存的是docker的存储驱动。

我们可以看下repositories.json这里面的内容。

可以看到我们是有一个busybox镜像的。

所以东西是存在这里的,列表是在这里面的。

也可以通过这个命令查看镜像的详情。

当然dockerhub上也可以看这些信息。

查看镜像分层

打标签

推送镜像

运行容器

先查看现在有的镜像。

运行容器。

现在就启动这个镜像了。

删除这个镜像

我们可以发现,其实不是删除了这个镜像,而是只是去除了标签而已。

docker rm进一步删除

镜像仓库实战

实战一:离线迁移镜像

现有的镜像如下。

保存下来。

把这个tar包发到另一台服务器后(可以使用scp命令)

然后在另一台服务器使用docker load -i载入这个镜像即可。

实战二:镜像存储的压缩与共享

先拉一个镜像下来。

我们发现拉到本地是141MB

我们看看hub上的大小。

所以,在hub上肯定是进行了一定的压缩的。