Skip to content

Commit 4c346f8

Browse files
feat: dockerfile updates — base pins, Composer 2.9.5, HEALTHCHECK, PHP 8.4
8.1: alpine:3.17 -> alpine:3.19, clean up edge repo refs, remove libsodium workaround (native in 3.19). Source: Alpine v3.19 APKINDEX 8.2: add HEALTHCHECK, Composer 2.5.1 -> 2.9.5 8.3: alpine:edge -> alpine:3.20, clean repo refs. Source: Alpine v3.20 APKINDEX 8.4: new Dockerfile using alpine:edge (php84 not yet in stable Alpine) TODO: pin to stable once PHP 8.4 lands in Alpine release All: Composer 2.5.1 -> 2.9.5. Source: https://getcomposer.org/versions All: add HEALTHCHECK (php-fpmXX -t config test) CI: add 8.4 to pr.yaml and release.yaml build matrices
1 parent feeb1f4 commit 4c346f8

14 files changed

Lines changed: 223 additions & 29 deletions

File tree

.github/workflows/pr.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ jobs:
1010
strategy:
1111
fail-fast: false
1212
matrix:
13-
version: [ "8.1", "8.2", "8.3" ]
13+
version: [ "8.1", "8.2", "8.3", "8.4" ]
1414

1515
name: ${{ matrix.version }}
1616
runs-on: ubuntu-latest

.github/workflows/release.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
strategy:
1414
fail-fast: false
1515
matrix:
16-
version: [ "8.1", "8.2", "8.3" ]
16+
version: [ "8.1", "8.2", "8.3", "8.4" ]
1717
arch: [
1818
"linux/amd64,linux/arm64,linux/arm/v8,linux/arm/v7",
1919
]

8.1/Dockerfile

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
1-
FROM --platform=$BUILDPLATFORM alpine:3.17 as main
1+
FROM --platform=$BUILDPLATFORM alpine:3.19 as main
22

33
LABEL maintainer="Jorge Arco <jorge.arcoma@gmail.com>"
44

5-
RUN apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/edge/main add \
5+
RUN apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/v3.19/main add \
66
icu-libs \
7-
libsodium \
8-
&&apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/edge/community add \
9-
# Current packages don't exist in other repositories
7+
&& apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/v3.19/community add \
108
libavif \
11-
&& apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing/ --allow-untrusted gnu-libiconv \
12-
# Packages
9+
gnu-libiconv \
1310
tini \
1411
php81 \
1512
php81-dev \
@@ -36,14 +33,16 @@ RUN apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/edge/main
3633
php81-fpm \
3734
php81-sodium \
3835
php81-tokenizer \
39-
# Iconv Fix
4036
php81-pecl-apcu \
4137
&& ln -sf /usr/bin/php81 /usr/bin/php
4238

4339
ADD rootfs /
4440

4541
ENTRYPOINT ["/sbin/tini", "--"]
4642

43+
HEALTHCHECK --interval=10s --timeout=3s --start-period=10s --retries=3 \
44+
CMD /usr/sbin/php-fpm81 -t 2>&1 | grep -q "test is successful" || exit 1
45+
4746
CMD ["/usr/sbin/php-fpm81", "-R", "--nodaemonize"]
4847

4948
EXPOSE 9000
@@ -55,10 +54,11 @@ FROM --platform=$BUILDPLATFORM main as dev
5554
ARG USER=root
5655
ARG PASSWORD=root
5756

58-
ARG COMPOSER_VERSION=2.5.1
57+
ARG COMPOSER_VERSION=2.9.5
5958

60-
RUN apk add -U --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing/ \
59+
RUN apk add -U --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/v3.19/community/ \
6160
php81-pear \
61+
php81-xdebug \
6262
openssh \
6363
supervisor \
6464
autoconf \
@@ -67,14 +67,10 @@ RUN apk add -U --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge
6767
wget \
6868
make \
6969
zip \
70-
php81-xdebug \
71-
# Delete APK cache.
7270
&& rm -rf /var/cache/apk/* \
73-
# Create ssh user for dev.
7471
&& sed -i s/#PermitRootLogin.*/PermitRootLogin\ yes/ /etc/ssh/sshd_config \
7572
&& echo "${USER}:${PASSWORD}" | chpasswd \
7673
&& ssh-keygen -A \
77-
# Download composer.
7874
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer --version=${COMPOSER_VERSION}
7975

8076
ADD devfs /

8.2/Dockerfile

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ ADD rootfs /
4343

4444
ENTRYPOINT ["/sbin/tini", "--"]
4545

46+
HEALTHCHECK --interval=10s --timeout=3s --start-period=10s --retries=3 \
47+
CMD /usr/sbin/php-fpm82 -t 2>&1 | grep -q "test is successful" || exit 1
48+
4649
CMD ["/usr/sbin/php-fpm82", "-R", "--nodaemonize"]
4750

4851
EXPOSE 9000
@@ -54,7 +57,7 @@ FROM --platform=$BUILDPLATFORM main as dev
5457
ARG USER=root
5558
ARG PASSWORD=root
5659

57-
ARG COMPOSER_VERSION=2.5.1
60+
ARG COMPOSER_VERSION=2.9.5
5861

5962
RUN apk add -U --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/v3.21/community/ \
6063
php82-pear \

8.3/Dockerfile

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
1-
FROM --platform=$BUILDPLATFORM alpine:edge as main
1+
FROM --platform=$BUILDPLATFORM alpine:3.20 as main
22

33
LABEL maintainer="Jorge Arco <jorge.arcoma@gmail.com>"
44

5-
RUN apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/edge/main add \
5+
RUN apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/v3.20/main add \
66
icu-libs \
7-
&& apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/edge/community add \
8-
# Current packages don't exist in other repositories
7+
&& apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/v3.20/community add \
98
libavif \
109
gnu-libiconv \
11-
# Packages
1210
tini \
1311
php83 \
1412
php83-dev \
@@ -35,14 +33,16 @@ RUN apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/edge/main
3533
php83-fpm \
3634
php83-sodium \
3735
php83-tokenizer \
38-
# Iconv Fix
3936
php83-pecl-apcu \
4037
&& ln -sf /usr/bin/php83 /usr/bin/php
4138

4239
ADD rootfs /
4340

4441
ENTRYPOINT ["/sbin/tini", "--"]
4542

43+
HEALTHCHECK --interval=10s --timeout=3s --start-period=10s --retries=3 \
44+
CMD /usr/sbin/php-fpm83 -t 2>&1 | grep -q "test is successful" || exit 1
45+
4646
CMD ["/usr/sbin/php-fpm83", "-R", "--nodaemonize"]
4747

4848
EXPOSE 9000
@@ -54,10 +54,11 @@ FROM --platform=$BUILDPLATFORM main as dev
5454
ARG USER=root
5555
ARG PASSWORD=root
5656

57-
ARG COMPOSER_VERSION=2.5.1
57+
ARG COMPOSER_VERSION=2.9.5
5858

59-
RUN apk add -U --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing/ \
59+
RUN apk add -U --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/v3.20/community/ \
6060
php83-pear \
61+
php83-xdebug \
6162
openssh \
6263
supervisor \
6364
autoconf \
@@ -66,14 +67,10 @@ RUN apk add -U --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge
6667
wget \
6768
make \
6869
zip \
69-
php83-xdebug \
70-
# Delete APK cache.
7170
&& rm -rf /var/cache/apk/* \
72-
# Create ssh user for dev.
7371
&& sed -i s/#PermitRootLogin.*/PermitRootLogin\ yes/ /etc/ssh/sshd_config \
7472
&& echo "${USER}:${PASSWORD}" | chpasswd \
7573
&& ssh-keygen -A \
76-
# Download composer.
7774
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer --version=${COMPOSER_VERSION}
7875

7976
ADD devfs /

8.4/Dockerfile

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# PHP 8.4 — uses alpine:edge until php84 lands in a stable Alpine release.
2+
# TODO: pin to alpine:3.22 (or next stable) once available.
3+
FROM --platform=$BUILDPLATFORM alpine:edge as main
4+
5+
LABEL maintainer="Jorge Arco <jorge.arcoma@gmail.com>"
6+
7+
RUN apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/edge/main add \
8+
icu-libs \
9+
&& apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/edge/community add \
10+
libavif \
11+
gnu-libiconv \
12+
tini \
13+
php84 \
14+
php84-dev \
15+
php84-common \
16+
php84-gd \
17+
php84-xmlreader \
18+
php84-bcmath \
19+
php84-ctype \
20+
php84-curl \
21+
php84-exif \
22+
php84-iconv \
23+
php84-intl \
24+
php84-mbstring \
25+
php84-opcache \
26+
php84-openssl \
27+
php84-pcntl \
28+
php84-phar \
29+
php84-session \
30+
php84-xml \
31+
php84-xsl \
32+
php84-zip \
33+
php84-zlib \
34+
php84-dom \
35+
php84-fpm \
36+
php84-sodium \
37+
php84-tokenizer \
38+
php84-pecl-apcu \
39+
&& ln -sf /usr/bin/php84 /usr/bin/php
40+
41+
ADD rootfs /
42+
43+
ENTRYPOINT ["/sbin/tini", "--"]
44+
45+
HEALTHCHECK --interval=10s --timeout=3s --start-period=10s --retries=3 \
46+
CMD /usr/sbin/php-fpm84 -t 2>&1 | grep -q "test is successful" || exit 1
47+
48+
CMD ["/usr/sbin/php-fpm84", "-R", "--nodaemonize"]
49+
50+
EXPOSE 9000
51+
52+
WORKDIR /app
53+
54+
FROM --platform=$BUILDPLATFORM main as dev
55+
56+
ARG USER=root
57+
ARG PASSWORD=root
58+
59+
ARG COMPOSER_VERSION=2.9.5
60+
61+
RUN apk add -U --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/edge/community/ \
62+
php84-pear \
63+
php84-xdebug \
64+
openssh \
65+
supervisor \
66+
autoconf \
67+
git \
68+
curl \
69+
wget \
70+
make \
71+
zip \
72+
&& rm -rf /var/cache/apk/* \
73+
&& sed -i s/#PermitRootLogin.*/PermitRootLogin\ yes/ /etc/ssh/sshd_config \
74+
&& echo "${USER}:${PASSWORD}" | chpasswd \
75+
&& ssh-keygen -A \
76+
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer --version=${COMPOSER_VERSION}
77+
78+
ADD devfs /
79+
80+
CMD ["supervisord", "--nodaemon", "--configuration", "/etc/supervisord/conf.d/supervisord.conf"]
81+
82+
EXPOSE 22 9003
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
zend_extension=opcache.so
2+
3+
opcache.memory_consumption=256
4+
opcache.interned_strings_buffer=8
5+
opcache.max_accelerated_files=10000
6+
opcache.revalidate_freq=2
7+
opcache.fast_shutdown=1
8+
opcache.enable_cli=1
9+
opcache.enable=1
10+
opcache.validate_timestamps=1
11+
opcache.max_wasted_percentage=10
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
zend_extension=xdebug.so
2+
3+
xdebug.mode=debug
4+
xdebug.log_level=0
5+
6+
xdebug.start_with_request=yes
7+
xdebug.client_host=${XDEBUG_CLIENT_HOST}
8+
xdebug.max_nesting_level=250
9+
10+
xdebug.var_display_max_data=10000
11+
xdebug.var_display_max_depth=20
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
date.timezone = "UTC"
2+
short_open_tag = Off
3+
session.auto_start = Off
4+
magic_quotes_gpc = Off
5+
register_globals = Off
6+
memory_limit = 1G

8.4/devfs/etc/profile

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
export CHARSET=UTF-8
2+
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
3+
export PAGER=less
4+
export PS1='\h:\w\$ '
5+
6+
umask 022
7+
8+
alias xon='mv /tmp/00_xdebug.ini /etc/php84/conf.d/'
9+
alias xoff='mv /etc/php84/conf.d/00_xdebug.ini /tmp'
10+
alias opcon='mv /tmp/00_opcache.ini /etc/php84/conf.d/'
11+
alias opcoff='mv /etc/php84/conf.d/00_opcache.ini /tmp'
12+
13+
alias profile='XDEBUG_CONFIG="profiler_enable=1 xdebug.profiler_output_name=profiler.out.%p profiler_output_dir=." php'
14+
15+
for script in /etc/profile.d/*.sh ; do
16+
if [ -r $script ] ; then
17+
. $script
18+
fi
19+
done

0 commit comments

Comments
 (0)