'Howto create docker image tar directly from build step?

I want to create a shareable image which can be docker loaded into another docker installation directly from docker build

e.g.

Dockerfile:

FROM my-app/env as builder
COPY /my-app /my-app
RUN /my-app/build.sh

FROM ubuntu:20.04
COPY --from=builder /my-app/build/my-app.exe /bin
RUN DEBIAN_FRONTEND=noninteractive apt-get update \
    && apt-get install -y --no-install-recommends \
        ***some stuff required at runtime*** \
    && apt-get autoclean \
    && apt-get autoremove \
    && ldconfig
ENTRYPOINT ["my-app.exe"]
CMD ["--help"]

Running something like:

/my-app$ docker build -t my-app/exe .

will produce an image which I can use with

$ docker run my-app/exe

If I want to now share this, I need to do:

$ docker save -o my-app.tar my-app/exe

which creates the archive my-app.tar which can be shared with another system running the same arch/OS and used by:

/my-othersystem/my-app$ docker load < my-app.tar

And

$ docker run my-app/exe

now works on the other system.

HOWEVER

This requires building the image into the build system docker repository then saving the image to a file. I don't plan to run the exeutable on the build system so don't want it taking up space.

You can do:

/my-app$ DOCKER_BUILDKIT=1 docker build --output type=tar,dest=out.tar . 

But this creates a FS, not an image. I want it to be exported as a docker image compatible with docker load directly, is this possible?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source