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

    Docker命令行参考(5) – docker build从Dockerfile构建镜像

    1. Usage:  docker build [OPTIONS] PATH | URL | –
    2.  
    3. Build an image from a Dockerfile
    4.  
    5. Options:
    6.       –build-arg value         Set build-time variables (default [])
    7.       –cgroup-parent string    Optional parent cgroup for the container
    8.       –cpu-period int          Limit the CPU CFS (Completely Fair Scheduler) period
    9.       –cpu-quota int           Limit the CPU CFS (Completely Fair Scheduler) quota
    10.   -c, –cpu-shares int          CPU shares (relative weight)
    11.       –cpuset-cpus string      CPUs in which to allow execution (0-3, 0,1)
    12.       –cpuset-mems string      MEMs in which to allow execution (0-3, 0,1)
    13.       –disable-content-trust   Skip image verification (default true)
    14.   -f, –file string             Name of the Dockerfile (Default is ‘PATH/Dockerfile’)
    15.       –force-rm                Always remove intermediate containers
    16.       –help                    Print usage
    17.       –isolation string        Container isolation technology
    18.       –label value             Set metadata for an image (default [])
    19.   -m, –memory string           Memory limit
    20.       –memory-swap string      Swap limit equal to memory plus swap: ‘-1’ to enable unlimited swap
    21.       –no-cache                Do not use cache when building the image
    22.       –pull                    Always attempt to pull a newer version of the image
    23.   -q, –quiet                   Suppress the build output and print image ID on success
    24.       –rm                      Remove intermediate containers after a successful build (default true)
    25.       –shm-size string         Size of /dev/shm, default value is 64MB.
    26.                                 The format is `<number><unit>`. `number` must be greater than `0`.
    27.                                 Unit is optional and can be `b` (bytes), `k` (kilobytes), `m` (megabytes),
    28.                                 or `g` (gigabytes). If you omit the unit, the system uses bytes.
    29.   -t, –tag value               Name and optionally a tag in the ‘name:tag’ format (default [])
    30.       –ulimit value            Ulimit options (default [])

    上下文

    Docker从Dockerfile和“上下文”构建镜像。一个构建上下文是位于特定的PATH或URL的文件。构建过程可以引用上下文中的任何文件。例如,可以使用ADD指定引用上下文中的一个文件。
    URL参数可以引用三种类型的资源:Git仓库,预打包的tarball上下文和纯文本文件。

    Git仓库

    当URL参数指向Git仓库的位置时,这个仓库就作为此次的构建上下文。系统使用git clone –depth 1 –recursive命令递归克隆这个仓库和它的子模块。此命令运行在本地主机的临时目录下。当命令执行成功后,这个目录作为上下文发送给Docker daemon。
    在Git URL上可以配置上下文,使用冒号分隔。第一部分指定了将要下载的git仓库以及分支,tag或提交的SHA。第二部分指定一个子目录作为构建上下文。
    例如,下面的命令使用了container分支的docker目录作为上下文。

    1. $ docker build https://github.com/docker/rootfs.git#container:docker

    下面是Git URL可能的所有有效的方式:

    构建语法后缀 使用的提交 使用的上下文
    myrepo.git refs/heads/master /
    myrepo.git#mytag refs/tags/mytag /
    myrepo.git#mybranch refs/heads/mybranch /
    myrepo.git#abcdef sha1 = abcdef /
    myrepo.git#:myfolder refs/heads/master /myfolder
    myrepo.git#master:myfolder refs/heads/master /myfolder
    myrepo.git#mytag:myfolder refs/tags/mytag /myfolder
    myrepo.git#mybranch:myfolder refs/heads/mybranch /myfolder
    myrepo.git#abcdef:myfolder sha1 = abcdef /myfolder

    Tarball上下文

    如果指定一个远程的tarball文件URL,这个URL将发送给daemon。

    1. $ docker build http://server/context.tar.gz

    daemon将在其所运行的主机完成这个URL的下载。docker daemon下载这个context.tar.gz并使用它作为构建上下文。Tarball必须是以标准的tar Unix格式打包并使用‘xz’, ‘bzip2’, ‘gzip’或可识别的格式中的其中一种压缩。

    文本文件

    不指定上下文的话,可以在URL中传递单个Dockerfile或通过STDIN管道传输文件。要从STDIN管道传输一个Dockerfile:

    1. $ docker build – < Dockerfile

    Windows使用Powershell,运行:

    1. Get-Content Dockerfile | docker build –

    如果使用STDIN或指定一个URL指向纯文本文件,系统把内容放置到称为Dockerfile的文件,其中的-f,–file选项将忽略。在这种情况下没有上下文。
    默认下docker build命令在构建上下文的根目录查找Dockerfile文件。使用-f,–file选项可以指定一个其它的文件。这个当同一组文件用于多个构建时会有帮助。path必须是构建上下文内的一个文件。如果指定一个相对路径,那么这个路径就是相对于上下文根目录的。
    在大多数情况下,最好把每个Dockerfile放置到一个空的目录。然后只添加Dockerfile中需要用到的文件。为了提高构建性能,可以使用.dockerignore来排除用不到的文件。
    如果Docker客户端与daemon断开了连接,构建就取消了。这种情况发生在使用CTRL-c中断Docker客户端或Docker客户端被kill。

    示例

    使用PATH构建

    1. $ docker build .
    2.  
    3. Uploading context 10240 bytes
    4. Step 1 : FROM busybox
    5. Pulling repository busybox
    6.  —> e9aa60c60128MB/2.284 MB (100%) endpoint: https://cdn-registry-1.docker.io/v1/
    7. Step 2 : RUN ls -lh /
    8.  —> Running in 9c9e81692ae9
    9. total 24
    10. drwxr-xr-x    2 root     root        4.0K Mar 12  2013 bin
    11. drwxr-xr-x    5 root     root        4.0K Oct 19 00:19 dev
    12. drwxr-xr-x    2 root     root        4.0K Oct 19 00:19 etc
    13. drwxr-xr-x    2 root     root        4.0K Nov 15 23:34 lib
    14. lrwxrwxrwx    1 root     root           3 Mar 12  2013 lib64 -> lib
    15. dr-xr-xr-x  116 root     root           0 Nov 15 23:34 proc
    16. lrwxrwxrwx    1 root     root           3 Mar 12  2013 sbin -> bin
    17. dr-xr-xr-x   13 root     root           0 Nov 15 23:34 sys
    18. drwxr-xr-x    2 root     root        4.0K Mar 12  2013 tmp
    19. drwxr-xr-x    2 root     root        4.0K Nov 15 23:34 usr
    20.  —> b35f4035db3f
    21. Step 3 : CMD echo Hello world
    22.  —> Running in 02071fceb21b
    23.  —> f52f38b7823e
    24. Successfully built f52f38b7823e
    25. Removing intermediate container 9c9e81692ae9
    26. Removing intermediate container 02071fceb21b

    此示例指定PATH为.,所以将tar打包当前目录的所有文件并发送到Docker daemon。PATH用来指定构建上下文的位置。记住daemon可能运行在远程机器,在客户端侧不会解析Dockerfile(当执行docker build时)。意味着发送所有在PATH位置的文件,而不只是在Dockerfile的ADD指令中指定的文件。

    使用URL构建

    1. $ docker build github.com/creack/docker-firefox

    这将克隆GitHub的仓库并使用它作为上下文。仓库根目录的名为Dockerfile的文件作为用来构建镜像的Dockerfile。可以使用git://或git@scheme指定任意的git仓库。

    1. $ docker build -f ctx/Dockerfile http://server/ctx.tar.gz
    2.  
    3. Downloading context: http://server/ctx.tar.gz [===================>]    240 B/240 B
    4. Step 1 : FROM busybox
    5.  —> 8c2e06607696
    6. Step 2 : ADD ctx/container.cfg /
    7.  —> e7829950cee3
    8. Removing intermediate container b35224abf821
    9. Step 3 : CMD /bin/ls
    10.  —> Running in fbc63d321d73
    11.  —> 3286931702ad
    12. Removing intermediate container fbc63d321d73
    13. Successfully built 377c409b35e4

    这个发送了http://server/ctx.tar.gz到docker daemon,然后daemon下载并解压这个tarball。-f ctx/Dockerfile参数指定在ctx.tar.gz的用于构建镜像的Dockerfile。在这个Dockerfile中的任何ADD命令引用本地路径的必须是相对于ctx.tar.gz内的根目录。在上面的示例中,tarball包含了一个目录ctx/,所以ADD ctx/container.cfg /能正常工作。

    使用-构建

    1. $ docker build – < Dockerfile

    这将从STDIN读取一个Dockerfile,没有提供上下文。由于缺少上下文,没有本地目录发送到docker daemon。因此没有上下文,所以Dockerfile ADD指令只能引用一个远程的URL。

    1. $ docker build – < context.tar.gz

    这将从STDIN读取一个压缩文件作为上下文构建镜像。支持的格式有bzip2, gzip和xz.

    Tag镜像(-t)

    1. $ docker build -t vieux/apache:2.0 .

    这个构建出来的镜像名称为vieux/apache,tag为2.0。
    可以应用多个tag到一个镜像。例如,可以应用latest tag到一个新建的镜像,再添加另一个tag来关联一个特定的版本。例如tag一个镜像为whenry/fedora-jboss:latest和whenry/fedora-jboss:v2.1,使用如下命令:

    1. $ docker build -t whenry/fedora-jboss:latest -t whenry/fedora-jboss:v2.1 .

    Docker命令行参考(4) – docker inspect显示容器或镜像相关信息

    1. Usage:  docker inspect [OPTIONS] CONTAINER|IMAGE|TASK [CONTAINER|IMAGE|TASK…]
    2.  
    3. Return low-level information on a container, image or task
    4.  
    5.   -f, –format       Format the output using the given go template
    6.   –help             Print usage
    7.   -s, –size         Display total file sizes if the type is container
    8.                      values are "image" or "container" or "task"
    9.   –type             Return JSON for specified type, (e.g image, container or task)

    默认情况下,以JSON数组格式输出所有结果。如果容器和镜像有相同的名称,当没有指定类型时将返回容器的JSON信息。如果指定了格式,给定的模式将格式化每个结果。
    Go’s text/template描述了这个格式的所有细节。

    示例

    大多数情况,可以非常简单地从JSON取任何的字段。

    获取实例IP地址

    1. $ docker inspect –format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}’ $INSTANCE_ID

    获取实例MAC地址

    1. $ docker inspect –format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}’ $INSTANCE_ID

    获取实例日志路径

    1. $ docker inspect –format='{{.LogPath}}’ $INSTANCE_ID

    获取任务镜像名称

    1. $ docker inspect –format='{{.Container.Spec.Image}}’ $INSTANCE_ID

    列出所有绑定的端口

    可以在结果中循环数组和映射以产生简单的文本输出:

    1. $ docker inspect –format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}’ $INSTANCE_ID

    查找一个指定的端口映射

    当字段名以一个数字开头时,.Field语法就失效了,不过可以用模板语言的index函数实现。.NetworkSettings.Ports区块包含内部端口映射到外部地址/端口对象列表的映射。要获取数字公共端口,可以使用索引查找特定端口映射,然后索引0包含其中的第一个对象。 然后我们要求HostPort字段获取公共地址。

    1. $ docker inspect –format='{{(index (index .NetworkSettings.Ports "8787/tcp") 0).HostPort}}’ $INSTANCE_ID

    获取JSON格式的子区块

    如果请求一个字段本身是一个包含其他字段的结构,默认情况下你会得到内部值的Go样式转储。Docker添加了一个模板函数json,它可以应用于以JSON格式获取结果。

    1. $ docker inspect –format='{{json .Config}}’ $INSTANCE_ID

    Docker命令行参考(3) – docker info显示系统范围信息

    1. Usage:  docker info
    2.  
    3. Display system-wide information
    4.  
    5. Options:
    6.       –help   Print usage

    这个命令显示有关docker安装的系统信息。显示的信息包括内核版本,容器和镜像的数量。镜像的数量显示的是无重复的镜像数量。使用不同名称tag同一样镜像算一个镜像。
    基于使用的存储驱动,会显示额外的信息,例如存储池名称,数据文件,元数据文件,已用的数据空间,总的数据空间,已用的元数据空间和总的元数据空间。
    数据文件是用来存储镜像的,元数据文件则存储关于那些存储镜像的元数据。当首次启动docker时,将在挂载到/var/lib/docker的数据卷分配数据空间和元数据空间。

    示例

    显示docker系统信息:
    下面是运行在ubuntu的daemon输出样本,使用的是overlay存储驱动并且是两个节点集群的其中一个节点:

    1. $ docker -D info
    2. Containers: 14
    3.  Running: 3
    4.  Paused: 1
    5.  Stopped: 10
    6. Images: 52
    7. Server Version: 1.12.0-dev
    8. Storage Driver: overlay
    9.  Backing Filesystem: extfs
    10. Logging Driver: json-file
    11. Cgroup Driver: cgroupfs
    12. Plugins:
    13.  Volume: local
    14.  Network: bridge null host overlay
    15. Swarm:
    16.  NodeID: 0gac67oclbxq7
    17.  Is Manager: true
    18.  Managers: 2
    19.  Nodes: 2
    20. Runtimes: default
    21. Default Runtime: default
    22. Security Options: apparmor seccomp
    23. Kernel Version: 4.4.0-21-generic
    24. Operating System: Ubuntu 16.04 LTS
    25. OSType: linux
    26. Architecture: x86_64
    27. CPUs: 24
    28. Total Memory: 62.86 GiB
    29. Name: docker
    30. ID: I54V:OLXT:HVMM:TPKO:JPHQ:CQCD:JNLC:O3BZ:4ZVJ:43XJ:PFHZ:6N2S
    31. Docker Root Dir: /var/lib/docker
    32. Debug mode (client): true
    33. Debug mode (server): true
    34.  File Descriptors: 59
    35.  Goroutines: 159
    36.  System Time: 2016-04-26T10:04:06.14689342-04:00
    37.  EventsListeners: 0
    38. Http Proxy: http://test:test@localhost:8080
    39. Https Proxy: https://test:test@localhost:8080
    40. No Proxy: localhost,127.0.0.1,docker-registry.somecorporation.com
    41. Username: svendowideit
    42. Registry: https://index.docker.io/v1/
    43. WARNING: No swap limit support
    44. Labels:
    45.  storage=ssd
    46.  staging=true
    47. Insecure registries:
    48.  myinsecurehost:5000
    49.  127.0.0.0/8

    全局-D选项通知docker命令输出调试信息。
    下面的示例显示运行在Red Hat Enterprise Linux系统的daemon的输出信息。使用的是devicemapper存储驱动。

    1. $ docker info
    2. Containers: 14
    3.  Running: 3
    4.  Paused: 1
    5.  Stopped: 10
    6. Untagged Images: 52
    7. Server Version: 1.10.3
    8. Storage Driver: devicemapper
    9.  Pool Name: docker-202:2-25583803-pool
    10.  Pool Blocksize: 65.54 kB
    11.  Base Device Size: 10.74 GB
    12.  Backing Filesystem: xfs
    13.  Data file: /dev/loop0
    14.  Metadata file: /dev/loop1
    15.  Data Space Used: 1.68 GB
    16.  Data Space Total: 107.4 GB
    17.  Data Space Available: 7.548 GB
    18.  Metadata Space Used: 2.322 MB
    19.  Metadata Space Total: 2.147 GB
    20.  Metadata Space Available: 2.145 GB
    21.  Udev Sync Supported: true
    22.  Deferred Removal Enabled: false
    23.  Deferred Deletion Enabled: false
    24.  Deferred Deleted Device Count: 0
    25.  Data loop file: /var/lib/docker/devicemapper/devicemapper/data
    26.  Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
    27.  Library Version: 1.02.107-RHEL7 (2015-12-01)
    28. Execution Driver: native-0.2
    29. Logging Driver: json-file
    30. Plugins:
    31.  Volume: local
    32.  Network: null host bridge
    33. Kernel Version: 3.10.0-327.el7.x86_64
    34. Operating System: Red Hat Enterprise Linux Server 7.2 (Maipo)
    35. OSType: linux
    36. Architecture: x86_64
    37. CPUs: 1
    38. Total Memory: 991.7 MiB
    39. Name: ip-172-30-0-91.ec2.internal
    40. ID: I54V:OLXT:HVMM:TPKO:JPHQ:CQCD:JNLC:O3BZ:4ZVJ:43XJ:PFHZ:6N2S
    41. Docker Root Dir: /var/lib/docker
    42. Debug mode (client): false
    43. Debug mode (server): false
    44. Username: xyz
    45. Registry: https://index.docker.io/v1/
    46. Insecure registries:
    47.  myinsecurehost:5000
    48.  127.0.0.0/8

    Docker命令行参考(2) – dockerd启动docker daemon

    用法:

    1. Usage: dockerd [OPTIONS]
    2.  
    3. A self-sufficient runtime for containers.
    4.  
    5. Options:
    6.  
    7.       –add-runtime=[]                       Register an additional OCI compatible runtime
    8.       –api-cors-header                      Set CORS headers in the remote API
    9.       –authorization-plugin=[]              Authorization plugins to load
    10.       -b, –bridge                           Attach containers to a network bridge
    11.       –bip                                  Specify network bridge IP
    12.       –cgroup-parent                        Set parent cgroup for all containers
    13.       –cluster-advertise                    Address or interface name to advertise
    14.       –cluster-store                        URL of the distributed storage backend
    15.       –cluster-store-opt=map[]              Set cluster store options
    16.       –config-file=/etc/docker/daemon.json  Daemon configuration file
    17.       –containerd                           Path to containerd socket
    18.       -D, –debug                            Enable debug mode
    19.       –default-gateway                      Container default gateway IPv4 address
    20.       –default-gateway-v6                   Container default gateway IPv6 address
    21.       –default-runtime=runc                 Default OCI runtime for containers
    22.       –default-ulimit=[]                    Default ulimits for containers
    23.       –disable-legacy-registry              Disable contacting legacy registries
    24.       –dns=[]                               DNS server to use
    25.       –dns-opt=[]                           DNS options to use
    26.       –dns-search=[]                        DNS search domains to use
    27.       –exec-opt=[]                          Runtime execution options
    28.       –exec-root=/var/run/docker            Root directory for execution state files
    29.       –fixed-cidr                           IPv4 subnet for fixed IPs
    30.       –fixed-cidr-v6                        IPv6 subnet for fixed IPs
    31.       -G, –group=docker                     Group for the unix socket
    32.       -g, –graph=/var/lib/docker            Root of the Docker runtime
    33.       -H, –host=[]                          Daemon socket(s) to connect to
    34.       –help                                 Print usage
    35.       –icc=true                             Enable inter-container communication
    36.       –insecure-registry=[]                 Enable insecure registry communication
    37.       –ip=0.0.0.0                           Default IP when binding container ports
    38.       –ip-forward=true                      Enable net.ipv4.ip_forward
    39.       –ip-masq=true                         Enable IP masquerading
    40.       –iptables=true                        Enable addition of iptables rules
    41.       –ipv6                                 Enable IPv6 networking
    42.       -l, –log-level=info                   Set the logging level
    43.       –label=[]                             Set key=value labels to the daemon
    44.       –live-restore                         Enables keeping containers alive during daemon downtime
    45.       –log-driver=json-file                 Default driver for container logs
    46.       –log-opt=map[]                        Default log driver options for containers
    47.       –max-concurrent-downloads=3           Set the max concurrent downloads for each pull
    48.       –max-concurrent-uploads=5             Set the max concurrent uploads for each push
    49.       –mtu                                  Set the containers network MTU
    50.       –oom-score-adjust=-500                Set the oom_score_adj for the daemon
    51.       -p, –pidfile=/var/run/docker.pid      Path to use for daemon PID file
    52.       –raw-logs                             Full timestamps without ANSI coloring
    53.       –registry-mirror=[]                   Preferred Docker registry mirror
    54.       -s, –storage-driver                   Storage driver to use
    55.       –selinux-enabled                      Enable selinux support
    56.       –storage-opt=[]                       Storage driver options
    57.       –swarm-default-advertise-addr         Set default address or interface for swarm advertised address
    58.       –tls                                  Use TLS; implied by –tlsverify
    59.       –tlscacert=~/.docker/ca.pem           Trust certs signed only by this CA
    60.       –tlscert=~/.docker/cert.pem           Path to TLS certificate file
    61.       –tlskey=~/.docker/key.pem             Path to TLS key file
    62.       –tlsverify                            Use TLS and verify the remote
    63.       –userland-proxy=true                  Use userland proxy for loopback traffic
    64.       –userns-remap                         User/Group setting for user namespaces
    65.       -v, –version                          Print version information and quit

    以上选项值为[]可以指定多次。dockerd是管理容器的常驻进程。daemon和客户端使用了不同的二进制文件。直接键入dockerd执行daemon。

    Daemon socket选项

    docker daemon监听三个不同类型的socket:unix,tcp和fd来处理Docker Remote API请求。
    默认下,unix域名套接字[或IPC套接字]创建在/var/run/docker.sock,需要root权限或用户属于docker组。
    如果需要开放docker daemon远程访问,需要启用tcp套接字。请注意默认的daemon配置没有加密和验证直接就能访问daemon – 应该使用内置的HTTPS加密的socket,或在它前面放置一个安全的web代理。可以使用-H tcp://0.0.0.0:2375在所有网络接口上监听2375端口,也可以使用-H tcp://192.168.59.103:2375在指定的网络接口监听。一般约定使用端口2375来监听非加密请求,使用2376来监听加密请求。

    注意:如果使用了HTTPS加密套接字,记住只支持TLS1.0和以上版本的协议。SSLv3协议和之前的版本由于安全原因不再支持。

    在基于systemd的系统,可以通过systemd socket activation使用dockerd -H fd://与daemon通信。使用fd://在大多数情况工作良好,不过也可以指定一个单独的sockets:dockerd -H fd://。如果指定的socket activated文件没有找到,docker将退出。
    可以指定多次-H选项来设置docker监听多个sockets:

    1. # listen using the default unix socket, and on 2 specific IP addresses on this host.
    2. $ sudo dockerd -H unix:///var/run/docker.sock -H tcp://192.168.59.106 -H tcp://10.10.10.2

    如果docker client没有指定-H选项,它将尝试查找环境变量DOCKER_HOST。

    1. $ docker -H tcp://0.0.0.0:2375 ps
    2. # or
    3. $ export DOCKER_HOST="tcp://0.0.0.0:2375"
    4. $ docker ps
    5. # both are equal

    设置环境变量DOCKER_TLS_VERIFY为任何一个非空值,等同于–tlsverify参数。如下是等效的:

    1. $ docker –tlsverify ps
    2. # or
    3. $ export DOCKER_TLS_VERIFY=1
    4. $ docker ps

    Docker客户端将遵守HTTP_PROXY,HTTPS_PROXY和NO_PROXY环境变量(或其小写版本)。 HTTPS_PROXY优先于HTTP_PROXY。

    绑定docker到另一个host/port或unix socket

    警告:更改默认的docker daemon绑定到一个TCP端口或Unix docker用户组会允许非root用户获取daemon的root访问权限,这将增加安全风险。确保仔细控制docker的访问权限。如果绑定到一个TCP端口,那么能够访问此端口的用户将对docker的完全的访问权限;所以不建议在一个开放的网络绑定端口。

    使用-H参数可以使docker daemon监听在指定IP和端口。默认监听unix:///var/run/docker.sock只允许root用户在本地连接。可以设置0.0.0.0:2375或指定一个主机IP来给所有人访问权限,不过这不推荐因为这非常不安全。
    类似的,docker客户端可以使用-H连接到一个自定义端口。Linux上docker客户端默认连接到unix:///var/run/docker.sock,windows连接到tcp://127.0.0.1:2376。
    -H接受如下的格式:

    1. tcp://[host]:[port][path] or unix://path

    例如:

  • tcp:// -> 监听tcp的127.0.0.1,当TLS加密启用时使用2376端口,否则使用2375端口。
  • tcp://host:2375 -> 监听在tcp的host:2375
  • tcp://host:2375/path -> 监听在tcp的host:2375并添加前缀路径到所有请求。
  • unix://path/to/socket -> 监听unix socket,路径为path/to/socket。
  • 当-H为空时,与没有指定-H选项时的默认值一样。
    -H也接受TCP绑定的简短格式:host: 或 host:port 或 :port
    以daemon模式运行docker:

    1. $ sudo <path to>/dockerd -H 0.0.0.0:5555 &

    下载ubuntu镜像:

    1. $ docker -H :5555 pull ubuntu

    可以使用多个-H,例如,既监听TCP也监听unix socket

    1. # Run docker in daemon mode
    2. $ sudo <path to>/dockerd -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock &
    3. # Download an ubuntu image, use default Unix socket
    4. $ docker pull ubuntu
    5. # OR use the TCP port
    6. $ docker -H tcp://127.0.0.1:2375 pull ubuntu

    daemon DNS选项

    为所有docker容器设置DNS服务器,使用:

    1. $ sudo dockerd –dns 8.8.8.8

    为所有docker容器设置DNS search domain,使用:

    1. $ sudo dockerd –dns-search example.com

    Insecure registries

    Docker把私有的registry分为安全或不安全的。下面章节,我们用registry表示私有的registry,myregistry:5000作为私有的registry的示例。
    一个安全的registry使用TLS且它的CA证书副本在docker主机的/etc/docker/certs.d/myregistry:5000/ca.crt。一个不安全的registry不使用TLS或使用了TLS,但其CA证书没有在docker daemon指定的路径或是错误的CA。
    默认下,docker假设所有的,除了本地的,registry是安全的。如果Docker假设这个registry是安全的,那与一个不安全的registry通信是不可能的。为了与一个不安全的registry通信,docker daemon要求以下面两种格式其中一种指定–insecure-registry:

  • –insecure-registry myregistry:5000 告诉docker daemon myregistry:5000是不安全的registry。
  • –insecure-registry 10.1.0.0/16 告诉docker daemon所有的registry域名解析出的IP地址在这个IP范围的registry是不安全的。
  • 这个参数可以使用多次来指定多个不安全的registry。
    如果一个不安全的registry没有标记为不安全的,docker pull,docker push和docker search将会得到一个错误来提示用户使用安全的registry或在daemon设置–insecure-registry参数。
    本地的registry,那么解析出来的IP在127.0.0.0/8范围的,从Docker 1.3.2起就自动标记为不安全的registry。不推荐依赖这个,因为未来版本可能会更改。
    启用–insecure-registry,允许非加密或不被信任的通信,在运行一个本地registry会有用。不过,因为这会产生安全漏洞,它只应该作为测试目的。 为了提高安全性,用户应该将CA添加到其系统的受信任CA列表中,而不是启用–insecure-registry。

    daemon配置文件

    –config-file允许设置JSON格式的daemon配置文件。这个文件使用与选项一样的名称作为key,除了那么允许多个值的选项,那就使用这个选项名称的复数,如label选项,使用labels作为key。
    在配置文件的选项设置不能与命令行的选项设置冲突。如果一个选项在配置文件和命令行设置了,docker daemon将会启动失败。我们这样做是为了避免在配置文件重载时,会静默忽略对此选项的修改。

    Docker命令行参考(1) – Docker Engine命令行用法

    要列出可用的命令,运行不带参数的docker或执行docker help:

    1. $ docker
    2. Usage: docker [OPTIONS] COMMAND [arg…]
    3.        docker [ –help | -v | –version ]
    4.  
    5. A self-sufficient runtime for containers.
    6.  
    7. Options:
    8.  
    9.   –config=~/.docker              Location of client config files
    10.   -D, –debug                     Enable debug mode
    11.   -H, –host=[]                   Daemon socket(s) to connect to
    12.   -h, –help                      Print usage
    13.   -l, –log-level=info            Set the logging level
    14.   –tls                           Use TLS; implied by –tlsverify
    15.   –tlscacert=~/.docker/ca.pem    Trust certs signed only by this CA
    16.   –tlscert=~/.docker/cert.pem    Path to TLS certificate file
    17.   –tlskey=~/.docker/key.pem      Path to TLS key file
    18.   –tlsverify                     Use TLS and verify the remote
    19.   -v, –version                   Print version information and quit
    20.  
    21. Commands:
    22.     attach    Attach to a running container
    23.     # […]

    取决于你的docker系统配置,可能需要在每个docker命令前加sudo。要避免docker使用sudo,可以创建一个unix组,称为docker,并添加用户到这个组。

    环境变量

    docker命令行支持以下环境变量:

  • DOCKER_API_VERSION 使用的API版本[如1.19]
  • DOCKER_CONFIG 客户端配置文件路径
  • DOCKER_CERT_PATH 验证密钥文件路径
  • DOCKER_DRIVER 使用的驱动
  • DOCKER_HOST 连接到的Daemon socket
  • DOCKER_NOWARN_KERNEL_VERSION 避免Linux内核不适合Docker的警告。
  • DOCKER_RAMDISK 设置这个将禁用pivot_root
  • DOCKER_TLS_VERIFY 当设置时Docker使用TLS并验证远程。
  • DOCKER_CONTENT_TRUST 设置时Docker使用notary来签名和验证镜像。
  • DOCKER_CONTENT_TRUST_SERVER Notary server的URL。
  • DOCKER_TMPDIR docker临时文件路径。
  • 由于docker使用Go开发,你也可以使用Go运行时使用的环境变量。特别是,下面这些会有用:

  • HTTP_PROXY
  • HTTPS_PROXY
  • NO_PROXY
  • 这些Go环境变量是区分大小写的。

    配置文件

    默认下,docker命令行把它的配置文件存储到你的$HOME目录下的.docker文件中。不过你可以通过DOCKER_CONFIG环境变量或–config命令行选项来指定一个不同的路径。如果两个都指定了,那么–config选项将覆盖DOCKER_CONFIG环境变量。例如:

    1. docker –config ~/testconfigs/ ps

    指示当docker执行ps命令时使用在~/testconfigs/目录下的配置文件。
    Docker管理配置目录中的大多数文件,建议不要修改它们。不过可以修改config.json文件来控制docker命令行为的某些方面。
    目前可以使用环境变量或命令行选项来更改docker命令行为。也可以使用config.json中的选项来修改一些相同的行为。当使用这些机制时,必须记住它们的优先级。命令行选项覆盖环境变量,环境变量覆盖在config.json文件中的属性。
    config.json文件存储几个以JSON编码的属性:
    HttpHeaders属性指定一些请求头,来包括在从Docker客户端发送到daemon的消息中。Docker不会尝试解析或理解这些请求头;它仅仅把它们放置在消息中。Docker不会允许这些请求头修改已经存在的请求头。
    psFormat属性指定docker ps的默认输出格式。当docker ps没有指定–format选项时,Docker客户端使用这个属性。如果这个属性没有设置,客户端恢复为默认表格式。