You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by gr...@apache.org on 2020/03/09 19:52:36 UTC

[kudu] 02/03: [docker] Reduce docker image size

This is an automated email from the ASF dual-hosted git repository.

granthenke pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kudu.git

commit c1b7d76bbe91fa9d024358c2923051fb9df91a5c
Author: Grant Henke <gr...@apache.org>
AuthorDate: Mon Mar 9 09:50:37 2020 -0500

    [docker] Reduce docker image size
    
    This patch reduces the Docker `kudu` image size by ~60 MB
    (295MB -> 235MB).
    
    It does this by moving the chown calls to before the files are
    copied and using the `—chown` flag when copying files.
    Before this change the chown command would effecively
    double the size due to how aufs layers work.
    
    I also removed some optional and unused packages from the
    runtime and dev images.
    
    Change-Id: I88238679912149d00ae3edc6a9d2d568f13aafca
    Reviewed-on: http://gerrit.cloudera.org:8080/15389
    Tested-by: Kudu Jenkins
    Reviewed-by: Alexey Serbin <as...@cloudera.com>
---
 docker/Dockerfile               | 23 +++++++++++++----------
 docker/bootstrap-dev-env.sh     | 28 ++++++++++++++++++----------
 docker/bootstrap-runtime-env.sh |  2 --
 3 files changed, 31 insertions(+), 22 deletions(-)

diff --git a/docker/Dockerfile b/docker/Dockerfile
index fe4b3ac..185ff3d 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -280,24 +280,27 @@ ARG GID=1000
 ARG INSTALL_DIR="/opt/kudu"
 ARG DATA_DIR="/var/lib/kudu"
 
+# Setup the kudu user and create the neccessary directories.
+# We do this before copying any files othwerwise the image size is doubled by the chown change.
+RUN groupadd -g ${GID} kudu || groupmod -n kudu $(getent group ${GID} | cut -d: -f1) \
+    && useradd --shell /bin/bash -u ${UID} -g ${GID} -m kudu \
+    && mkdir -p ${INSTALL_DIR} && chown -R kudu:kudu ${INSTALL_DIR} \
+    && mkdir -p ${DATA_DIR} && chown -R kudu:kudu ${DATA_DIR}
+
 # Copy the binaries.
 WORKDIR $INSTALL_DIR/bin
-COPY --from=build /kudu/build/latest/bin/kudu ./
+COPY --chown=kudu:kudu --from=build /kudu/build/latest/bin/kudu ./
 # Add to the binaries to the path.
 ENV PATH=$INSTALL_DIR/bin/:$PATH
 
-WORKDIR $INSTALL_DIR
 # Copy the web files.
-COPY --from=build /kudu/www ./www
-COPY ./docker/kudu-entrypoint.sh /
+WORKDIR $INSTALL_DIR
+COPY --chown=kudu:kudu --from=build /kudu/www ./www
 
-# Setup the kudu user and create the neccessary directories.
-RUN groupadd -g ${GID} kudu || groupmod -n kudu $(getent group ${GID} | cut -d: -f1) \
-    && useradd --shell /bin/bash -u ${UID} -g ${GID} -m kudu \
-    && chown -R kudu:kudu ${INSTALL_DIR} \
-    && mkdir -p ${DATA_DIR} && chown -R kudu:kudu ${DATA_DIR}
-USER kudu
+# Copy the entrypoint script.
+COPY --chown=kudu:kudu ./docker/kudu-entrypoint.sh /
 
+USER kudu
 # Add the entrypoint.
 ENTRYPOINT ["/kudu-entrypoint.sh"]
 CMD ["help"]
diff --git a/docker/bootstrap-dev-env.sh b/docker/bootstrap-dev-env.sh
index 62754ba..9ea5aad 100755
--- a/docker/bootstrap-dev-env.sh
+++ b/docker/bootstrap-dev-env.sh
@@ -49,7 +49,6 @@ if [[ -f "/usr/bin/yum" ]]; then
     krb5-workstation \
     libtool \
     make \
-    nscd \
     ntp \
     openssl-devel \
     patch \
@@ -62,12 +61,13 @@ if [[ -f "/usr/bin/yum" ]]; then
     wget
 
   # Install docs build libraries.
-  yum install -y \
-    doxygen \
-    gem \
-    graphviz \
-    ruby-devel \
-    zlib-devel
+  # Note: Uncomment to include in your dev images. These are excluded to reduce image size and build time.
+  # yum install -y \
+  #  doxygen \
+  #  gem \
+  #  graphviz \
+  #  ruby-devel \
+  #  zlib-devel
 
   # To build on a version older than 7.0, the Red Hat Developer Toolset
   # must be installed (in order to have access to a C++11 capable compiler).
@@ -133,7 +133,6 @@ elif [[ -f "/usr/bin/apt-get" ]]; then
     libtool \
     lsb-release \
     make \
-    nscd \
     ntp \
     openssl \
     patch \
@@ -141,9 +140,9 @@ elif [[ -f "/usr/bin/apt-get" ]]; then
     python \
     rsync \
     unzip \
-    vim-common
+    vim-common \
+    wget
 
-  # Install docs build libraries.
   apt-get install -y --no-install-recommends \
     doxygen \
     gem \
@@ -151,6 +150,15 @@ elif [[ -f "/usr/bin/apt-get" ]]; then
     ruby-dev \
     xsltproc \
     zlib1g-dev
+  # Install docs build libraries.
+  # Note: Uncomment to include in your dev images. These are excluded to reduce image size and build time.
+  # apt-get install -y --no-install-recommends \
+  #  doxygen \
+  #  gem \
+  #  graphviz \
+  #  ruby-dev \
+  #  xsltproc \
+  #  zlib1g-dev
 
   # Reduce the image size by cleaning up after the install.
   apt-get clean
diff --git a/docker/bootstrap-runtime-env.sh b/docker/bootstrap-runtime-env.sh
index e8353c6..654ec4d 100755
--- a/docker/bootstrap-runtime-env.sh
+++ b/docker/bootstrap-runtime-env.sh
@@ -37,7 +37,6 @@ if [[ -f "/usr/bin/yum" ]]; then
     cyrus-sasl-plain \
     krb5-server \
     krb5-workstation \
-    nscd \
     openssl
 
   # Reduce the image size by cleaning up after the install.
@@ -60,7 +59,6 @@ elif [[ -f "/usr/bin/apt-get" ]]; then
     libsasl2-2 \
     libsasl2-modules \
     libsasl2-modules-gssapi-mit \
-    nscd \
     openssl
 
   # Reduce the image size by cleaning up after the install.