Docker命令行参考(15) – docker cp在容器和本地文件系统之间复制文件

  1. Usage:  docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
  2.         docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
  3.  
  4. Copy files/folders between a container and the local filesystem
  5.  
  6. Use ‘-‘ as the source to read a tar archive from stdin
  7. and extract it to a directory destination in a container.
  8. Use ‘-‘ as the destination to stream a tar archive of a
  9. container source to stdout.
  10.  
  11. Options:
  12.   -L, –follow-link   Always follow symbol link in SRC_PATH
  13.       –help          Print usage

docker cp命令复制SRC_PATH的内容到DEST_PATH。可以从容器文件系统复制文件到本地机器或是反过来,从本地文件系统复制文件到容器。如果SRC_PATH或DEST_PATH指定了破折号-,可以从STDIN读取tar归档文件或输出到STDOUT。容器可以是运行或停止状态。SRC_PATH或DEST_PATH可以是文件或目录。

docker cp命令假设容器paths是相对于容器的根目录的。这意味着初始的左斜杠是可选的;compassionate_darwin:/tmp/foo/myfile.txt和compassionate_darwin:tmp/foo/myfile.txt是一样的。本地机器paths可以是一个绝对的或相对的值。这个命令解析本地机器的相对路径为相对于docker cp运行的当前目录。

cp命令行为像Unix cp -a命令,递归复制目录及其权限。文件的所有者设置为目标的用户和主用户组。例如,复制到容器的文件以root用户UID:GID创建。复制到本地机器的文件以调用docker cp命令的用户的UID:GID创建。如果指定-L选项,docker cp则跟随在SRC_PATH的软链接。docker cp不会创建DEST_PATH父级目录。

假设路径分隔符为/,第一个参数为SRC_PATH,第二个为DEST_PATH,它们的行为如下:

  • SRC_PATH指定的是一个文件
    • DEST_PATH不存在
      • 文件保存到DEST_PATH文件
    • DEST_PATH不存在且以/结尾
      • Error condition: the destination directory must exist.
    • DEST_PATH存在且是一个文件
      • 源文件将覆盖目标文件
    • DEST_PATH存在且是一个目录
      • 文件使用原来文件名复制到这个目录
        SRC_PATH
  • SRC_PATH指定的是一个目录
    • DEST_PATH不存在
      • 先创建DEST_PATH这个目录,然后源目录的内容复制到这个目录
    • DEST_PATH存在且是一个文件
      • Error condition: cannot copy a directory to a file
    • DEST_PATH存在且是一个目录
      • SRC_PATH不以/结尾
        • 源目录复制到这个目录
      • SRC_PATH/结尾
        • 源目录的内容将复制到此目录

根据以上规则,命令要求SRC_PATH和DEST_PATH都存在。如果SRC_PATH是本地的软链接,默认下只复制软链接,不复制它指向的文件。要跟随这个软链接,指定-L选项。:冒号用来分隔CONTAINER和它的路径。

Docker命令行参考(14) – docker attach附着到一个运行中的容器

  1. Usage: docker attach [OPTIONS] CONTAINER
  2.  
  3. Attach to a running container
  4.  
  5. Options:
  6.       –detach-keys string   Override the key sequence for detaching a container
  7.       –help                 Print usage
  8.       –no-stdin             Do not attach STDIN
  9.       –sig-proxy            Proxy all received signals to the process (default true)

docker attach命令可以通过使用容器的ID或名称来附着到一个运行中的容器,来查看它的输出或以交互方式控制它。可以同时多次附着同一个容器进程,屏幕共享风格或快速查看进程的进度。

要停止一个容器,使用CTRL-c。此键序列向容器发送SIGKILL信号。如果–sig-proxy为true(默认),CTRL-c发送SIGINT到容器。可以使用CTRL-p CTRL-q键序列与容器分离。
当附着到一个启用tty的容器时,将禁止重定向docker attach命令的标准输入。

当客户諯使用docker attach连接到容器的stdio时,docker使用大约1MB的内存缓冲来最大化应用的吞吐量。如果填充了缓冲,API连接的速度将开始影响进程输出的写入速度,因为如果API连接速度慢时,缓冲区无法及时释放,导致进程等待缓冲区。这里其它应用如SSH类似。所以,不推荐使用attach命令来查看那些运行在前台,产生大量输出进程的日志。而是用户应该使用docker logs命令来查看这些日志。

示例

  1. $ docker run -d –name topdemo ubuntu /usr/bin/top -b
  2. $ docker attach topdemo
  3. top – 02:05:52 up  3:05,  0 users,  load average: 0.01, 0.02, 0.05
  4. Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
  5. Cpu(s):  0.1%us,  0.2%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
  6. Mem:    373572k total,   355560k used,    18012k free,    27872k buffers
  7. Swap:   786428k total,        0k used,   786428k free,   221740k cached
  8.  
  9. PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  10.  1 root      20   0 17200 1116  912 R    0  0.3   0:00.03 top
  11.  
  12.  top – 02:05:55 up  3:05,  0 users,  load average: 0.01, 0.02, 0.05
  13.  Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
  14.  Cpu(s):  0.0%us,  0.2%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
  15.  Mem:    373572k total,   355244k used,    18328k free,    27872k buffers
  16.  Swap:   786428k total,        0k used,   786428k free,   221776k cached
  17.  
  18.    PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  19.        1 root      20   0 17208 1144  932 R    0  0.3   0:00.03 top
  20.  
  21.  
  22.  top – 02:05:58 up  3:06,  0 users,  load average: 0.01, 0.02, 0.05
  23.  Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
  24.  Cpu(s):  0.2%us,  0.3%sy,  0.0%ni, 99.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
  25.  Mem:    373572k total,   355780k used,    17792k free,    27880k buffers
  26.  Swap:   786428k total,        0k used,   786428k free,   221776k cached
  27.  
  28.  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  29.       1 root      20   0 17208 1144  932 R    0  0.3   0:00.03 top
  30. ^C$
  31. $ echo $?
  32. 0
  33. $ docker ps -a | grep topdemo
  34. 7998ac8581f9        ubuntu:14.04        "/usr/bin/top -b"   38 seconds ago      Exited (0) 21 seconds ago                          topdemo

在第二个示例中,可以看到bash进程返回的退出代码由docker attach命令返回给其调用者:

  1. $ docker run –name test -d -it debian
  2. 275c44472aebd77c926d4527885bb09f2f6db21d878c75f0a1c212c03d3bcfab
  3. $ docker attach test
  4. root@f38c87f2a42d:/# exit 13
  5. exit
  6. $ echo $?
  7. 13
  8. $ docker ps -a | grep test
  9. 275c44472aeb        debian:7            "/bin/bash"         26 seconds ago      Exited (13) 17 seconds ago                         test

Docker命令行参考(13) – docker tag给镜像做一个标签

  1. Usage:  docker tag IMAGE[:TAG] IMAGE[:TAG]
  2.  
  3. Tag an image into a repository
  4.  
  5. Options:
  6.       –help   Print usage

一个镜像名称由以斜杠分隔的名称组件组成,及可选的主机名前缀。主机名必须符合标准的DNS规则,不过不能包含下划线。如果名称存在主机名,可以在其后面加一个端口号,格式为:8080。没有不存在主机名,命令就使用默认的docker公共registry registry-1.docker.io。名称组件可以包含小写字符,数字和分隔符。分隔符可以是句点,一个或两个下划线或一个或多个破折号。
一个名称组件不能以分隔符开始或结束。
tag名称可以包含小写字符和大写字符,数字,下划线,名点和破折号。tag名称不能以名点或破折号开头,且最大支持128个字符。

示例

通过ID tag镜像

下面是tag一个id为0e5574283393的本地镜像到“fedora”存储库,tag名称version1.0:

  1. docker tag 0e5574283393 fedora/httpd:version1.0

通过名称tag镜像

使用名称“httpd” tag本地镜像到存储库”fedora”,且其tag名为version1.0

  1. docker tag httpd fedora/httpd:version1.0

注意由于引用httpd的tag名称没有指定,默认引用httpd:latest。

通过名称和tag名称tag一个镜像

为名称为httpd和tag名称为test的本地镜像做标签,其存储库为fedora,标签名为version1.0.test。

  1. docker tag httpd:test fedora/httpd:version1.0.test

tag一个镜像到私有的存储库

要推送一个镜像到一个私有的registry,而不是公共的docker registry,必须指定一个registry主机名和端口来tag此镜像。

  1. docker tag 0e5574283393 myregistryhost:5000/fedora/httpd:version1.0

Docker命令行参考(12) – docker rmi删除镜像

  1. Usage:  docker rmi [OPTIONS] IMAGE [IMAGE…]
  2.  
  3. Remove one or more images
  4.  
  5. Options:
  6.   -f, –force      Force removal of the image
  7.       –help       Print usage
  8.       –no-prune   Do not delete untagged parents

可以使用镜像的短和长ID,它的digest来删除它。如果一个镜像有一个或多个tag引用它,在删除这个镜像之前必须先删除它们。当通过tag删除镜像时,它的digest的引用会自动删除。

  1. $ docker images
  2. REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
  3. test1                     latest              fd484f19954f        23 seconds ago      7 B (virtual 4.964 MB)
  4. test                      latest              fd484f19954f        23 seconds ago      7 B (virtual 4.964 MB)
  5. test2                     latest              fd484f19954f        23 seconds ago      7 B (virtual 4.964 MB)
  6.  
  7. $ docker rmi fd484f19954f
  8. Error: Conflict, cannot delete image fd484f19954f because it is tagged in multiple repositories, use -f to force
  9. 2013/12/11 05:47:16 Error: failed to remove one or more images
  10.  
  11. $ docker rmi test1
  12. Untagged: test1:latest
  13. $ docker rmi test2
  14. Untagged: test2:latest
  15.  
  16. $ docker images
  17. REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
  18. test                      latest              fd484f19954f        23 seconds ago      7 B (virtual 4.964 MB)
  19. $ docker rmi test
  20. Untagged: test:latest
  21. Deleted: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8

如果使用-f参数和指定镜像的短或长ID,那么这个命令将untag和删除所有匹配指定ID的镜像。

  1. $ docker images
  2. REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
  3. test1                     latest              fd484f19954f        23 seconds ago      7 B (virtual 4.964 MB)
  4. test                      latest              fd484f19954f        23 seconds ago      7 B (virtual 4.964 MB)
  5. test2                     latest              fd484f19954f        23 seconds ago      7 B (virtual 4.964 MB)
  6.  
  7. $ docker rmi -f fd484f19954f
  8. Untagged: test1:latest
  9. Untagged: test:latest
  10. Untagged: test2:latest
  11. Deleted: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8

通过digest拉取的镜像没有与之关联的tag:

  1. $ docker images –digests
  2. REPOSITORY                     TAG       DIGEST                                                                    IMAGE ID        CREATED         SIZE
  3. localhost:5000/test/busybox    <none>    sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf   4986bf8c1536    9 weeks ago     2.43 MB

通过它的digest删除一个镜像:

  1. $ docker rmi localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf
  2. Untagged: localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf
  3. Deleted: 4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125
  4. Deleted: ea13149945cb6b1e746bf28032f02e9b5a793523481a0a18645fc77ad53c4ea2
  5. Deleted: df7546f9f060a2268024c8a230d8639878585defcc1bc6f79d2728a13957871b

Docker命令行参考(11) – docker load从tar归档文件或STDIN导入镜像

  1. Usage:  docker load [OPTIONS]
  2.  
  3. Load an image from a tar archive or STDIN
  4.  
  5. Options:
  6.       –help           Print usage
  7.   -i, –input string   Read from tar archive file, instead of STDIN.
  8.                        The tarball may be compressed with gzip, bzip, or xz
  9.   -q, –quiet          Suppress the load output but still outputs the imported images

docker load用来导入由docker save备份的镜像。

  1. $ docker images
  2. REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
  3. $ docker load < busybox.tar.gz
  4. # […]
  5. Loaded image: busybox:latest
  6. $ docker images
  7. REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
  8. busybox             latest              769b9341d937        7 weeks ago         2.489 MB
  9. $ docker load –input fedora.tar
  10. # […]
  11. Loaded image: fedora:rawhide
  12. # […]
  13. Loaded image: fedora:20
  14. # […]
  15. $ docker images
  16. REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
  17. busybox             latest              769b9341d937        7 weeks ago         2.489 MB
  18. fedora              rawhide             0d20aec6529d        7 weeks ago         387 MB
  19. fedora              20                  58394af37342        7 weeks ago         385.5 MB
  20. fedora              heisenbug           58394af37342        7 weeks ago         385.5 MB
  21. fedora              latest              58394af37342        7 weeks ago         385.5 MB

Docker命令行参考(10) – docker save备份镜像到tar文件

  1. Usage:  docker save [OPTIONS] IMAGE [IMAGE…]
  2.  
  3. Save one or more images to a tar archive (streamed to STDOUT by default)
  4.  
  5. Options:
  6.       –help            Print usage
  7.   -o, –output string   Write to a file, instead of STDOUT

输出镜像tar数据流到标准输出。包含了所有父级数据层和所有tag+version或特定的repo:tag。
一般用来备份镜像,然后使用docker load恢复。

  1. $ docker save busybox > busybox.tar
  2. $ ls -sh busybox.tar
  3. 2.7M busybox.tar
  4. $ docker save –output busybox.tar busybox
  5. $ ls -sh busybox.tar
  6. 2.7M busybox.tar
  7. $ docker save -o fedora-all.tar fedora
  8. $ docker save -o fedora-latest.tar fedora:latest

甚至可以转存特定镜像的tag到另一个tag:

  1. $ docker save -o ubuntu.tar ubuntu:lucid ubuntu:saucy

Docker命令行参考(9) – docker import从tarball导入创建镜像

  1. Usage:  docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
  2.  
  3. Import the contents from a tarball to create a filesystem image
  4.  
  5. Options:
  6.   -c, –change value     Apply Dockerfile instruction to the created image (default [])
  7.       –help             Print usage
  8.   -m, –message string   Set commit message for imported image

可以指定一个URL或-[破折号]直接从STDIN获取数据。URL可以是指向包含文件系统的归档文件 (.tar, .tar.gz, .tgz, .bzip, .tar.xz, 或 .txz) ,或者是docker主机的一个单独的文件。如果指定的是归档文件,docker将解压到容器的根目录下。如果指定的是一个单独文件,必须是主机上的绝对路径。要从远程路径导入,指定以http://或https://协议开头的URL。
–change选项将应用Dockerfile指令到要创建的镜像。支持的Dockerfile指令有:CMD|ENTRYPOINT|ENV|EXPOSE|ONBUILD|USER|VOLUME|WORKDIR。

示例

从远程路径导入

下面创建一个无tag的新镜像。

  1. $ docker import http://example.com/exampleimage.tgz

从本地文件导入

通过管道和STDIN导入:

  1. $ cat exampleimage.tgz | docker import – exampleimagelocal:new

带提交信息导入:

  1. $ cat exampleimage.tgz | docker import –message "New image imported from tarball" – exampleimagelocal:new

从本地归档文件导入:

  1. $ docker import /path/to/exampleimage.tgz

从本地目录导入

  1. $ sudo tar -c . | docker import – exampleimagedir

使用新配置从本地目录导入

  1. $ sudo tar -c . | docker import –change "ENV DEBUG true" – exampleimagedir

Docker命令行参考(8) – docker images列出镜像

  1. Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]
  2.  
  3. List images
  4.  
  5. Options:
  6.   -a, –all             Show all images (default hides intermediate images)
  7.       –digests         Show digests
  8.   -f, –filter value    Filter output based on conditions provided (default [])
  9.                         – dangling=(true|false)
  10.                         – label=<key> or label=<key>=<value>
  11.                         – before=(<image-name>[:tag]|<image-id>|<image@digest>)
  12.                         – since=(<image-name>[:tag]|<image-id>|<image@digest>)
  13.       –format string   Pretty-print images using a Go template
  14.       –help            Print usage
  15.       –no-trunc        Don’t truncate output
  16.   -q, –quiet           Only show numeric IDs

默认下docker images显示所有顶层的镜像,它们的仓库,tag和它们的大小。
docker镜像有中间数据层来提高可重用性,减小硬盘占用和通过允许每一个步骤缓存来加速docker build。这些中间层默认不显示。
SIZE列显示的是该镜像和其所有父镜像累积的空间大小。这也是在Docker save镜像时创建的Tar文件的内容使用的磁盘空间。
如果一个镜像有多个存储库名称或tag,将会列出多次。

列出最近创建的镜像

  1. $ docker images
  2. REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
  3. <none>                    <none>              77af4d6b9913        19 hours ago        1.089 GB
  4. committ                   latest              b6fa739cedf5        19 hours ago        1.089 GB
  5. <none>                    <none>              78a85c484f71        19 hours ago        1.089 GB
  6. docker                    latest              30557a29d5ab        20 hours ago        1.089 GB
  7. <none>                    <none>              5ed6274db6ce        24 hours ago        1.089 GB
  8. postgres                  9                   746b819f315e        4 days ago          213.4 MB
  9. postgres                  9.3                 746b819f315e        4 days ago          213.4 MB
  10. postgres                  9.3.5               746b819f315e        4 days ago          213.4 MB
  11. postgres                  latest              746b819f315e        4 days ago          213.4 MB

基于名称和tag列出镜像

docker images命令接受一个可选的[REPOSITORY[:TAG]]参数来限制列出匹配参数的镜像。如果只指定存储库名称没有指定tag,docker images命令列出匹配的存储库名称的所有镜像。
例如,列出所有”java”镜像,命令如下:

  1. $ docker images java
  2. REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
  3. java                8                   308e519aac60        6 days ago          824.5 MB
  4. java                7                   493d82594c15        3 months ago        656.3 MB
  5. java                latest              2711b1d6f3aa        5 months ago        603.9 MB

[REPOSITORY[:TAG]]值必须是完全匹配的。例如,docker images jav不会匹配镜像java。
如果REPOSITORY和TAG都提供了,只列出出匹配repository和tag的镜像。例如:

  1. $ docker images java:8
  2. REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
  3. java                8                   308e519aac60        6 days ago          824.5 MB

如果没有匹配REPOSITORY[:TAG],列表为空:

  1. $ docker images java:0
  2. REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

列出完整的镜像ID

  1. $ docker images –no-trunc
  2. REPOSITORY                    TAG                 IMAGE ID                                                                  CREATED             SIZE
  3. <none>                        <none>              sha256:77af4d6b9913e693e8d0b4b294fa62ade6054e6b2f1ffb617ac955dd63fb0182   19 hours ago        1.089 GB
  4. committest                    latest              sha256:b6fa739cedf5ea12a620a439402b6004d057da800f91c7524b5086a5e4749c9f   19 hours ago        1.089 GB
  5. <none>                        <none>              sha256:78a85c484f71509adeaace20e72e941f6bdd2b25b4c75da8693efd9f61a37921   19 hours ago        1.089 GB
  6. docker                        latest              sha256:30557a29d5abc51e5f1d5b472e79b7e296f595abcf19fe6b9199dbbc809c6ff4   20 hours ago        1.089 GB
  7. <none>                        <none>              sha256:0124422dd9f9cf7ef15c0617cda3931ee68346455441d66ab8bdc5b05e9fdce5   20 hours ago        1.089 GB
  8. <none>                        <none>              sha256:18ad6fad340262ac2a636efd98a6d1f0ea775ae3d45240d3418466495a19a81b   22 hours ago        1.082 GB
  9. <none>                        <none>              sha256:f9f1e26352f0a3ba6a0ff68167559f64f3e21ff7ada60366e2d44a04befd1d3a   23 hours ago        1.089 GB
  10. tryout                        latest              sha256:2629d1fa0b81b222fca63371ca16cbf6a0772d07759ff80e8d1369b926940074   23 hours ago        131.5 MB
  11. <none>                        <none>              sha256:5ed6274db6ceb2397844896966ea239290555e74ef307030ebb01ff91b1914df   24 hours ago        1.089 GB

列出镜像digests

使用v2或之后格式的镜像有一个称为digest的内容可寻址标识符。只要用来生成镜像的输入没有更改,这个digest值是可预测的。要列出镜像的digest值,使用–digests参数:

  1. $ docker images –digests
  2. REPOSITORY                         TAG                 DIGEST                                                                    IMAGE ID            CREATED             SIZE
  3. localhost:5000/test/busybox        <none>              sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf   4986bf8c1536        9 weeks ago         2.43 MB

过滤

过滤标志-f or –filter格式为key=value。如果超过一个过滤,那么就传递多个标志[如–filter “foo=bar” –filter “bif=baz”]。
目前支持的过滤有:

  • dangling [布尔值 true或false]
  • label (label=或label==)
  • before ([:], or ) – 过滤出指定镜像之前的镜像
  • since ([:], or ) – 过滤出指定镜像之后的镜像
  • 无tag镜像(dangling)

    1. $ docker images –filter "dangling=true"
    2.  
    3. REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    4. <none>              <none>              8abc22fbb042        4 weeks ago         0 B
    5. <none>              <none>              48e5f45168b9        4 weeks ago         2.489 MB
    6. <none>              <none>              bf747efa0e2f        4 weeks ago         0 B
    7. <none>              <none>              980fe10e5736        12 weeks ago        101.4 MB
    8. <none>              <none>              dea752e4e117        12 weeks ago        101.4 MB
    9. <none>              <none>              511136ea3c5a        8 months ago        0 B

    这会显示无tag镜像。当新构建的镜像占用这个镜像ID的repo:tag时,会出现这些图像,将其保留为:或untagged。可以使用如下命令批量删除这类镜像:

    1. $ docker rmi $(docker images -f "dangling=true" -q)
    2.  
    3. 8abc22fbb042
    4. 48e5f45168b9
    5. bf747efa0e2f
    6. 980fe10e5736
    7. dea752e4e117
    8. 511136ea3c5a

    Labeled镜像

    label过滤匹配指定label的镜像。
    下面示例列出匹配com.example.version label的镜像。

    1. $ docker images –filter "label=com.example.version"
    2.  
    3. REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
    4. match-me-1          latest              eeae25ada2aa        About a minute ago   188.3 MB
    5. match-me-2          latest              dea752e4e117        About a minute ago   188.3 MB

    下面示例列出匹配label名称为com.example.version,值为1.0的镜像。

    1. $ docker images –filter "label=com.example.version=1.0"
    2. REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
    3. match-me            latest              511136ea3c5a        About a minute ago   188.3 MB

    Before

    before过滤出指定镜像之前创建的镜像。例如:

    1. $ docker images
    2. REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
    3. image1              latest              eeae25ada2aa        4 minutes ago        188.3 MB
    4. image2              latest              dea752e4e117        9 minutes ago        188.3 MB
    5. image3              latest              511136ea3c5a        25 minutes ago       188.3 MB

    使用before过滤将得到:

    1. $ docker images –filter "before=image1"
    2. REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
    3. image2              latest              dea752e4e117        9 minutes ago        188.3 MB
    4. image3              latest              511136ea3c5a        25 minutes ago       188.3 MB

    Since

    since过滤出指定镜像之后创建的镜像。例如:

    1. $ docker images
    2. REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
    3. image1              latest              eeae25ada2aa        4 minutes ago        188.3 MB
    4. image2              latest              dea752e4e117        9 minutes ago        188.3 MB
    5. image3              latest              511136ea3c5a        25 minutes ago       188.3 MB

    使用since过滤将得到:

    1. $ docker images –filter "since=image3"
    2. REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
    3. image1              latest              eeae25ada2aa        4 minutes ago        188.3 MB
    4. image2              latest              dea752e4e117        9 minutes ago        188.3 MB

    格式

    –format选项使用Go模板打印出指定格式的列表。
    Go模板的有效占位符如下所示:

  • .ID – 镜像ID
  • .Repository – 镜像存储库名称
  • .Tag – 镜像tag
  • .Digest – 镜像digest
  • .CreatedSince – 从镜像创建到现在过去的时间
  • .CreatedAt – 镜像创建的时间
  • .Size – 镜像硬盘占用大小
  • 当使用–format选项时,images命令输出模板声明的完全相同的数据,或者使用table指令,将包括列标题。
    如下显示无列标题的数据:

    1. $ docker images –format "{{.ID}}: {{.Repository}}"
    2. 77af4d6b9913: <none>
    3. b6fa739cedf5: committ
    4. 78a85c484f71: <none>
    5. 30557a29d5ab: docker
    6. 5ed6274db6ce: <none>
    7. 746b819f315e: postgres
    8. 746b819f315e: postgres
    9. 746b819f315e: postgres
    10. 746b819f315e: postgres

    显示带列标题的数据:

    1. $ docker images –format "table {{.ID}}t{{.Repository}}t{{.Tag}}"
    2. IMAGE ID            REPOSITORY                TAG
    3. 77af4d6b9913        <none>                    <none>
    4. b6fa739cedf5        committ                   latest
    5. 78a85c484f71        <none>                    <none>
    6. 30557a29d5ab        docker                    latest
    7. 5ed6274db6ce        <none>                    <none>
    8. 746b819f315e        postgres                  9
    9. 746b819f315e        postgres                  9.3
    10. 746b819f315e        postgres                  9.3.5
    11. 746b819f315e        postgres                  latest

    Docker命令行参考(7) – docker history显示一个镜像的历史

    1. Usage:  docker history [OPTIONS] IMAGE
    2.  
    3. Show the history of an image
    4.  
    5. Options:
    6.       –help       Print usage
    7.   -H, –human      Print sizes and dates in human readable format (default true)
    8.       –no-trunc   Don’t truncate output
    9.   -q, –quiet      Only show numeric IDs

    显示docker:latest镜像是如何构建的:

    1. $ docker history docker
    2. IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
    3. 3e23a5875458        8 days ago          /bin/sh -c #(nop) ENV LC_ALL=C.UTF-8            0 B
    4. 8578938dd170        8 days ago          /bin/sh -c dpkg-reconfigure locales &&    loc   1.245 MB
    5. be51b77efb42        8 days ago          /bin/sh -c apt-get update && apt-get install    338.3 MB
    6. 4b137612be55        6 weeks ago         /bin/sh -c #(nop) ADD jessie.tar.xz in /        121 MB
    7. 750d58736b4b        6 weeks ago         /bin/sh -c #(nop) MAINTAINER Tianon Gravi <ad   0 B
    8. 511136ea3c5a        9 months ago                                                        0 B                 Imported from –

    显示Apache是如何添加到Fedora base镜像的:

    1. $ docker history docker:scm
    2. IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
    3. 2ac9d1098bf1        3 months ago        /bin/bash                                       241.4 MB            Added Apache to Fedora base image
    4. 88b42ffd1f7c        5 months ago        /bin/sh -c #(nop) ADD file:1fd8d7f9f6557cafc7   373.7 MB
    5. c69cab00d6ef        5 months ago        /bin/sh -c #(nop) MAINTAINER Lokesh Mandvekar   0 B
    6. 511136ea3c5a        19 months ago                                                       0 B                 Imported from –

    Docker命令行参考(6) – docker commit提交容器的更改创建新镜像

    1. Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    2.  
    3. Create a new image from a container’s changes
    4.  
    5. Options:
    6.   -a, –author string    Author (e.g., "John Hannibal Smith <[email protected]>")
    7.   -c, –change value     Apply Dockerfile instruction to the created image (default [])
    8.       –help             Print usage
    9.   -m, –message string   Commit message
    10.   -p, –pause            Pause container during commit (default true)

    此命令可以提交一个容器的文件更改或设置到一个新的镜像。这允许你通过运行一个交互shell调试一个容器或输出一个工作集到另一台服务器。通常最好使用Dockerfile以文档化和可维护的方式来管理镜像。
    这个commit操作不会包括在挂载在容器内的volumes的任何数据。
    默认下,当正在提交更改到镜像时,容器的进程将暂停直到提交完成。这减小了在创建提交的过程中数据损坏的可能性。如果不想暂停进程,可以设置–pause选项为false。
    –change选项用来应用Dockerfile指令到将要创建的镜像。支持的Dockerfile指令为CMD|ENTRYPOINT|ENV|EXPOSE|LABEL|ONBUILD|USER|VOLUME|WORKDIR。

    使用新配置提交一个容器

    1. $ docker ps
    2. ID                  IMAGE               COMMAND             CREATED             STATUS              PORTS
    3. c3f279d17e0a        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours
    4. 197387f1b436        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours
    5. $ docker inspect -f "{{ .Config.Env }}" c3f279d17e0a
    6. [HOME=/ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin]
    7. $ docker commit –change "ENV DEBUG true" c3f279d17e0a  svendowideit/testimage:version3
    8. f5283438590d
    9. $ docker inspect -f "{{ .Config.Env }}" f5283438590d
    10. [HOME=/ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin DEBUG=true]

    使用新的CMD和EXPOSE指令提交一个容器

    1. $ docker ps
    2. ID                  IMAGE               COMMAND             CREATED             STATUS              PORTS
    3. c3f279d17e0a        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours
    4. 197387f1b436        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours
    5.  
    6. $ docker commit –change=’CMD ["apachectl", "-DFOREGROUND"]’ -c "EXPOSE 80" c3f279d17e0a  svendowideit/testimage:version4
    7. f5283438590d
    8.  
    9. $ docker run -d svendowideit/testimage:version4
    10. 89373736e2e7f00bc149bd783073ac43d0507da250e999f3f1036e0db60817c0
    11.  
    12. $ docker ps
    13. ID                  IMAGE               COMMAND                 CREATED             STATUS              PORTS
    14. 89373736e2e7        testimage:version4  "apachectl -DFOREGROU"  3 seconds ago       Up 2 seconds        80/tcp
    15. c3f279d17e0a        ubuntu:12.04        /bin/bash               7 days ago          Up 25 hours
    16. 197387f1b436        ubuntu:12.04        /bin/bash               7 days ago          Up 25 hours