guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] Creating a docker image with Guix


From: Ludovic Courtès
Subject: Re: [PATCH] Creating a docker image with Guix
Date: Wed, 04 Jan 2017 22:59:01 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux)

Howdy!

Ricardo Wurmus <address@hidden> skribis:

> Ludovic Courtès <address@hidden> writes:
>
>> 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.  :-)
>
> The attached patch adds a Docker export feature, so you can do this:
>
>     docker load < \
>       $(guix archive --export-docker-image=$(readlink -f ~/.guix-profile))

Woow, that was fast!

> Then you can use “docker images” to show the available images.  For some
> reason Docker won’t show the name and tag “guix archive” generates, so
> just take the most recently added image.  Then run it, e.g. like this:
>
>     docker run --rm -ti d11111472905 /bin/emacs
>
> This starts the container and runs “/bin/emacs” interactively.  During
> export “guix archive” also links the item’s “./bin” directory to “/bin”,
> so users can run commands without having to know the long store path.

Awesome!

> I used it successfully to build an Emacs Docker image like this:
>
>     guix environment --ad-hoc coreutils bash emacs-no-x-toolkit
>     docker load < $(guix archive --export-docker-image=$GUIX_ENVIRONMENT)

Be sure to let emacs-devel know.  ;-)

> From d600db91078f28d82324671e3d43acaddc9b9608 Mon Sep 17 00:00:00 2001
> From: Ricardo Wurmus <address@hidden>
> Date: Tue, 3 Jan 2017 16:20:15 +0100
> Subject: [PATCH] guix: Add Docker image export.
>
> * guix/docker.scm: New file.
> * Makefile.am (MODULES): Register it.
> * guix/scripts/archive.scm (show-help, %options, guix-archive): Add
> support for "--export-docker-image".
> * doc/guix.texi (Invoking guix archive): Document it.

Looks great!

> --- a/doc/guix.texi
> +++ b/doc/guix.texi
> @@ -2438,6 +2438,12 @@ Read a list of store file names from the standard 
> input, one per line,
>  and write on the standard output the subset of these files missing from
>  the store.
>  
> address@hidden address@hidden
> address@hidden docker, export
> +Recursively export the specified store directory as a Docker image in
> +tar archive format.  The generated archive can be loaded by Docker using
> address@hidden load}.

Maybe “as a Docker image in tar archive format, as specified in
@uref{http://…, version 1.0 of the Foo Bar Spec}.”

I would be in favor of --format=FMT, where FMT can be one of “nar” or
“docker”.  Maybe there’ll be others in the future.  WDYT?

The paragraph that says “Archives are stored in the “normalized archive”
or “nar” format,“ should be updated.

Also, it seems that ‘-f docker’ would always imply ’-r’, right?  That’s
reasonable but would be worth mentioning.

> +(define (hexencode bv)
> +  "Return the hexadecimal representation of the bytevector BV."
> +  (format #f "~{~2,'0x~}" (bytevector->u8-list bv)))

Maybe use ‘bytevector->base16-string’ from (guix utils) instead.

> +(define spec-version "1.0")

Please add the URL to said spec as a comment.

> +;; TODO: heroically copied from guix/script/pull.scm
> +(define (temporary-directory)

Alternatively, there’s ‘call-with-temporary-directory’ in (guix utils).
:-)

> +          (and (zero? (apply system* "tar" "-cf" "layer.tar"
> +                             (cons "../bin" items)))
> +               (delete-file "../bin"))))

This reminds me we should steal this code of Mark’s sometime:

  https://github.com/spk121/guile100/blob/master/code/tar2.scm

Thank you!

Ludo’.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]