Bug 1316519 - Squash docker image layers. r=dustin draft
authorJonas Finnemann Jensen <jopsen@gmail.com>
Thu, 10 Nov 2016 17:38:20 -0800
changeset 437956 b68e793326a674b86e82df5bc82e1b20790a26fd
parent 437541 5365a73e49bfc30fad530d51c28e0d7762caf5c7
child 536771 37d551bf2f4258b9ac2d0329297d62efe8bb1b2b
push id35561
push userbmo:jopsen@gmail.com
push dateFri, 11 Nov 2016 23:33:42 +0000
reviewersdustin
bugs1316519
milestone52.0a1
Bug 1316519 - Squash docker image layers. r=dustin MozReview-Commit-ID: 4ectVEMHQiX
testing/docker/image_builder/VERSION
testing/docker/image_builder/build-image.sh
testing/docker/image_builder/setup.sh
--- a/testing/docker/image_builder/VERSION
+++ b/testing/docker/image_builder/VERSION
@@ -1,1 +1,1 @@
-1.0.0
+1.1.0
--- a/testing/docker/image_builder/build-image.sh
+++ b/testing/docker/image_builder/build-image.sh
@@ -45,15 +45,20 @@ curl -s \
   | tee /tmp/docker-build.log \
   | jq -r '.status + .progress, .stream[:-1], .error | select(. != null)'
 
 # Exit non-zero if there is error entries in the log
 if cat /tmp/docker-build.log | jq -se 'add | .error' > /dev/null; then
   raise_error "Image build failed: `cat /tmp/docker-build.log | jq -rse 'add | .error'`";
 fi
 
+# Squash image
+docker-squash \
+  -t "$IMAGE_NAME:$HASH" \
+  "$IMAGE_NAME:$HASH"
+
 # Get image from docker daemon
 # This interacts directly with the docker remote API, see:
 # https://docs.docker.com/engine/reference/api/docker_remote_api_v1.18/
 curl -s \
   -X GET \
   --unix-socket /var/run/docker.sock "http:/images/$IMAGE_NAME:$HASH/get" \
   | zstd -3 -c -o /home/worker/workspace/artifacts/image.tar.zst
--- a/testing/docker/image_builder/setup.sh
+++ b/testing/docker/image_builder/setup.sh
@@ -7,29 +7,51 @@ export DEBIAN_FRONTEND=noninteractive
 apt-get update -y
 
 # Install dependencies
 apt-get install -y \
     curl \
     tar \
     jq \
     python \
-    build-essential # Only needed for zstd installation, will be removed later
+    python-pip \
+    build-essential
+# python-pip and build-essential will be removed later, they are only needed
+# for the installation.
 
 # Install mercurial
 . /setup/common.sh
 . /setup/install-mercurial.sh
 
 # Install build-image.sh script
 chmod +x /usr/local/bin/build-image.sh
 chmod +x /usr/local/bin/run-task
 
 # Create workspace
 mkdir -p /home/worker/workspace
 
+# Install docker-squash
+cat - > /setup/requirements.txt <<EOF
+docker-py==1.10.6
+docker-pycreds==0.2.1
+docker-squash==1.0.4
+ipaddress==1.0.17
+requests==2.11.1
+six==1.10.0
+websocket-client==0.37.0
+EOF
+pip install \
+  --no-cache-dir \
+  --disable-pip-version-check \
+  -r /setup/requirements.txt
+# Explicitly install python-pkg-resources, so it won't be removed by autoremove
+apt-get install -y python-pkg-resources
+# Remove pip, dependencies later remove by autoremove
+apt-get purge -y python-pip
+
 # Install zstd 1.1.1
 cd /setup
 tooltool_fetch <<EOF
 [
   {
     "size": 734872,
     "visibility": "public",
     "digest": "a8817e74254f21ee5b76a21691e009ede2cdc70a78facfa453902df3e710e90e78d67f2229956d835960fd1085c33312ff273771b75f9322117d85eb35d8e695",