Docker 镜像使用

获取镜像

从 Docker Registry 获取镜像的命令是 docker pull 。其命令格式为:

docker pull [选项] [Docker Registry地址]<仓库名>:<标签>
  • Docker Registry地址:地址的格式一般是 <域名/IP>[:端口号] 。默认地址是Docker Hub。
  • 仓库名:如之前所说,这里的仓库名是两段式名称,既 <用户名>/<软件名> 。对于 Docker Hub,如果不给出用户名,则默认为 library ,也就是官方镜像

运行

docker run -it --rm ubuntu:14.04 bash
  • -it :这是两个参数,一个是 -i :交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
  • --rm :这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm 。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。
  • ubuntu:14.04 :这是指用 ubuntu:14.04 镜像为基础来启动容器。
  • bash :放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash。

进入容器后,我们可以在 Shell 下操作,执行任何所需的命令。

列出镜像

$ docker images
REPOSITORY   TAG   IMAGE   ID   CRE

列表包含了仓库名、标签、镜像 ID、创建时间以及所占用的空间。

列出部分镜像

根据仓库名列出镜像

$ docker images ubuntu

列出特定的某个镜像,也就是说指定仓库名和标签

$ docker images ubuntu:16.04

除此以外, docker images 还支持强大的过滤器参数 --filter ,或者简写 -f。比如,我们希望看到在 mongo:3.2 之后建立的镜像,可以用下面的命令:

$ docker images -f since=mongo:3.2

想查看某个位置之前的镜像也可以,只需要把 since 换成 before 即可。此外,如果镜像构建时,定义了 LABEL ,还可以通过 LABEL 来过滤

$ docker images -f label=com.example.version=0.1

删除本地镜像

如果要删除本地的镜像,可以使用 docker rmi 命令,其格式为:

docker rmi [选项] <镜像1> [<镜像2> ...]

注意 docker rm 命令是删除容器,

用 ID、镜像名、摘要删除镜像
    其中, <镜像> 可以是 镜像短 ID(一般取前3个字符以上) 、 镜像长 ID 、 镜像名 或者 镜像摘要

    因为一个镜像可以对应多个标签,因此当我们删除了所指定的标签后,可能还有别的标签指向了这个镜像,如果是这种情况,那么 Delete行为就不会发生。所以并非所有的 docker rmi 都会产生删除镜像的行为,有可能仅仅是取消了某个标签而已。当该镜像所有的标签都被取消了,该镜像很可能会失去了存在的意义,因此会触发删除行为。
    当该镜像所有的标签都被取消了,该镜像很可能会失去了存在的意义,因此会触发删除行为。镜像是多层存储结构,因此在删除的时候也是从上层向基础层方向依次进行判断删除。镜像的多层结构让镜像复用变动非常容易,因此很有可能某个其它镜像正依赖于当前镜像的某一层。这种情况,依旧不会触发删除该层的行为。直到没有任何层依赖当前层时,才会真实的删除当前层。

    除了镜像依赖以外,还需要注意的是容器对镜像的依赖。如果有用这个镜像启动的容器存在(即使容器没有运行) ,那么同样不可以删除这个镜像。


用 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)

 

你可能感兴趣的:(docker)