Ludovic Courtès <l...@gnu.org> writes: > Ricardo Wurmus <ricardo.wur...@mdc-berlin.de> skribis: > >> I just played around with Docker and built up a command to create a >> Docker image for Emacs. > > Fun! > >> Can anyone find a more elegant way to do this? >> >> guix environment --ad-hoc \ >> coreutils bash emacs-no-x-toolkit -- \ >> sh -c 'tar -c $(guix gc --requisites $GUIX_ENVIRONMENT) | \ >> docker import -c "ONBUILD RUN [\"$GUIX_ENVIRONMENT/bin/ln\", >> \"-s\", \"$GUIX_ENVIRONMENT/bin\", \"/bin\"]" - emacs-base' \ >> && echo -e "FROM emacs-base\nCMD [\"/bin/emacs\"]" | \ >> docker build - > > What does the resulting image look like?
It’s very hard to tell because this command doesn’t spit out a file that fully represents the image. Instead it modifies some state in /var/lib/docker. > Would it be enough to generate an “Image JSON Description” in this > format: <https://github.com/docker/docker/blob/master/image/spec/v1.md>? No. On Fedora (where I ran the above command) Docker uses the devicemapper backend. “docker build” appears to have created an XFS file system in a file. Different installations use different backends (e.g. direct-lvm or aufs) — this probably means that we should not try to build an image for a particular backend directly. However, there is a “docker save” command to export an image as a tar archive (which can be imported by a docker instance), and the format of the resulting archive looks pretty simple: It contains a couple of JSON files and two “layer.tar” archives. The first contains the files of the base image (i.e. all the /gnu/store stuff), the second contains the added symlink from “/bin” to “/gnu/store/.../bin” (and “/run/secrets”). > I’m not familiar enough with Docker but I’m under the impression that we > should be able to generate an image without even using Docker. :-) Absolutely! Now that I know about “docker save” I’ll give it another try. ~~