一、配置镜像加速

Ubuntu 16.04+、Debian 8+、CentOS 7

对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)
{
    "bip": "10.10.100.1/24",
    "registry-mirrors": ["https://registry.docker-cn.com"],
    "live-restore": true
}

注意,一定要保证该文件符合 json 规范,否则 Docker 将不能启动。
之后重新启动服务。

Windows 10

在系统右下角托盘 Docker 图标内右键菜单选择 Settings ,打开配置窗口后左侧导航菜单选择 Daemon 。
在 Registry mirrors 一栏中填写加速器地址 https://registry.docker-cn.com ,
之后点击 Apply 保存后 Docker 就会重启并应用配置的镜像地址了。

macOS

在任务栏点击 Docker for mac 应用图标 -> Perferences... -> Daemon -> Registry mirrors。
在列表中填写加速器地址 https://registry.docker-cn.com 。
修改完成之后,点击 Apply & Restart 按钮,Docker 就会重启并应用配置的镜像地址了。

检查加速器是否生效

在命令行执行 docker info ,如果从结果中看到了如下内容,说明配置成功。

Registry Mirrors:
https://registry.docker-cn.com/

二、获取镜像并运行容器

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

Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号] 。默认地址是 Docker Hub。
仓库名:这里的仓库名是两段式名称,即 <用户名>/<软件名> 。如果不给出用户名,则默认为 library ,也就是官方镜像。

比如:
$ docker pull ubuntu:16.04

运行
有了镜像后,我们就能够以这个镜像为基础启动并运行一个容器。以ubuntu:16.04 为例,如果我们打算启动里面的 bash 并且进行交互式操作的话,可以执行下面的命令。

$ docker run -it --rm ubuntu:16.04 /bin/bash

docker run 就是运行容器的命令,这里简要的说明上面用到的参数。
-it :这是两个参数,一个是 -i :交互式操作,一个是 -t 终端。
--rm :这个参数是说容器退出后随之将其删除。
ubuntu:16.04 :这是指用 ubuntu:16.04 镜像为基础来启动容器。
/bin/bash :放在镜像名后的是命令,这里我们希望有个交互式 Shell

最后我们通过 exit 退出了这个容器。

三、列出镜像

要想列出已经下载下来的镜像,可以使用 docker image ls 命令。
列表包含了 仓库名 、 标签 、 镜像 ID 、 创建时间 以及 所占用的空间 。

$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              735f80812f90        3 weeks ago         83.5MB
B
                            00285df0df87        5 days ago          342 M
B

镜像体积
你可以通过以下命令来便捷的查看镜像、容器、数据卷所占用的空间。

$ docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              1                   0                   83.49MB             83.49MB (100%)
Containers          0                   0                   0B                  0B
Local Volumes       0                   0                   0B                  0B
Build Cache         0                   0                   0B                  0B

虚悬镜像
上面的镜像列表中,还可以看到一个特殊的镜像,这个镜像既没有仓库名,也没有标签,均
。:

                            00285df0df87        5 days ago          342 M
B

由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为 的镜像。 docker build 也同样可以导致这种现象。这类无标签镜像也被称为 虚悬镜像(dangling image) ,可以用下面的命令专门显示这类镜像:

$ docker image ls -f dangling=true
REPOSITORY TAG IMAGE ID CREATED SIZE
  00285df0df87 5 days ago 342 MB

一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除。
$ docker image prune

中间层镜像
默认的 docker image ls 列表中只会显示顶层镜像,如果希望显示包括中间层镜像在内的所有镜像的话,需要加 -a 参数
$ docker image ls -a

列出部分镜像

#根据仓库名列出镜像
$ docker image ls ubuntu

#列出特定的某个镜像,也就是说指定仓库名和标签
$ docker image ls ubuntu:16.04

#希望看到在mongo:3.2 之后建立的镜像
$ docker image ls -f since=mongo:3.2

#希望看到在mongo:3.2 之前建立的镜像
$ docker image ls -f before=mongo:3.2

#如果镜像构建时定义了 LABEL ,还可以通过 LABEL 来过滤
$ docker image ls -f label=com.example.version=0.1
...

以特定格式显示

#列出镜像结果,并且只包含镜像ID和仓库名
$ docker image ls --format "{{.ID}}: {{.Repository}}"
735f80812f90: ubuntu
00285df0df87: 

#以表格等距显示,并且有标题行,和默认一样,不过自己定义列:
$ docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
IMAGE ID            REPOSITORY          TAG
735f80812f90        ubuntu              latest
00285df0df87                      

四、删除本地镜像

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

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

比如我们有这么一些镜像:

$ docker image ls
REPOSITORY       TAG           IMAGE ID            CREATED           SIZE
centos           latest        0584b3d2cf6d        3 weeks ago       196.5 MB
redis            alpine        501ad78535f0        3 weeks ago       21.03 MB

用 ID、镜像名、摘要删除镜像redis

使用 镜像短 ID 、 镜像长 ID 、 镜像名 删除镜像。
$ docker image rm 501
$ docker image rm redis

#当然,更精确的是使用 镜像摘要 删除镜像。
$ docker image ls --digests
$ docker image rm node@sha256:b4f0e0bdeb578043c1ea6862f0d40cc4afe32a4a582f3be235a3b164
422be228

注:如果观察上面这几个命令的运行输出信息的话,你会注意到删除行为分为两类,一类是Untagged ,另一类是 Deleted 。
当我们删除镜像的时候,首先需要做的是将满足我们要求的所有镜像标签都取消,这就是我们看到的 Untagged 的信息。因为一个镜像可以对应多个标签,当我们删除了所指定的标签后,可能还有别的标签指向了这个镜像,所以并非所有的 docker image rm 都会产生删除镜像的行为,有可能仅仅是取消了某个标签而已。