Skip to content

Commit 65300a9

Browse files
committed
DHI php-fpm WSC
DHI PHP-FPM Image with extensions for WSC (first version for testing)
1 parent 5132f1c commit 65300a9

1 file changed

Lines changed: 174 additions & 0 deletions

File tree

dhi.debian.fpm.wsc.Dockerfile

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
# build: docker build --no-cache --progress=plain --build-arg PHP_VERSION=8.4 -t docker.io/tobi312/php:8.4-dhi-fpm-debian-wsc -f dhi.debian.fpm.wsc.Dockerfile .
2+
# check: docker run --rm --name phptest -it docker.io/tobi312/php:8.4-dhi-fpm-debian-wsc -m
3+
# https://hub.docker.com/hardened-images/catalog/dhi/php | short: https://dhi.io/catalog/php
4+
# https://github.com/docker-hardened-images/catalog
5+
ARG PHP_VERSION=8.4
6+
ARG BUILD_PHP_VERSION=${PHP_VERSION}
7+
ARG BUILD_OS=debian13
8+
# =========================
9+
# Stage 1: Build Extensions
10+
# =========================
11+
FROM dhi.io/php:${BUILD_PHP_VERSION}${BUILD_OS:+-${BUILD_OS}}-dev AS builder
12+
ARG BUILD_PHP_VERSION
13+
14+
WORKDIR /tmp
15+
16+
# Install required system libraries for building PHP extensions
17+
RUN apt-get update \
18+
&& apt-get install -y --no-install-recommends \
19+
git \
20+
unzip \
21+
autoconf \
22+
build-essential \
23+
libjpeg-dev \
24+
libpng-dev \
25+
libxpm-dev \
26+
libfreetype6-dev \
27+
libicu-dev \
28+
libldap2-dev \
29+
libgmp-dev \
30+
&& apt-get install -y \
31+
libmagickwand-dev \
32+
&& rm -rf /var/lib/apt/lists/*
33+
34+
# =========================
35+
# Core PHP Extensions
36+
# =========================
37+
38+
# gd
39+
RUN cd $PHP_SRC_DIR/ext/gd \
40+
&& phpize \
41+
&& ./configure --with-webp --with-jpeg --with-xpm --with-freetype \
42+
&& make -j$(nproc) \
43+
&& make install
44+
45+
# pdo_mysql
46+
RUN cd $PHP_SRC_DIR/ext/pdo_mysql \
47+
&& phpize \
48+
&& ./configure \
49+
&& make -j$(nproc) \
50+
&& make install
51+
52+
# ldap
53+
RUN cd $PHP_SRC_DIR/ext/ldap \
54+
&& phpize \
55+
&& ./configure --with-ldap \
56+
&& make -j$(nproc) \
57+
&& make install
58+
59+
# gmp
60+
RUN cd $PHP_SRC_DIR/ext/gmp \
61+
&& phpize \
62+
&& ./configure \
63+
&& make -j$(nproc) \
64+
&& make install
65+
66+
# exif
67+
RUN cd $PHP_SRC_DIR/ext/exif \
68+
&& phpize \
69+
&& ./configure \
70+
&& make -j$(nproc) \
71+
&& make install
72+
73+
# =========================
74+
# PECL Extensions
75+
# =========================
76+
WORKDIR /tmp
77+
78+
# Redis
79+
RUN pecl download redis \
80+
&& tar xzf redis-*.tgz \
81+
&& rm redis-*.tgz \
82+
&& cd redis-* \
83+
&& phpize \
84+
&& ./configure \
85+
&& make -j$(nproc) \
86+
&& make install \
87+
&& cd ..
88+
89+
## Imagick
90+
#RUN pecl download imagick \
91+
# && tar xzf imagick-*.tgz \
92+
# && rm imagick-*.tgz \
93+
# && cd imagick-* \
94+
# && phpize \
95+
# && ./configure \
96+
# && make -j$(nproc) \
97+
# && make install \
98+
# && cd ..
99+
100+
# Enable all extensions
101+
RUN echo "" \
102+
&& echo "extension=gd.so" > $PHP_INI_DIR/conf.d/gd.ini \
103+
&& echo "extension=pdo_mysql.so" > $PHP_INI_DIR/conf.d/pdo_mysql.ini \
104+
&& echo "extension=ldap.so" > $PHP_INI_DIR/conf.d/ldap.ini \
105+
&& echo "extension=gmp.so" > $PHP_INI_DIR/conf.d/gmp.ini \
106+
&& echo "extension=exif.so" > $PHP_INI_DIR/conf.d/exif.ini \
107+
&& echo "extension=redis.so" > $PHP_INI_DIR/conf.d/redis.ini \
108+
#&& echo "extension=imagick.so" > $PHP_INI_DIR/conf.d/imagick.ini \
109+
&& echo ""
110+
111+
## create symlinks
112+
#RUN ls -lah ${PHP_PREFIX}/lib/php/extensions/no-debug-non-zts-20240924/ \
113+
# && mkdir -p /usr/local/lib/php \
114+
# && ln -s $(php -r "echo ini_get('extension_dir');") /usr/local/lib/php/extensions \
115+
# && ls -lah $PHP_INI_DIR/conf.d/ \
116+
# && ln -s $PHP_INI_DIR/conf.d /usr/local/lib/php/conf.d
117+
118+
# =========================
119+
# Stage 2: Package extractor
120+
# =========================
121+
# more see: https://github.com/Tob1as/docker-build-example/blob/main/distroless.debian.Dockerfile#L54-L100
122+
FROM dhi.io/php:${BUILD_PHP_VERSION}${BUILD_OS:+-${BUILD_OS}}-dev AS deb-extractor
123+
124+
WORKDIR /tmp
125+
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
126+
127+
# List of packages for download separated by spaces.
128+
ENV PACKAGE_LIST='libpng16-16t64 libwebp7 libjpeg62-turbo libxpm4 libfreetype6 libbz2-1.0 libsharpyuv0 libx11-6 libxau6 libxcb1 libxdmcp6'
129+
130+
# hadolint ignore=DL3008,DL3015,SC2086
131+
RUN \
132+
apt-get update && \
133+
apt-get install -y apt-rdepends tree && \
134+
# Search subpackages for package (apt-rdepends PACKAGE | grep -v "^ " | sort -u | tr '\n' ' ')
135+
#packages=$(for package in $PACKAGE_LIST; do \
136+
# apt-rdepends $package 2>/dev/null | \
137+
# grep -v "^ " | \
138+
# grep -v "^PreDepends:" | \
139+
# sort -u; \
140+
#done | sort -u) && \
141+
packages=$PACKAGE_LIST ; \
142+
# Download packages
143+
echo ">> Packages to Download: $(echo $packages | tr '\n' ' ')" && \
144+
apt-get download \
145+
$packages \
146+
&& \
147+
mkdir -p /dpkg/var/lib/dpkg/status.d/ && \
148+
for deb in *.deb; do \
149+
package_name=$(dpkg-deb -I "${deb}" | awk '/^ Package: .*$/ {print $2}'); \
150+
echo "Processing: ${package_name}"; \
151+
dpkg --ctrl-tarfile "$deb" | tar -Oxf - ./control > "/dpkg/var/lib/dpkg/status.d/${package_name}"; \
152+
dpkg --extract "$deb" /dpkg || exit 10; \
153+
done \
154+
&& \
155+
echo "Packages have been processed !"
156+
157+
# Remove unnecessary files extracted from deb packages like man pages and docs etc.
158+
RUN find /dpkg/ -type d -empty -delete && \
159+
rm -r /dpkg/usr/share/doc/
160+
161+
# List directory and file structure
162+
#RUN tree /dpkg
163+
164+
# =========================
165+
# Stage 3: DHI FPM Image
166+
# =========================
167+
FROM dhi.io/php:${BUILD_PHP_VERSION}${BUILD_OS:+-${BUILD_OS}}-fpm AS production
168+
ARG BUILD_PHP_VERSION
169+
LABEL org.opencontainers.image.source="https://github.com/Tob1as/docker-php"
170+
# Copy php extensions
171+
COPY --from=builder ${PHP_PREFIX}/lib/php/extensions/ ${PHP_PREFIX}/lib/php/extensions/
172+
COPY --from=builder ${PHP_PREFIX}/etc/php/conf.d ${PHP_PREFIX}/etc/php/conf.d
173+
# Copy the libraries from the extractor stage into root
174+
COPY --from=deb-extractor /dpkg /

0 commit comments

Comments
 (0)