moby--moby/daemon/images
Sebastiaan van Stijn 51c7992928
API: add "prune" events
This patch adds a new "prune" event type to indicate that pruning of a resource
type completed.

This event-type can be used on systems that want to perform actions after
resources have been cleaned up. For example, Docker Desktop performs an fstrim
after resources are deleted (https://github.com/linuxkit/linuxkit/tree/v0.7/pkg/trim-after-delete).

While the current (remove, destroy) events can provide information on _most_
resources, there is currently no event triggered after the BuildKit build-cache
is cleaned.

Prune events have a `reclaimed` attribute, indicating the amount of space that
was reclaimed (in bytes). The attribute can be used, for example, to use as a
threshold for performing fstrim actions. Reclaimed space for `network` events
will always be 0, but the field is added to be consistent with prune events for
other resources.

To test this patch:

Create some resources:

    for i in foo bar baz; do \
        docker network create network_$i \
        && docker volume create volume_$i \
        && docker run -d --name container_$i -v volume_$i:/volume busybox sh -c 'truncate -s 5M somefile; truncate -s 5M /volume/file' \
        && docker tag busybox:latest image_$i; \
    done;

    docker pull alpine
    docker pull nginx:alpine

    echo -e "FROM busybox\nRUN truncate -s 50M bigfile" | DOCKER_BUILDKIT=1 docker build -

Start listening for "prune" events in another shell:

    docker events --filter event=prune

Prune containers, networks, volumes, and build-cache:

    docker system prune -af --volumes

See the events that are returned:

    docker events --filter event=prune
    2020-07-25T12:12:09.268491000Z container prune  (reclaimed=15728640)
    2020-07-25T12:12:09.447890400Z network prune  (reclaimed=0)
    2020-07-25T12:12:09.452323000Z volume prune  (reclaimed=15728640)
    2020-07-25T12:12:09.517236200Z image prune  (reclaimed=21568540)
    2020-07-25T12:12:09.566662600Z builder prune  (reclaimed=52428841)

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2020-07-28 12:41:14 +02:00
..
cache.go Accept platform spec on container create 2020-03-20 16:10:36 -07:00
image.go Accept platform spec on container create 2020-03-20 16:10:36 -07:00
image_builder.go Accept platform spec on container create 2020-03-20 16:10:36 -07:00
image_commit.go Move ImageService to new package 2018-02-26 16:49:37 -05:00
image_delete.go Accept platform spec on container create 2020-03-20 16:10:36 -07:00
image_events.go Accept platform spec on container create 2020-03-20 16:10:36 -07:00
image_exporter.go Move ImageService to new package 2018-02-26 16:49:37 -05:00
image_history.go Accept platform spec on container create 2020-03-20 16:10:36 -07:00
image_import.go Move ImageService to new package 2018-02-26 16:49:37 -05:00
image_inspect.go Accept platform spec on container create 2020-03-20 16:10:36 -07:00
image_prune.go API: add "prune" events 2020-07-28 12:41:14 +02:00
image_pull.go goimports: fix imports 2019-09-18 12:56:54 +02:00
image_push.go Revert "Remove the rest of v1 manifest support" 2019-06-18 00:36:01 +00:00
image_search.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
image_search_test.go Switch from x/net/context -> context 2018-04-23 13:52:44 -07:00
image_tag.go Accept platform spec on container create 2020-03-20 16:10:36 -07:00
image_unix.go Move ImageService to new package 2018-02-26 16:49:37 -05:00
image_windows.go Move ImageService to new package 2018-02-26 16:49:37 -05:00
images.go Accept platform spec on container create 2020-03-20 16:10:36 -07:00
locals.go goimports: fix imports 2019-09-18 12:56:54 +02:00
service.go Replace errors.Cause() with errors.Is() / errors.As() 2020-04-29 00:28:41 +02:00