diff mbox series

[1/4] support/docker: run apt-get update and apt-get install in two RUNs

Message ID 5d55cfc92761a84d7b10aae602b05c147b56f95e.1527977964.git.yann.morin.1998@free.fr
State Changes Requested
Headers show
Series [1/4] support/docker: run apt-get update and apt-get install in two RUNs | expand

Commit Message

Yann E. MORIN June 2, 2018, 10:19 p.m. UTC
In commit 7517aef4d (support/docker: limit the number of layers),
we reduced the number of layers by coalescing multiple RUN commands
into less commands.

In doing so, we especially coalesced "apt-get update" with "apt-get
install".

However, the distribution we used is a pinned version of stretch, so
we know that running apt-get update will always yield the same apt
database.

If we split the two apt-get commands, then we can re-use any local
intermediate image when we need to update the list of packages to
install; this helps quite a bit when testing the docker files over
and over again, with just slight variants in the packages list.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Ricardo Martincoski <ricardo.martincoski@gmail.com>
Cc: Peter Korsgaard <peter@korsgaard.com>
---
 support/docker/Dockerfile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Ricardo Martincoski June 3, 2018, 4:20 a.m. UTC | #1
Hello,

On Sat, Jun 02, 2018 at 07:19 PM, Yann E. MORIN wrote:

> In commit 7517aef4d (support/docker: limit the number of layers),
> we reduced the number of layers by coalescing multiple RUN commands
> into less commands.
> 
> In doing so, we especially coalesced "apt-get update" with "apt-get
> install".

That is exactly what is recommended in the 'best practices':
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#run
"Always combine RUN apt-get update with apt-get install in the same RUN
statement."

But the 'gotchas' used to justify the recommendation don't apply in our case,
as you describe below.

> However, the distribution we used is a pinned version of stretch, so
> we know that running apt-get update will always yield the same apt
> database.
> 
> If we split the two apt-get commands, then we can re-use any local
> intermediate image when we need to update the list of packages to
> install; this helps quite a bit when testing the docker files over
> and over again, with just slight variants in the packages list.
> 
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>

[I use docker only with the buildroot image, so my experience is limited, but
 for what it's worth]
Reviewed-by: Ricardo Martincoski <ricardo.martincoski@gmail.com>


Regards,
Ricardo
diff mbox series

Patch

diff --git a/support/docker/Dockerfile b/support/docker/Dockerfile
index f01ac25f93..8c525f7cf1 100644
--- a/support/docker/Dockerfile
+++ b/support/docker/Dockerfile
@@ -20,8 +20,8 @@  COPY apt-sources.list /etc/apt/sources.list
 
 # The container has no package lists, so need to update first
 RUN dpkg --add-architecture i386 && \
-    apt-get update -y && \
-    apt-get install -y --no-install-recommends \
+    apt-get update -y
+RUN apt-get install -y --no-install-recommends \
         build-essential cmake libc6:i386 g++-multilib \
         bc ca-certificates file locales rsync \
         cvs bzr git mercurial subversion wget \