From 9ff17ed32c609259b0983d359bd5fb150127af44 Mon Sep 17 00:00:00 2001 From: Thomas Nordquist Date: Tue, 14 Mar 2017 11:29:14 +0100 Subject: [PATCH 1/6] Remove SDK archive in the same layer it was downloaded This will greatly reduce the final docker image size. (by 678 MB) --- Dockerfile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index f4c79b8..3a245ee 100644 --- a/Dockerfile +++ b/Dockerfile @@ -64,10 +64,10 @@ RUN rm -rf /var/lib/apt/lists/* RUN apt-get clean # Install Android SDK -RUN wget https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz -RUN tar -xvzf android-sdk_r24.4.1-linux.tgz -RUN mv android-sdk-linux /usr/local/android-sdk -RUN rm android-sdk_r24.4.1-linux.tgz +RUN wget https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz \ + && tar -xvzf android-sdk_r24.4.1-linux.tgz \ + && mv android-sdk-linux /usr/local/android-sdk \ + && rm android-sdk_r24.4.1-linux.tgz ENV ANDROID_COMPONENTS platform-tools,android-23,build-tools-23.0.2,build-tools-24.0.0 From d8f539428a14f00659e8af6d8a49e1bab226c1c6 Mon Sep 17 00:00:00 2001 From: Thomas Nordquist Date: Tue, 14 Mar 2017 11:31:06 +0100 Subject: [PATCH 2/6] Remove NDK archive in the same layer it was downloaded This will greatly reduce the final docker image size. (by 2.61GB) --- Dockerfile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3a245ee..5e80d6e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -75,10 +75,10 @@ ENV ANDROID_COMPONENTS platform-tools,android-23,build-tools-23.0.2,build-tools- RUN echo y | /usr/local/android-sdk/tools/android update sdk --filter "${ANDROID_COMPONENTS}" --no-ui -a # Install Android NDK -RUN wget http://dl.google.com/android/repository/android-ndk-r12-linux-x86_64.zip -RUN unzip android-ndk-r12-linux-x86_64.zip -RUN mv android-ndk-r12 /usr/local/android-ndk -RUN rm android-ndk-r12-linux-x86_64.zip +RUN wget http://dl.google.com/android/repository/android-ndk-r12-linux-x86_64.zip \ + && unzip android-ndk-r12-linux-x86_64.zip \ + && mv android-ndk-r12 /usr/local/android-ndk \ + && rm android-ndk-r12-linux-x86_64.zip # Environment variables ENV ANDROID_HOME /usr/local/android-sdk From 376b40f6bd71526ba2b3353a2954774247585816 Mon Sep 17 00:00:00 2001 From: Thomas Nordquist Date: Tue, 14 Mar 2017 11:39:40 +0100 Subject: [PATCH 3/6] Remove redundant layer apt-get update is called a few lines below. This layer won't save any disk space --- Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 5e80d6e..e5c06f3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,7 +15,6 @@ ENV DOCKER_ANDROID_DISPLAY_NAME mobileci-docker ENV DEBIAN_FRONTEND noninteractive # Update apt-get -RUN rm -rf /var/lib/apt/lists/* RUN apt-get update RUN apt-get dist-upgrade -y From 335a2f171eed2e1f6ecffa476f28a154fc9305a3 Mon Sep 17 00:00:00 2001 From: Thomas Nordquist Date: Tue, 14 Mar 2017 11:45:32 +0100 Subject: [PATCH 4/6] Remove apt cache & lists int the same layer they were created --- Dockerfile | 88 ++++++++++++++++++++++++++---------------------------- 1 file changed, 43 insertions(+), 45 deletions(-) diff --git a/Dockerfile b/Dockerfile index e5c06f3..5a644fe 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,53 +14,51 @@ ENV DOCKER_ANDROID_DISPLAY_NAME mobileci-docker # Never ask for confirmations ENV DEBIAN_FRONTEND noninteractive -# Update apt-get -RUN apt-get update -RUN apt-get dist-upgrade -y - -# Installing packages -RUN apt-get install -y \ - autoconf \ - build-essential \ - bzip2 \ - curl \ - gcc \ - git \ - groff \ - lib32stdc++6 \ - lib32z1 \ - lib32z1-dev \ - lib32ncurses5 \ - lib32bz2-1.0 \ - libc6-dev \ - libgmp-dev \ - libmpc-dev \ - libmpfr-dev \ - libxslt-dev \ - libxml2-dev \ - m4 \ - make \ - ncurses-dev \ - ocaml \ - openssh-client \ - pkg-config \ - python-software-properties \ - rsync \ - software-properties-common \ - unzip \ - wget \ - zip \ - zlib1g-dev \ - --no-install-recommends +# Updating & Installing packages +RUN apt-get update \ + && apt-get dist-upgrade -y \ + && apt-get install -y \ + autoconf \ + build-essential \ + bzip2 \ + curl \ + gcc \ + git \ + groff \ + lib32stdc++6 \ + lib32z1 \ + lib32z1-dev \ + lib32ncurses5 \ + lib32bz2-1.0 \ + libc6-dev \ + libgmp-dev \ + libmpc-dev \ + libmpfr-dev \ + libxslt-dev \ + libxml2-dev \ + m4 \ + make \ + ncurses-dev \ + ocaml \ + openssh-client \ + pkg-config \ + python-software-properties \ + rsync \ + software-properties-common \ + unzip \ + wget \ + zip \ + zlib1g-dev \ + --no-install-recommends \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* # Install Java -RUN apt-add-repository ppa:openjdk-r/ppa -RUN apt-get update -RUN apt-get -y install openjdk-8-jdk - -# Clean Up Apt-get -RUN rm -rf /var/lib/apt/lists/* -RUN apt-get clean +RUN apt-add-repository ppa:openjdk-r/ppa \ + && apt-get update \ + && apt-get -y install openjdk-8-jdk \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* # Install Android SDK RUN wget https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz \ From c25c61c5805121d87cd37f87d639dc6674f15fe7 Mon Sep 17 00:00:00 2001 From: Thomas Nordquist Date: Tue, 14 Mar 2017 11:50:23 +0100 Subject: [PATCH 5/6] Remove a redundant layer There are no more packages left, they were cleaned in the layers, they have been downloaded in --- Dockerfile | 3 --- 1 file changed, 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 5a644fe..72d570a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -97,9 +97,6 @@ ENV TERM dumb ENV JAVA_OPTS "-Xms4096m -Xmx4096m" ENV GRADLE_OPTS "-XX:+UseG1GC -XX:MaxGCPauseMillis=1000" -# Cleaning -RUN apt-get clean - # Add build user account, values are set to default below ENV RUN_USER mobileci ENV RUN_UID 5089 From a13dd1f99ae614b6fbe363310a8cb4b55dcecd46 Mon Sep 17 00:00:00 2001 From: Thomas Nordquist Date: Tue, 14 Mar 2017 12:19:51 +0100 Subject: [PATCH 6/6] Fix permissions in the layer the files were created. The previous usage of `chown` and `chmod` lead to two layers which modified all downloaded files, each layer adding 3.6GB to the docker image. (Total of 7.2 GB) Build time is now much shorter, since the files won't be copied to a new layer. Also: - Move user creation to top - Move environmentals to top --- Dockerfile | 52 +++++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/Dockerfile b/Dockerfile index 72d570a..039b53e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -60,23 +60,6 @@ RUN apt-add-repository ppa:openjdk-r/ppa \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* -# Install Android SDK -RUN wget https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz \ - && tar -xvzf android-sdk_r24.4.1-linux.tgz \ - && mv android-sdk-linux /usr/local/android-sdk \ - && rm android-sdk_r24.4.1-linux.tgz - -ENV ANDROID_COMPONENTS platform-tools,android-23,build-tools-23.0.2,build-tools-24.0.0 - -# Install Android tools -RUN echo y | /usr/local/android-sdk/tools/android update sdk --filter "${ANDROID_COMPONENTS}" --no-ui -a - -# Install Android NDK -RUN wget http://dl.google.com/android/repository/android-ndk-r12-linux-x86_64.zip \ - && unzip android-ndk-r12-linux-x86_64.zip \ - && mv android-ndk-r12 /usr/local/android-ndk \ - && rm android-ndk-r12-linux-x86_64.zip - # Environment variables ENV ANDROID_HOME /usr/local/android-sdk ENV ANDROID_SDK_HOME $ANDROID_HOME @@ -92,11 +75,6 @@ ENV PATH $PATH:$ANDROID_NDK_HOME # Export JAVA_HOME variable ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/ -# Support Gradle -ENV TERM dumb -ENV JAVA_OPTS "-Xms4096m -Xmx4096m" -ENV GRADLE_OPTS "-XX:+UseG1GC -XX:MaxGCPauseMillis=1000" - # Add build user account, values are set to default below ENV RUN_USER mobileci ENV RUN_UID 5089 @@ -107,9 +85,33 @@ RUN id $RUN_USER || adduser --uid "$RUN_UID" \ --disabled-login \ --disabled-password "$RUN_USER" -# Fix permissions -RUN chown -R $RUN_USER:$RUN_USER $ANDROID_HOME $ANDROID_SDK_HOME $ANDROID_NDK_HOME -RUN chmod -R a+rx $ANDROID_HOME $ANDROID_SDK_HOME $ANDROID_NDK_HOME +# Install Android SDK +RUN wget https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz \ + && tar -xvzf android-sdk_r24.4.1-linux.tgz \ + && mv android-sdk-linux /usr/local/android-sdk \ + && chown -R $RUN_USER:$RUN_USER $ANDROID_HOME \ + && chmod -R a+rx $ANDROID_HOME \ + && rm android-sdk_r24.4.1-linux.tgz + +ENV ANDROID_COMPONENTS platform-tools,android-23,build-tools-23.0.2,build-tools-24.0.0 + +# Install Android tools +RUN echo y | /usr/local/android-sdk/tools/android update sdk --filter "${ANDROID_COMPONENTS}" --no-ui -a \ + && chown -R $RUN_USER:$RUN_USER $ANDROID_HOME \ + && chmod -R a+rx $ANDROID_HOME + +# Install Android NDK +RUN wget http://dl.google.com/android/repository/android-ndk-r12-linux-x86_64.zip \ + && unzip android-ndk-r12-linux-x86_64.zip \ + && mv android-ndk-r12 /usr/local/android-ndk \ + && chown -R $RUN_USER:$RUN_USER $ANDROID_NDK_HOME \ + && chmod -R a+rx $ANDROID_NDK_HOME \ + && rm android-ndk-r12-linux-x86_64.zip + +# Support Gradle +ENV TERM dumb +ENV JAVA_OPTS "-Xms4096m -Xmx4096m" +ENV GRADLE_OPTS "-XX:+UseG1GC -XX:MaxGCPauseMillis=1000" # Creating project directories prepared for build when running # `docker run`