Sometimes, you might need to have a slim image with only docker client instead of full docker engine. And since it is not available through package repositories like aptitude here is what you can do instead:

FROM alpine:3.7
RUN apk update && \
    apk add curl && \
    curl -fsSLO && \
    apk del curl && \
    tar -xzvf docker-17.09.0-ce.tgz && \
    mv docker/docker /usr/local/bin && \
    rm -r docker docker-17.09.0-ce.tgz

This will result in an unpacked image of about 25 MB in size.

Interesting thing about packaging docker client is that it is possible to package that pretty much in any image, alpine, busybox, ubuntu, etc. This is only possible because Go language that is used to build docker tools is not using glibc or musl or any other C-library, but directly using syscalls. There are some downsides to it, but in my mind it was the right choice that enabled the possibility to package such binaries with any docker image. I also suspect that Go will play especially well with unikernels because of that.