Skip to content

Remove unnecessary packages and make image compact #1209

@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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions