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. 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. -- Andrea Bolognani / Red Hat / Virtualization