学习Docker(2017-10-4)

本节目录:
1. 其他生成镜像的方法
- 从 rootfs 压缩包导入
- docker save 和 docker load
2. 删除本地镜像
- 用 ID、镜像名、摘要删除镜像
- Untagged 和 Deleted
- 用 docker images 命令来配合

今天可能要出去,所以一大早上就要把今天要学习的内容学完ヾ(◍°∇°◍)ノ゙

其他生成镜像的方法

除了使用 Dockerfile 生成镜像的方法外,由于各种特殊需求和历史原因,还提供了其他方法用以生成镜像

从 rootfs 压缩包导入

格式: docker import [选项]<文件>||-[<仓库名>[:<标签>]]

解释: 压缩包可以是本地文件、远程 Web 文件、甚至是从标准输入中得到。 压缩包将会在镜像/目录展开,并直接作为镜像的第一次提交

实践:

比如我们想要创建一个 OpenVZ 的 Ubuntu 14.04 模板的镜像:

docker import
 http://download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz
 openvz/ubuntu:14.04

因为命令过长 上面一条命令 我把他分为三行,这条命令下载 .tar.gz 文件,并作为根文件系统展开导入,并保存为镜像 openvz/ubuntu:14.04,导入成功后,docker images查看镜像,或者docker history openvz/ubuntu:14.04查看历史

关于 openVZ

docker save 和 docker load

Docker 还提供 docker save 和 docker load 命令用于将镜像保存为一个 tar 文件,然后传输到另一个位置上,再加载进来

这是在没有 Docker Registry 时的做法,现在已经不推荐,镜像迁移应该直接使用 Docker Registry ,无论是直接使用 Docker Hub 还是使用内网私有 Registry 都可以。

保存镜像
使用 docker save 将镜像保存为归档文件。

实践:

保存镜像命令

docker save apline | gzip > apline-latest.tar.gz

问题: windows 不识别 gzip 命令
解决: 下载 gzip for windows 版本

将 alpine-latest.tar.gz 复制到另一个机器上,然后使用下面命令加载镜像

docker load -i alpine-latest.tar.gz

如果我们结合这两个命令以及 ssh 甚至 pv 的话,利用 Linux 强大的管道,我
们可以写一个命令完成从一个机器将镜像迁移到另一个机器,并且带进度条的功
能:

docker save <镜像名> | bzip2 | pv | ssh <用户名>@<主机名> 'cat | do
cker load'

关于 ssh
关于 pv

删除本地镜像

格式: 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

如果仔细发现,删除行为 有两类
1. Deleted
2. Untagged

前面介绍过,镜像的唯一标识是其 ID 和 摘要

  1. 我们都知道镜像的唯一标示是 ID 和 摘要 ,而一个镜像可以有更多个标签,因此当我们指定标签删除镜像,如果还有其他标签的对应这个镜像,就不会发生delete 行为,而 untaggged 使我们取消了所有的标签,当所有标签取消后就可以出发 delete 行为
  2. 镜像之间的依赖,镜像是多层结构,删除的时候也是从上层向基础层方向依次进行判断删除,如果其他镜像依赖于待删除的某一层,也不会触发 delete 效果
  3. 容器对镜像的依赖,如果有用这个镜像启动的容器存在,那么就不能删除镜像。容器是以镜像为基础添加一层容器存储器,组成的多层存储结构去运行。因此该镜像如果被这个容器所依赖的,就需要先删除容器,在删除镜像

用 docker images 命令来配合

实例:

$ docker rmi $(docker images -q -f dangling=true)

删除所有仓库名为 redis 的镜像:

$ docker rmi $(docker images -q redis)

删除所有 mongo:3.2 之前的版本

$ docker rmi $(docker images -q -f before=mongo:3.2)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值