The Docker CLI
Go to file
Sebastiaan van Stijn d738e7c489
docker info: skip API connection if possible
The docker info output contains both "local" and "remote" (daemon-side) information.
The API endpoint to collect daemon information (`/info`) is known to be "heavy",
and (depending on what information is needed) not needed.

This patch checks if the template (`--format`) used requires information from the
daemon, and if not, omits making an API request.

This will improve performance if (for example), the current "context" is requested
from `docker info` or if only plugin information is requested.

Before:

    time docker info --format '{{range  .ClientInfo.Plugins}}Plugin: {{.Name}}, {{end}}'
    Plugin: buildx, Plugin: compose, Plugin: scan,

    ________________________________________________________
    Executed in  301.91 millis    fish           external
       usr time  168.64 millis   82.00 micros  168.56 millis
       sys time  113.72 millis  811.00 micros  112.91 millis

    time docker info --format '{{json .ClientInfo.Plugins}}'

    time docker info --format '{{.ClientInfo.Context}}'
    default

    ________________________________________________________
    Executed in  334.38 millis    fish           external
       usr time  177.23 millis   93.00 micros  177.13 millis
       sys time  124.90 millis  927.00 micros  123.97 millis

    docker context use remote-ssh-daemon
    time docker info --format '{{.ClientInfo.Context}}'
    remote-ssh-daemon

    ________________________________________________________
    Executed in    1.22 secs   fish           external
       usr time  116.93 millis  110.00 micros  116.82 millis
       sys time  144.36 millis  887.00 micros  143.47 millis

And daemon logs:

    Jul 06 12:42:12 remote-ssh-daemon dockerd[14377]: time="2021-07-06T12:42:12.139529947Z" level=debug msg="Calling HEAD /_ping"
    Jul 06 12:42:12 remote-ssh-daemon dockerd[14377]: time="2021-07-06T12:42:12.140772052Z" level=debug msg="Calling HEAD /_ping"
    Jul 06 12:42:12 remote-ssh-daemon dockerd[14377]: time="2021-07-06T12:42:12.163832016Z" level=debug msg="Calling GET /v1.41/info"

After:

    time ./build/docker info --format '{{range  .ClientInfo.Plugins}}Plugin: {{.Name}}, {{end}}'
    Plugin: buildx, Plugin: compose, Plugin: scan,

    ________________________________________________________
    Executed in  139.84 millis    fish           external
       usr time   76.53 millis   62.00 micros   76.46 millis
       sys time   69.25 millis  723.00 micros   68.53 millis

    time ./build/docker info --format '{{.ClientInfo.Context}}'
    default

    ________________________________________________________
    Executed in  136.94 millis    fish           external
       usr time   74.61 millis   74.00 micros   74.54 millis
       sys time   65.77 millis  858.00 micros   64.91 millis

    docker context use remote-ssh-daemon
    time ./build/docker info --format '{{.ClientInfo.Context}}'
    remote-ssh-daemon

    ________________________________________________________
    Executed in    1.02 secs   fish           external
       usr time   74.25 millis   76.00 micros   74.17 millis
       sys time   65.09 millis  643.00 micros   64.44 millis

And daemon logs:

    Jul 06 12:42:55 remote-ssh-daemon dockerd[14377]: time="2021-07-06T12:42:55.313654687Z" level=debug msg="Calling HEAD /_ping"
    Jul 06 12:42:55 remote-ssh-daemon dockerd[14377]: time="2021-07-06T12:42:55.314811624Z" level=debug msg="Calling HEAD /_ping"

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2021-07-06 17:04:34 +02:00
.circleci circleCI: update docker engine to 20.10.6 2021-06-15 13:34:30 +02:00
.github GH Actions: run CodeQL only on cron-job, not on pull requests 2020-10-01 16:51:28 +02:00
cli docker info: skip API connection if possible 2021-07-06 17:04:34 +02:00
cli-plugins Use golang.org/x/sys/execabs 2021-01-26 17:18:04 +00:00
cmd/docker config: print deprecation warning when falling back to ~/.dockercfg 2021-03-08 16:13:02 +01:00
contrib/completion Document `--validate` daemon option 2021-06-24 15:00:21 +00:00
dockerfiles Bump vndr v0.1.2 2020-10-16 01:32:00 +02:00
docs Deprecate Kubernetes context support 2021-07-01 18:39:00 +02:00
e2e e2e: make sure that os.environ is preserved 2021-06-11 17:46:30 +02:00
experimental docs: remove experimental ipvlan docs, as they were migrated 2021-04-24 13:33:30 +02:00
internal/test Fix container creation time in test/builders 2020-12-16 08:55:29 +07:00
kubernetes Always enable experimental features 2020-10-02 15:59:42 +02:00
man Updated docker attach example. 2021-06-26 18:11:19 -06:00
opts Use net.JoinHostPort() to fix formatting with IPv6 addresses 2021-04-20 11:05:24 +02:00
scripts scripts: Allow skipping windres when WINDRES= (empty string) 2021-04-13 21:29:54 +00:00
service/logs bump gotest.tools v3.0.1 for compatibility with Go 1.14 2020-02-23 00:28:55 +01:00
templates bump gotest.tools v3.0.1 for compatibility with Go 1.14 2020-02-23 00:28:55 +01:00
vendor vendor: github.com/moby/buildkit 9f254e18360a24c2ae47b26f772c3c89533bcbb7 (master / v0.9.0-dev) 2021-06-22 12:12:03 +02:00
.dockerignore dockerfile based binary building 2021-04-06 00:20:21 -07:00
.gitignore update windows resources generation 2021-04-06 00:20:59 -07:00
.golangci.yml Remove now obsolete gometalinter and use golangci-lint instead 2019-10-31 19:22:44 +01:00
.mailmap Update authors and mailmap 2020-08-06 01:58:32 +02:00
AUTHORS Update authors and mailmap 2020-08-06 01:58:32 +02:00
CONTRIBUTING.md Fix broken link in CONTRIBUTING 2020-03-19 15:03:59 +01:00
Dockerfile add windows/arm64 target 2021-04-06 00:21:02 -07:00
Jenkinsfile Jenkinsfile: update old engine version to 19.03 2021-06-15 13:34:28 +02:00
LICENSE Add project files 2017-04-17 17:49:33 -04:00
MAINTAINERS Maintainers: remove Justin and Aaron 2019-12-04 13:08:15 +01:00
Makefile remove unused targets 2021-04-06 00:21:10 -07:00
NOTICE switch kr/pty to creack/pty v1.1.7 2019-07-29 16:45:41 -07:00
README.md update readme with new examples 2021-04-06 00:21:10 -07:00
TESTING.md Update TESTING.md to replace testify by gotest.tools 2018-07-02 09:24:28 +02:00
VERSION Update version to 20.10-dev 2020-10-13 09:37:17 +02:00
appveyor.yml Bump Golang 1.13.15 2020-08-10 17:24:48 +02:00
codecov.yml Fix PR comments 2018-01-03 10:23:32 +01:00
docker-bake.hcl update circleci cross target 2021-04-06 00:21:02 -07:00
docker.Makefile remove unused targets 2021-04-06 00:21:10 -07:00
poule.yml Add github templates and initial poule configuration 2017-05-09 16:57:46 +02:00
vendor.conf vendor: github.com/moby/buildkit 9f254e18360a24c2ae47b26f772c3c89533bcbb7 (master / v0.9.0-dev) 2021-06-22 12:12:03 +02:00

README.md

build status Build Status

docker/cli

This repository is the home of the cli used in the Docker CE and Docker EE products.

Development

docker/cli is developed using Docker.

Build CLI from source:

$ docker buildx bake

Build binaries for all supported platforms:

$ docker buildx bake cross

Build for a specific platform:

$ docker buildx bake --set binary.platform=linux/arm64 

Build dynamic binary for glibc or musl:

$ USE_GLIBC=1 docker buildx bake dynbinary 

Run all linting:

$ make -f docker.Makefile lint

List all the available targets:

$ make help

In-container development environment

Start an interactive development environment:

$ make -f docker.Makefile shell

Legal

Brought to you courtesy of our legal counsel. For more context, please see the NOTICE document in this repo.

Use and transfer of Docker may be subject to certain restrictions by the United States and other governments.

It is your responsibility to ensure that your use and/or transfer does not violate applicable laws.

For more information, please see https://www.bis.doc.gov

Licensing

docker/cli is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.