The Docker CLI
Go to file
Sebastiaan van Stijn 678c2fde98
UX: don't reverse progress-bars when rolling back
Commit 330a003533
introduced "synchronous" service update and rollback, using progress bars to show
current status for each task.

As part of that change, progress bars were "reversed" when doing a rollback, to
indicate that status was rolled back to a previous state.

Reversing direction is somewhat confusing, as progress bars now return to their
"initial" state to indicate it was "completed"; for an "automatic" rollback, this
may be somewhat clear (progress bars "move to the right", then "roll back" if the
update failed), but when doing a manual rollback, it feels counter-intuitive
(rolling back is the _expected_ outcome).

This patch removes the code to reverse the direction of progress-bars, and makes
progress-bars always move from left ("start") to right ("finished").

Before this patch
----------------------------------------

1. create a service with automatic rollback on failure

    $ docker service create --update-failure-action=rollback --name foo --tty --replicas=5 nginx:alpine
    9xi1w3mv5sqtyexsuh78qg0cb
    overall progress: 5 out of 5 tasks
    1/5: running   [==================================================>]
    2/5: running   [==================================================>]
    3/5: running   [==================================================>]
    4/5: running   [==================================================>]
    5/5: running   [==================================================>]
    verify: Waiting 2 seconds to verify that tasks are stable...

2. update the service, making it fail after 3 seconds

    $ docker service update --entrypoint="/bin/sh -c 'sleep 3; exit 1'" foo
    overall progress: rolling back update: 2 out of 5 tasks
    1/5: running   [==================================================>]
    2/5: running   [==================================================>]
    3/5: starting  [============================================>      ]
    4/5: running   [==================================================>]
    5/5: running   [==================================================>]

3. Once the service starts failing, automatic rollback is started; progress-bars now move in the reverse direction;

    overall progress: rolling back update: 3 out of 5 tasks
    1/5: ready     [===========>                                       ]
    2/5: ready     [===========>                                       ]
    3/5: running   [>                                                  ]
    4/5: running   [>                                                  ]
    5/5: running   [>                                                  ]

4. When the rollback is completed, the progressbars are at the "start" to indicate they completed;

    overall progress: rolling back update: 5 out of 5 tasks
    1/5: running   [>                                                  ]
    2/5: running   [>                                                  ]
    3/5: running   [>                                                  ]
    4/5: running   [>                                                  ]
    5/5: running   [>                                                  ]
    rollback: update rolled back due to failure or early termination of task bndiu8a998agr8s6sjlg9tnrw
    verify: Service converged

After this patch
----------------------------------------

Progress bars always go from left to right; also in a rollback situation;

After updating to the "faulty" entrypoint, task are deployed:

    $ docker service update --entrypoint="/bin/sh -c 'sleep 3; exit 1'" foo
    foo
    overall progress: 1 out of 5 tasks
    1/5:
    2/5: running   [==================================================>]
    3/5: ready     [======================================>            ]
    4/5:
    5/5:

Once tasks start failing, rollback is started, and presented the same as a regular
update; progress bars go from left to right;

    overall progress: rolling back update: 3 out of 5 tasks
    1/5: ready     [======================================>            ]
    2/5: starting  [============================================>      ]
    3/5: running   [==================================================>]
    4/5: running   [==================================================>]
    5/5: running   [==================================================>]
    rollback: update rolled back due to failure or early termination of task c11dxd7ud3d5pq8g45qkb4rjx

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2021-06-22 10:28:46 +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 UX: don't reverse progress-bars when rolling back 2021-06-22 10:28:46 +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 Add docs and completion for docker node ls --filter node.label 2021-01-27 14:11:31 +01:00
dockerfiles Bump vndr v0.1.2 2020-10-16 01:32:00 +02:00
docs Fix minor wording 2021-06-04 17:26:28 +07: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 Swap "LABEL maintainer" for the OCI pre-defined "org.opencontainers.image.authors" 2021-05-04 09:48:13 -07: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/coreos/etcd v3.3.25 2021-06-21 14:30:07 +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/coreos/etcd v3.3.25 2021-06-21 14:30:07 +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.