Skip to content

Remove unnecessary packages and make image compact #1209

Closed
@axot

Description

@axot

The PHPIZE_DEPS packages didn't be removed and we can also make a more compact image by merging all apt-get installed layers to a single layer.

gcc can be executed in current image

$ docker run --rm -ti php:8.0.11-fpm-bullseye gcc --version
gcc (Debian 10.2.1-6) 10.2.1 20210110
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Current layers

$ docker history php:8.0.11-fpm-bullseye
IMAGE          CREATED       CREATED BY                                      SIZE      COMMENT
d30aedb54bc6   13 days ago   /bin/sh -c #(nop)  CMD ["php-fpm"]              0B
<missing>      13 days ago   /bin/sh -c #(nop)  EXPOSE 9000                  0B
<missing>      13 days ago   /bin/sh -c #(nop)  STOPSIGNAL SIGQUIT           0B
<missing>      13 days ago   /bin/sh -c set -eux;  cd /usr/local/etc;  if…   26.3kB
<missing>      13 days ago   /bin/sh -c #(nop) WORKDIR /var/www/html         0B
<missing>      13 days ago   /bin/sh -c #(nop)  ENTRYPOINT ["docker-php-e…   0B
<missing>      13 days ago   /bin/sh -c docker-php-ext-enable sodium         17B
<missing>      13 days ago   /bin/sh -c #(nop) COPY multi:6dfba8f7e64bd54…   6.75kB
<missing>      13 days ago   /bin/sh -c set -eux;   savedAptMark="$(apt-m…   95.4MB
<missing>      13 days ago   /bin/sh -c #(nop) COPY file:ce57c04b70896f77…   587B
<missing>      13 days ago   /bin/sh -c set -eux;   savedAptMark="$(apt-m…   12MB
<missing>      13 days ago   /bin/sh -c #(nop)  ENV PHP_SHA256=e3e5f764ae…   0B
<missing>      13 days ago   /bin/sh -c #(nop)  ENV PHP_URL=https://www.p…   0B
<missing>      13 days ago   /bin/sh -c #(nop)  ENV PHP_VERSION=8.0.11       0B
<missing>      13 days ago   /bin/sh -c #(nop)  ENV GPG_KEYS=1729F83938DA…   0B
<missing>      13 days ago   /bin/sh -c #(nop)  ENV PHP_LDFLAGS=-Wl,-O1 -…   0B
<missing>      13 days ago   /bin/sh -c #(nop)  ENV PHP_CPPFLAGS=-fstack-…   0B
<missing>      13 days ago   /bin/sh -c #(nop)  ENV PHP_CFLAGS=-fstack-pr…   0B
<missing>      13 days ago   /bin/sh -c #(nop)  ENV PHP_EXTRA_CONFIGURE_A…   0B
<missing>      13 days ago   /bin/sh -c set -eux;  mkdir -p "$PHP_INI_DIR…   0B
<missing>      13 days ago   /bin/sh -c #(nop)  ENV PHP_INI_DIR=/usr/loca…   0B
<missing>      13 days ago   /bin/sh -c set -eux;  apt-get update;  apt-g…   249MB
<missing>      13 days ago   /bin/sh -c #(nop)  ENV PHPIZE_DEPS=autoconf …   0B
<missing>      13 days ago   /bin/sh -c set -eux;  {   echo 'Package: php…   46B
<missing>      13 days ago   /bin/sh -c #(nop)  CMD ["bash"]                 0B
<missing>      13 days ago   /bin/sh -c #(nop) ADD file:6472ab63529e68873…   74.3MB

A new test Dockerfile

diff --git i/8.0/bullseye/fpm/Dockerfile w/8.0/bullseye/fpm/Dockerfile
index f10af51..dbe11c9 100644
--- i/8.0/bullseye/fpm/Dockerfile
+++ w/8.0/bullseye/fpm/Dockerfile
@@ -28,17 +28,6 @@ ENV PHPIZE_DEPS \
        pkg-config \
        re2c

-# persistent / runtime deps
-RUN set -eux; \
-   apt-get update; \
-   apt-get install -y --no-install-recommends \
-       $PHPIZE_DEPS \
-       ca-certificates \
-       curl \
-       xz-utils \
-   ; \
-   rm -rf /var/lib/apt/lists/*
-
 ENV PHP_INI_DIR /usr/local/etc/php
 RUN set -eux; \
    mkdir -p "$PHP_INI_DIR/conf.d"; \
@@ -66,11 +55,17 @@ ENV PHP_VERSION 8.0.11
 ENV PHP_URL="https://www.php.net/distributions/php-8.0.11.tar.xz" PHP_ASC_URL="https://www.php.net/distributions/php-8.0.11.tar.xz.asc"
 ENV PHP_SHA256="e3e5f764ae57b31eb65244a45512f0b22d7bef05f2052b23989c053901552e16"

+COPY docker-php-source /usr/local/bin/
+
 RUN set -eux; \
    \
    savedAptMark="$(apt-mark showmanual)"; \
    apt-get update; \
-   apt-get install -y --no-install-recommends gnupg dirmngr; \
+   apt-get install -y --no-install-recommends gnupg dirmngr \
+       ca-certificates \
+       curl \
+       xz-utils \
+   ; \
    rm -rf /var/lib/apt/lists/*; \
    \
    mkdir -p /usr/src; \
@@ -94,16 +89,12 @@ RUN set -eux; \
    fi; \
    \
    apt-mark auto '.*' > /dev/null; \
-   apt-mark manual $savedAptMark > /dev/null; \
-   apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false
-
-COPY docker-php-source /usr/local/bin/
-
-RUN set -eux; \
-   \
+   [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark > /dev/null; \
+   apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false ; \
    savedAptMark="$(apt-mark showmanual)"; \
    apt-get update; \
    apt-get install -y --no-install-recommends \
+       $PHPIZE_DEPS \
        ${PHP_EXTRA_BUILD_DEPS:-} \
        libargon2-dev \
        libcurl4-openssl-dev \

New overlay layers

IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
74ab7cf3e4c7   13 minutes ago   CMD ["php-fpm"]                                 0B        buildkit.dockerfile.v0
<missing>      13 minutes ago   EXPOSE map[9000/tcp:{}]                         0B        buildkit.dockerfile.v0
<missing>      13 minutes ago   STOPSIGNAL SIGQUIT                              0B        buildkit.dockerfile.v0
<missing>      13 minutes ago   RUN /bin/sh -c set -eux;  cd /usr/local/etc;…   26.3kB    buildkit.dockerfile.v0
<missing>      13 minutes ago   WORKDIR /var/www/html                           0B        buildkit.dockerfile.v0
<missing>      13 minutes ago   ENTRYPOINT ["docker-php-entrypoint"]            0B        buildkit.dockerfile.v0
<missing>      13 minutes ago   RUN /bin/sh -c docker-php-ext-enable sodium …   17B       buildkit.dockerfile.v0
<missing>      13 minutes ago   COPY docker-php-ext-* docker-php-entrypoint …   6.75kB    buildkit.dockerfile.v0
<missing>      13 minutes ago   RUN /bin/sh -c set -eux;   savedAptMark="$(a…   127MB     buildkit.dockerfile.v0
<missing>      27 minutes ago   COPY docker-php-source /usr/local/bin/ # bui…   587B      buildkit.dockerfile.v0
<missing>      27 minutes ago   ENV PHP_SHA256=e3e5f764ae57b31eb65244a45512f…   0B        buildkit.dockerfile.v0
<missing>      27 minutes ago   ENV PHP_URL=https://www.php.net/distribution…   0B        buildkit.dockerfile.v0
<missing>      27 minutes ago   ENV PHP_VERSION=8.0.11                          0B        buildkit.dockerfile.v0
<missing>      27 minutes ago   ENV GPG_KEYS=1729F83938DA44E27BA0F4D3DBDB397…   0B        buildkit.dockerfile.v0
<missing>      27 minutes ago   ENV PHP_LDFLAGS=-Wl,-O1 -pie                    0B        buildkit.dockerfile.v0
<missing>      27 minutes ago   ENV PHP_CPPFLAGS=-fstack-protector-strong -f…   0B        buildkit.dockerfile.v0
<missing>      27 minutes ago   ENV PHP_CFLAGS=-fstack-protector-strong -fpi…   0B        buildkit.dockerfile.v0
<missing>      27 minutes ago   ENV PHP_EXTRA_CONFIGURE_ARGS=--enable-fpm --…   0B        buildkit.dockerfile.v0
<missing>      27 minutes ago   RUN /bin/sh -c set -eux;  mkdir -p "$PHP_INI…   0B        buildkit.dockerfile.v0
<missing>      27 minutes ago   ENV PHP_INI_DIR=/usr/local/etc/php              0B        buildkit.dockerfile.v0
<missing>      27 minutes ago   ENV PHPIZE_DEPS=autoconf   dpkg-dev   file  …   0B        buildkit.dockerfile.v0
<missing>      32 minutes ago   RUN /bin/sh -c set -eux;  {   echo 'Package:…   46B       buildkit.dockerfile.v0
<missing>      13 days ago      /bin/sh -c #(nop)  CMD ["bash"]                 0B
<missing>      13 days ago      /bin/sh -c #(nop) ADD file:6472ab63529e68873…   74.3MB

Image size comparison

REPOSITORY                    TAG                   IMAGE ID       CREATED          SIZE
php-reduced                   8.0.11-fpm-bullseye   74ab7cf3e4c7   12 minutes ago   201MB
php                           8.0.11-fpm-bullseye   d30aedb54bc6   13 days ago      431MB

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions