本节目录:
- 其他生成镜像的方法
- 从 rootfs 压缩包导入
- docker save 和 docker load
- 删除本地镜像
- 用 ID、镜像名、摘要删除镜像
- Untagged 和 Deleted
- 用 docker images 命令来配合
今天可能要出去,所以一大早上就要把今天要学习的内容学完ヾ(◍°∇°◍)ノ゙
其他生成镜像的方法
除了使用 Dockerfile 生成镜像的方法外,由于各种特殊需求和历史原因,还提供了其他方法用以生成镜像
从 rootfs 压缩包导入
格式: docker import [选项]<文件>|
解释: 压缩包可以是本地文件、远程 Web 文件、甚至是从标准输入中得到。 压缩包将会在镜像/目录展开,并直接作为镜像的第一次提交
实践:
比如我们想要创建一个 OpenVZ 的 Ubuntu 14.04 模板的镜像:
|
|
因为命令过长 上面一条命令 我把他分为三行,这条命令下载 .tar.gz 文件,并作为根文件系统展开导入,并保存为镜像 openvz/ubuntu:14.04,导入成功后,docker images
查看镜像,或者docker history openvz/ubuntu:14.04
查看历史
docker save 和 docker load
Docker 还提供 docker save 和 docker load 命令用于将镜像保存为一个 tar 文件,然后传输到另一个位置上,再加载进来
这是在没有 Docker Registry 时的做法,现在已经不推荐,镜像迁移应该直接使用 Docker Registry ,无论是直接使用 Docker Hub 还是使用内网私有 Registry 都可以。
保存镜像
使用 docker save 将镜像保存为归档文件。
实践:
保存镜像命令
问题: windows 不识别 gzip 命令
解决: 下载 gzip for windows 版本
将 alpine-latest.tar.gz 复制到另一个机器上,然后使用下面命令加载镜像
如果我们结合这两个命令以及 ssh 甚至 pv 的话,利用 Linux 强大的管道,我
们可以写一个命令完成从一个机器将镜像迁移到另一个机器,并且带进度条的功
能:
|
|
删除本地镜像
格式: docker rmi [选项]<镜像1>[<镜像2>…]
用 ID、镜像名、摘要删除镜像
实践:
比如我们要删除,apline 镜像,可以执行;
- docker iamges 查看镜像信息
- docker rmi 镜像ID 如果删除不了 加 -f 强制删除
或者 docker ps -a
查看所有 container id ,然后先 停止所有 container ID 然后在删除
- 使用 镜像名,删除
docker rmi 仓库名:标签
- 更准确的使用 镜像摘要删除镜像
docker images –digests
Untagged 和 Deleted
如果仔细发现,删除行为 有两类
- Deleted
- Untagged
前面介绍过,镜像的唯一标识是其 ID 和 摘要
- 我们都知道镜像的唯一标示是 ID 和 摘要 ,而一个镜像可以有更多个标签,因此当我们指定标签删除镜像,如果还有其他标签的对应这个镜像,就不会发生delete 行为,而 untaggged 使我们取消了所有的标签,当所有标签取消后就可以出发 delete 行为
- 镜像之间的依赖,镜像是多层结构,删除的时候也是从上层向基础层方向依次进行判断删除,如果其他镜像依赖于待删除的某一层,也不会触发 delete 效果
- 容器对镜像的依赖,如果有用这个镜像启动的容器存在,那么就不能删除镜像。容器是以镜像为基础添加一层容器存储器,组成的多层存储结构去运行。因此该镜像如果被这个容器所依赖的,就需要先删除容器,在删除镜像
用 docker images 命令来配合
实例:
|
|
删除所有仓库名为 redis 的镜像:
删除所有 mongo:3.2 之前的版本