[igt-dev] [PATCH] .gitlab-ci: Reduce Docker images size

Ramotowski, Maciej maciej.ramotowski at intel.com
Thu Mar 5 10:55:26 UTC 2020


Make Dockerfile's more universal.

Reduce size of Ubuntu based images by removing package lists.

Add support for building with build cache and without --squash flag:

 - Using apt-get update alone in a RUN statement causes caching issues
   and subsequent apt-get install instructions fail.

 - When you run an image and generate a container, you add a new
   writable layer (the “container layer”) on top of the underlying
   layers. All changes made to the running container, such as writing
   new files, modifying existing files, and deleting files, are written
   to this thin  writable container layer.

Cc: Arkadiusz Hiler <arkadiusz.hiler at intel.com>
Cc: Petri Latvala <petri.latvala at intel.com>
Signed-off-by: Maciej Ramotowski <maciej.ramotowski at intel.com>
---
 Dockerfile.build-debian         | 39 +++++++---------
 Dockerfile.build-debian-arm64   | 68 ++++++++++++---------------
 Dockerfile.build-debian-armhf   | 67 ++++++++++++--------------
 Dockerfile.build-debian-minimal | 44 +++++++++--------
 Dockerfile.build-debian-mips    | 70 +++++++++++++--------------
 Dockerfile.build-fedora         | 83 ++++++++++++++++-----------------
 6 files changed, 172 insertions(+), 199 deletions(-)

diff --git a/Dockerfile.build-debian b/Dockerfile.build-debian
index b143a532..6cf7a1f0 100644
--- a/Dockerfile.build-debian
+++ b/Dockerfile.build-debian
@@ -7,25 +7,20 @@ FROM $CI_REGISTRY_IMAGE/build-debian-minimal:commit-$CI_COMMIT_SHA
 # just few extra dependencies for building IGT with all the optional components
 # enabled
 
-RUN apt-get update
-RUN apt-get install -y \
-			libunwind-dev \
-			libgsl-dev \
-			libasound2-dev \
-			libxmlrpc-core-c3-dev \
-			libjson-c-dev \
-			libcurl4-openssl-dev \
-			python-docutils \
-			valgrind \
-			peg \
-			libdrm-intel1
-
-# autotools build deps
-RUN apt-get install -y \
-			autoconf \
-			automake \
-			xutils-dev \
-			libtool \
-			make
-
-RUN apt-get clean
+RUN apt-get update && apt-get install -y \
+    autoconf \
+    automake \
+    libasound2-dev \
+    libcurl4-openssl-dev \
+    libdrm-intel1 \
+    libgsl-dev \
+    libjson-c-dev \
+    libtool \
+    libunwind-dev \
+    libxmlrpc-core-c3-dev \
+    make \
+    peg \
+    python-docutils \
+    valgrind \
+    xutils-dev \
+ && rm -rf /var/lib/apt/lists/*
diff --git a/Dockerfile.build-debian-arm64 b/Dockerfile.build-debian-arm64
index 573c7096..924432bd 100644
--- a/Dockerfile.build-debian-arm64
+++ b/Dockerfile.build-debian-arm64
@@ -1,40 +1,34 @@
 FROM debian:buster
 
-RUN apt-get update
-RUN apt-get install -y \
-			flex \
-			bison \
-			pkg-config \
-			x11proto-dri2-dev \
-			python-docutils \
-			valgrind \
-			peg
-
 RUN dpkg --add-architecture arm64
-RUN apt-get update
-RUN apt-get install -y \
-			gcc-aarch64-linux-gnu \
-			libatomic1:arm64 \
-			libpciaccess-dev:arm64 \
-			libkmod-dev:arm64 \
-			libprocps-dev:arm64 \
-			libunwind-dev:arm64 \
-			libdw-dev:arm64 \
-			zlib1g-dev:arm64 \
-			liblzma-dev:arm64 \
-			libcairo-dev:arm64 \
-			libpixman-1-dev:arm64 \
-			libudev-dev:arm64 \
-			libgsl-dev:arm64 \
-			libasound2-dev:arm64 \
-			libjson-c-dev:arm64 \
-			libcurl4-openssl-dev:arm64 \
-			libxrandr-dev:arm64 \
-			libxv-dev:arm64 \
-			meson \
-			libdrm-dev:arm64 \
-			qemu-user \
-			qemu-user-static
-
-
-RUN apt-get clean
+RUN apt-get update && apt-get install -y \
+    bison \
+    flex \
+    gcc-aarch64-linux-gnu \
+    libasound2-dev:arm64 \
+    libatomic1:arm64 \
+    libcairo-dev:arm64 \
+    libcurl4-openssl-dev:arm64 \
+    libdrm-dev:arm64 \
+    libdw-dev:arm64 \
+    libgsl-dev:arm64 \
+    libjson-c-dev:arm64 \
+    libkmod-dev:arm64 \
+    liblzma-dev:arm64 \
+    libpciaccess-dev:arm64 \
+    libpixman-1-dev:arm64 \
+    libprocps-dev:arm64 \
+    libudev-dev:arm64 \
+    libunwind-dev:arm64 \
+    libxrandr-dev:arm64 \
+    libxv-dev:arm64 \
+    meson \
+    peg \
+    pkg-config \
+    python-docutils \
+    qemu-user \
+    qemu-user-static \
+    valgrind \
+    x11proto-dri2-dev \
+    zlib1g-dev:arm64 \
+ && rm -rf /var/lib/apt/lists/*
diff --git a/Dockerfile.build-debian-armhf b/Dockerfile.build-debian-armhf
index 737ca364..3752dc91 100644
--- a/Dockerfile.build-debian-armhf
+++ b/Dockerfile.build-debian-armhf
@@ -1,39 +1,34 @@
 FROM debian:buster
 
-RUN apt-get update
-RUN apt-get install -y \
-			flex \
-			bison \
-			pkg-config \
-			x11proto-dri2-dev \
-			python-docutils \
-			valgrind \
-			peg
-
 RUN dpkg --add-architecture armhf
-RUN apt-get update
-RUN apt-get install -y \
-			gcc-arm-linux-gnueabihf \
-			libatomic1:armhf \
-			libpciaccess-dev:armhf \
-			libkmod-dev:armhf \
-			libprocps-dev:armhf \
-			libunwind-dev:armhf \
-			libdw-dev:armhf \
-			zlib1g-dev:armhf \
-			liblzma-dev:armhf \
-			libcairo-dev:armhf \
-			libpixman-1-dev:armhf \
-			libudev-dev:armhf \
-			libgsl-dev:armhf \
-			libasound2-dev:armhf \
-			libjson-c-dev:armhf \
-			libcurl4-openssl-dev:armhf \
-			libxrandr-dev:armhf \
-			libxv-dev:armhf \
-			meson \
-			libdrm-dev:armhf \
-			qemu-user \
-			qemu-user-static
-
-RUN apt-get clean
+RUN apt-get update && apt-get install -y \
+    bison \
+    flex \
+    gcc-arm-linux-gnueabihf \
+    libasound2-dev:armhf \
+    libatomic1:armhf \
+    libcairo-dev:armhf \
+    libcurl4-openssl-dev:armhf \
+    libdrm-dev:armhf \
+    libdw-dev:armhf \
+    libgsl-dev:armhf \
+    libjson-c-dev:armhf \
+    libkmod-dev:armhf \
+    liblzma-dev:armhf \
+    libpciaccess-dev:armhf \
+    libpixman-1-dev:armhf \
+    libprocps-dev:armhf \
+    libudev-dev:armhf \
+    libunwind-dev:armhf \
+    libxrandr-dev:armhf \
+    libxv-dev:armhf \
+    meson \
+    peg \
+    pkg-config \
+    python-docutils \
+    qemu-user \
+    qemu-user-static \
+    valgrind \
+    x11proto-dri2-dev \
+    zlib1g-dev:armhf \
+ && rm -rf /var/lib/apt/lists/*
diff --git a/Dockerfile.build-debian-minimal b/Dockerfile.build-debian-minimal
index 64edf4b4..d0756be5 100644
--- a/Dockerfile.build-debian-minimal
+++ b/Dockerfile.build-debian-minimal
@@ -1,25 +1,23 @@
 FROM debian:buster
 
-RUN apt-get update
-RUN apt-get install -y \
-			gcc \
-			flex \
-			bison \
-			pkg-config \
-			libatomic1 \
-			libpciaccess-dev \
-			libkmod-dev \
-			libprocps-dev \
-			libdw-dev \
-			zlib1g-dev \
-			liblzma-dev \
-			libcairo-dev \
-			libpixman-1-dev \
-			libudev-dev \
-			libxrandr-dev \
-			libxv-dev \
-			x11proto-dri2-dev \
-			meson \
-			libdrm-dev
-
-RUN apt-get clean
+RUN apt-get update && apt-get install -y \
+    bison \
+    flex \
+    gcc \
+    libatomic1 \
+    libcairo-dev \
+    libdrm-dev \
+    libdw-dev \
+    libkmod-dev \
+    liblzma-dev \
+    libpciaccess-dev \
+    libpixman-1-dev \
+    libprocps-dev \
+    libudev-dev \
+    libxrandr-dev \
+    libxv-dev \
+    meson \
+    pkg-config \
+    x11proto-dri2-dev \
+    zlib1g-dev \
+ && rm -rf /var/lib/apt/lists/*
diff --git a/Dockerfile.build-debian-mips b/Dockerfile.build-debian-mips
index 7e4bacdf..e52d403b 100644
--- a/Dockerfile.build-debian-mips
+++ b/Dockerfile.build-debian-mips
@@ -2,42 +2,36 @@
 # https://bugs.debian.org/932725
 FROM debian:stretch-backports
 
-RUN apt-get update
-RUN apt-get install -y \
-			flex \
-			bison \
-			pkg-config \
-			x11proto-dri2-dev \
-			python-docutils \
-			valgrind \
-			peg
-
 RUN dpkg --add-architecture mips
-RUN apt-get update
-RUN apt-get install -y \
-			gcc-mips-linux-gnu \
-			libatomic1:mips \
-			libpciaccess-dev:mips \
-			libkmod-dev:mips \
-			libprocps-dev:mips \
-			libunwind-dev:mips \
-			libdw-dev:mips \
-			zlib1g-dev:mips \
-			liblzma-dev:mips \
-			libcairo-dev:mips \
-			libpixman-1-dev:mips \
-			libudev-dev:mips \
-			libgsl-dev:mips \
-			libasound2-dev:mips \
-			libjson-c-dev:mips \
-			libcurl4-openssl-dev:mips \
-			libxrandr-dev:mips \
-			libxv-dev:mips
-
-RUN apt-get install -t stretch-backports -y \
-			meson \
-			libdrm-dev:mips \
-			qemu-user \
-			qemu-user-static
-
-RUN apt-get clean
+RUN apt-get update && apt-get install -y \
+    bison \
+    flex \
+    gcc-mips-linux-gnu \
+    libasound2-dev:mips \
+    libatomic1:mips \
+    libcairo-dev:mips \
+    libcurl4-openssl-dev:mips \
+    libdw-dev:mips \
+    libgsl-dev:mips \
+    libjson-c-dev:mips \
+    libkmod-dev:mips \
+    liblzma-dev:mips \
+    libpciaccess-dev:mips \
+    libpixman-1-dev:mips \
+    libprocps-dev:mips \
+    libudev-dev:mips \
+    libunwind-dev:mips \
+    libxrandr-dev:mips \
+    libxv-dev:mips \
+    peg \
+    pkg-config \
+    python-docutils \
+    valgrind \
+    x11proto-dri2-dev \
+    zlib1g-dev:mips \
+ && apt-get install -t stretch-backports -y \
+    libdrm-dev:mips \
+    meson \
+    qemu-user \
+    qemu-user-static \
+ && rm -rf /var/lib/apt/lists/*
diff --git a/Dockerfile.build-fedora b/Dockerfile.build-fedora
index dc5d1b16..34fff96b 100644
--- a/Dockerfile.build-fedora
+++ b/Dockerfile.build-fedora
@@ -1,50 +1,47 @@
 FROM fedora:31
 
 RUN dnf install -y \
-	gcc flex bison libatomic meson ninja-build xdotool \
-	'pkgconfig(libdrm)' \
-	'pkgconfig(pciaccess)' \
-	'pkgconfig(libkmod)' \
-	'pkgconfig(libprocps)' \
-	'pkgconfig(libunwind)' \
-	'pkgconfig(libdw)' \
-	'pkgconfig(pixman-1)' \
-	'pkgconfig(valgrind)' \
-	'pkgconfig(cairo)' \
-	'pkgconfig(libudev)' \
-	'pkgconfig(glib-2.0)' \
-	'pkgconfig(gsl)' \
-	'pkgconfig(alsa)' \
-	'pkgconfig(xmlrpc)' \
-	'pkgconfig(xmlrpc_util)' \
-	'pkgconfig(xmlrpc_client)' \
-	'pkgconfig(json-c)' \
-	'pkgconfig(gtk-doc)' \
-	'pkgconfig(xv)' \
-	'pkgconfig(xrandr)' \
-	python3-docutils
-
-# We need peg to build overlay
-RUN dnf install -y make
-RUN mkdir /tmp/peg
+    'pkgconfig(alsa)' \
+    'pkgconfig(cairo)' \
+    'pkgconfig(glib-2.0)' \
+    'pkgconfig(gsl)' \
+    'pkgconfig(gtk-doc)' \
+    'pkgconfig(json-c)' \
+    'pkgconfig(libdrm)' \
+    'pkgconfig(libdw)' \
+    'pkgconfig(libkmod)' \
+    'pkgconfig(libprocps)' \
+    'pkgconfig(libudev)' \
+    'pkgconfig(libunwind)' \
+    'pkgconfig(pciaccess)' \
+    'pkgconfig(pixman-1)' \
+    'pkgconfig(valgrind)' \
+    'pkgconfig(xmlrpc)' \
+    'pkgconfig(xmlrpc_client)' \
+    'pkgconfig(xmlrpc_util)' \
+    'pkgconfig(xrandr)' \
+    'pkgconfig(xv)' \
+    bison \
+    clang \
+    diffutils \
+    findutils \
+    flex \
+    gcc \
+    libatomic \
+    make \
+    meson \
+    ninja-build \
+    python3-docutils \
+    python3-pip \
+    xdotool \
+ && dnf clean all
 
 # originaly from http://piumarta.com/software/peg/
-RUN curl -o "/tmp/peg/#1" "https://intel-gfx-ci.01.org/mirror/peg/{peg-0.1.18.tar.gz}"
-RUN tar -C /tmp/peg -xf /tmp/peg/peg-0.1.18.tar.gz
-RUN make -C /tmp/peg/peg-0.1.18 PREFIX=/usr install
-RUN rm -fr /tmp/peg
-
-# For compile-testing on clang
-RUN dnf install -y clang
-
-# For test list comparison
-RUN dnf install -y diffutils
+RUN mkdir /tmp/peg \
+ && curl -o "/tmp/peg/#1" "https://intel-gfx-ci.01.org/mirror/peg/{peg-0.1.18.tar.gz}" \
+ && tar -C /tmp/peg -xf /tmp/peg/peg-0.1.18.tar.gz \
+ && ls /tmp/peg \
+ && make -C /tmp/peg/peg-0.1.18 PREFIX=/usr install \
+ && rm -fr /tmp/peg
 
-# For the helpers for the container with IGT inside
-RUN dnf install -y findutils
-
-# Meson version switching shenanigans
-RUN dnf install -y python3-pip
 RUN curl -o "/usr/src/#1" "https://files.pythonhosted.org/packages/e8/ec/3e6a68c9e0fd4b4f4fb6877a3ccfb6f6e6d09f2b4fc87674e671bf64b7b8/{meson-0.47.2.tar.gz}"
-
-RUN dnf clean all
-- 
2.17.1


More information about the igt-dev mailing list