[libvirt-jenkins-ci PATCH] guests: allow for container image inheritance

Daniel P. Berrangé berrange at redhat.com
Wed Apr 29 09:21:37 UTC 2020

On Wed, Apr 29, 2020 at 11:10:41AM +0200, Andrea Bolognani wrote:
> On Tue, 2020-03-31 at 15:28 +0100, Daniel P. Berrangé wrote:
> > Currently when creating a Dockerfile for a container, we include the
> > full set of base packages, along with the packages for the project
> > itself. If building a Perl binding, this would require us to install
> > the base package, libvirt packages and Perl packages. With the use
> > of the "--inherit libvirt-fedora-30" arg, it is possible to have a
> > dockerfile that only adds the Perl packages, getting everything
> > else from the parent image.
> > 
> > For example, a full Dockerfile for libvirt-go would thus be:
> > 
> >   FROM libvirt-centos-7:latest
> > 
> >   RUN yum install -y \
> >           golang && \
> >       yum autoremove -y && \
> >       yum clean all -y
> > 
> > Note there is no need to set ENV either, as that's inherited from the
> > parent container.
> I marked this for review and then kept forgetting to get around to
> it, sorry!
> I like the idea of reusing existing images, as the layering would
> result in significant savings when it comes to disk space and fetch
> times.
> However, as we discussed in the past, there are two possible
> scenarios for subprojects such as libvirt-go:
>   * include dependencies for both libvirt and libvirt-go, then build
>     both projects in the resulting container;
>   * include dependencies for libvirt-go along with distro-provided
>     packages for libvirt, and only build libvirt-go.
> This would cover the former case, but not the latter one. And, if I
> remember correctly, libvirt-go was one of the projects that would
> benefit more from the latter, because it's supposed to be buildable
> against various versions of libvirt.
> So what I think we need is an additional flag that can be used to
> choose one of the two possible behaviors. This wouldn't be limited
> to the Dockerfile generator, since (unlike inheritance) it can apply
> also to VM management.

I think this problem is tangential to container inheritance and so
doesn't need to be dealt with here.

Instead, it should be solved by simply defining another project
"libvirt-devel", or "libvirt-dist" which pulls in the pre-built
distro packages for libvirt.

> As an additional point, we really need to figure out a good way to
> store dependencies between projects into lcitool itself, so that you
> can tell it that you're interested in building eg. libosinfo and it
> will automatically take care of making osinfo-db-tools and osinfo-db
> available to you, either by installing the binary packages or their
> build dependencies. This is not a strict requirement for container
> inheritance, I think, but the more we go on the more this limitation
> is becoming painful.

I'm not really experiencing this as a painpoint from the container CI

|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

More information about the libvir-list mailing list