Docker常用命令(一)

获取镜像

docker pull [选项] [Docker Registry 地址 [:端口号] / ] 仓库名 [:标签]

示例:

$ docker pull ubuntu:16.04

没有给出Docker镜像仓库地址,因此将会从Docker Hub中获取镜像

运行

$ docker run -it --rm \
  ubuntu:16.04 \
  bash

" \ "表示 换行

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

列出镜像

//  列出所有已经下载的镜像
$ docker image ls
//  效果同上条命令
$ docker images

结果:

//仓库名                  标签                 镜像ID              创建时间        所占用的空间
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
ubuntu                   16.04               00fd29ccc6f1        3 weeks ago         111MB
laradock_redis           latest              19a977a11685        3 months ago        107MB
<none>                   <none>              a03f07cc3324        3 months ago        15.5MB
laradock_php-fpm         latest              f4ad9b641995        3 months ago        400MB
laradock_workspace       latest              318c7dc4d367        3 months ago        696MB
laradock_mysql           latest              59affc42159e        3 months ago        343MB
redis                    latest              b6dddb991dfa        3 months ago        107MB
mysql                    8.0                 6cfa8ff69d16        3 months ago        343MB

注:
1、这里的所占空间大小和 Docker Hub 上的镜像大小不同,Docker Hub 中显示的是压缩后的大小。

2、这里的所占空间大小总和,并非实际的硬盘的占有大小,因为Docker镜像是多层存储结构,并且可以继承、复用,因此不同镜像可使用相同的基础镜像。

中间层镜像

默认的 docker image ls 列表中,只会显示顶层镜像,

//  显示包括中间层镜像在内的所有镜像
$ docker image ls -a 

注:
这样会看到很多无标签的镜像,和之后的虚悬镜像不同,这些无标签的镜像很多都是中间层镜像,这些无标签镜像,不能删除,否则会导致上层镜像因为依赖丢失而出错。

列出部分镜像
//  根据仓库名列出镜像
$ docker image ls ubuntu
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               00fd29ccc6f1        3 weeks ago         111MB
ubuntu              15.10               9b9cb95443b5        17 months ago       137MB

//  列出指定镜像
$ docker image ls ubuntu:16.04
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               00fd29ccc6f1        3 weeks ago         111MB

// 显示指定镜像之后的镜像列表(可比对之前的列表)
$ docker image ls -f since=redis
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
ubuntu               16.04               00fd29ccc6f1        3 weeks ago         111MB
laradock_redis       latest              19a977a11685        3 months ago        107MB
<none>               <none>              a03f07cc3324        3 months ago        15.5MB
laradock_php-fpm     latest              f4ad9b641995        3 months ago        400MB
laradock_workspace   latest              318c7dc4d367        3 months ago        696MB
laradock_mysql       latest              59affc42159e        3 months ago        343MB
//  查看之前也可以,把 since 换成 before即可
以特定格式显示
//  显示镜像ID
$ docker image ls -q
00fd29ccc6f1
19a977a11685
a03f07cc3324
f4ad9b641995
318c7dc4d367
59affc42159e

// 自定义结构(使用了Go的模板语法)
$ docker image ls --format "{{.ID}}: {{.Repository}}"
00fd29ccc6f1: ubuntu
19a977a11685: laradock_redis
a03f07cc3324: <none>
f4ad9b641995: laradock_php-fpm
318c7dc4d367: laradock_workspace
59affc42159e: laradock_mysql
b6dddb991dfa: redis

//  以表格等距显示,并且有标题行
$ docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
IMAGE ID            REPOSITORY               TAG
00fd29ccc6f1        ubuntu                   16.04
19a977a11685        laradock_redis           latest
a03f07cc3324        <none>                   <none>
f4ad9b641995        laradock_php-fpm         latest
318c7dc4d367        laradock_workspace       latest
59affc42159e        laradock_mysql           latest
b6dddb991dfa        redis                    latest

镜像、容器、数据卷所在空间

$ docker system df

注:因为需要统计的镜像的大小,所以执行会有些慢。

TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              19                  6                   2.339GB             2.133GB (91%)
Containers          19                  0                   292.9kB             292.9kB (100%)
Local Volumes       17                  0                   0B                  0B
Build Cache                                                 0B                  0B

虚悬镜像

上面的列表中,存在一个特殊的镜像,这个镜像既无仓库名也无标签,均为<none>。
这是由于新旧镜像同名,旧镜像名称被取消,所以出现仓库名、标签都为<none>的镜像,也就是虚悬镜像。

//  检索此类镜像
$ docker image ls -f dangling=true
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              a03f07cc3324        3 months ago        15.5MB

//  删除此类镜像
$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B

注:
再次检索,可能还会有虚悬镜像存在,这是因为有其他镜像依赖。

删除本地镜像

$ docker image rm [选项] <镜像1> [<镜像2> ...]

<镜像>可以是镜像的ID(可以省略后面部分,但要有唯一性)、仓库名、摘要。

REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
ubuntu                   16.04               00fd29ccc6f1        3 weeks ago         111MB
laradock_redis           latest              19a977a11685        3 months ago        107MB
<none>                   <none>              a03f07cc3324        3 months ago        15.5MB
laradock_php-fpm         latest              f4ad9b641995        3 months ago        400MB
laradock_workspace       latest              318c7dc4d367        3 months ago        696MB
laradock_mysql           latest              59affc42159e        3 months ago        343MB
redis                    latest              b6dddb991dfa        3 months ago        107MB

//  删除 laradock_mysql 镜像(取ID的前三个字符)
$ docker image rm 59a
Untagged: laradock_mysql:latest
Deleted: sha256:59affc42159e311116e8505d5012606607109ec7ad8c2c5219fa05c3e1908d2d
Deleted: sha256:3cc7addd185366686786b581d02d88974978b45ecfbe9e836545271d3e7591e0
Deleted: sha256:295affe1cbf149bd05360a6fb9411d575506450f545ce69c08ce700ee341225f
Deleted: sha256:40ff835efbee0a844c96ccb695cb99c4d1f22d44e78ba8cc210423323935f81e
Deleted: sha256:cdb003b7b07a3b2d7809b31d25a77f3ed65bc1dc066f8f4868e5a86e9a77c723
Deleted: sha256:7a38549437804e837bd3cd5073555ce806640a654e011cc8933fb61974b5b2bc
Deleted: sha256:54661a4bf02571f947385c6c1216d9207a54af5127390364c51499df93695717
Deleted: sha256:ebc2d72325235c58372407b2c85c57d514253b88f6f01ecbadd4387f845d7306
Deleted: sha256:a6daead3b1372f15bd02b3e7512ef11030bd2b7d3b641fb54aade329ddb267f7
Deleted: sha256:9689cfa85ce950b075b93d888b105e2aca2b2eed658732a31e20594fcf0ef404

//  使用镜像名删除
$ docker image rm laradock_workspace

//  查看镜像摘要
$ docker image ls --digests
REPOSITORY               TAG                 DIGEST                                                                    IMAGE ID            CREATED             SIZE
ubuntu                   16.04               sha256:fbaf303d18563e57a3c1a0005356ad102509b60884f3aa89ef9a90c0ea5d1212   00fd29ccc6f1        3 weeks ago         111MB
laradock_redis           latest              <none>                                                                    19a977a11685        3 months ago        107MB
<none>                   <none>              <none>                                                                    a03f07cc3324        3 months ago        15.5MB
laradock_php-fpm         latest              <none>                                                                    f4ad9b641995        3 months ago        400MB
laradock_workspace       latest              <none>                                                                    318c7dc4d367        3 months ago        696MB
redis                    latest              sha256:472c9a984607e6194dc2e645d23907738b77bf76ea0abcf870cbde741d5f650a   b6dddb991dfa        3 months ago        107MB

注:
上面命令的运行输出信息
Untagged :表示满足删除条件的镜像标签,都取消,因为一个镜像可以有多个标签,只有当这个镜像的所有标签都取消了,才对触发删除操作,也就是 Deleted 表示的意思。考虑到Docker的多层存储结构,就算是删除操作,也只会删除没有任何镜像的依赖的层。

使用docker image ls 命令配合删除
//  删除所有仓库名为 laradock_php-fpm 的镜像
$ docker image rm $(docker image ls -q laradock_php-fpm)
//  $(docker image ls -q laradock_php-fpm)   返回的是 laradock_php-fpm 镜像的ID
//  注意 -q 的功能,所以是删除指定 ID 的镜像

//  删除所有在 redis 之前的镜像(原理同上)
$ docker image rm $(docker image ls -q -f before=redis)

推荐阅读更多精彩内容

  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 12,982评论 17 146
  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 8,164评论 0 119
  • 原文在此 获取镜像 之前提到过,Docker Hub 上有大量的高质量的镜像可以用,这里我们就说一下怎么获取这些镜...
    若与阅读 955评论 0 3
  • 一、Docker 简介 Docker 两个主要部件:Docker: 开源的容器虚拟化平台Docker Hub: 用...
    R_X阅读 3,231评论 0 27
  • 外婆是我成年以后,第一个故去的亲人。 亲爱的外婆 外婆去世的那天很蹊跷,当时我在学校准备研究生的复试,平时一个月才...
    不系之舟的船长阅读 30评论 0 0