forked from nanoninja/php-fpm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDockerfile
138 lines (130 loc) · 9.23 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# 2021-11-23 - updated to php-fpm 7.4.26
#
# 2021-09-24 - modules smbclient, acpu, gmp added for NextCLOUD as per https://docs.nextcloud.com/server/latest/admin_manual/installation/source_installation.html
# module pcntl remains disabled, as I don't want to recompile php as a whole... https://www.php.net/manual/en/pcntl.installation.php
# gmp was a pain, as it is only available in buster/security
#
# 2021-12-02 - updated to the latest fpm-bullseye docker image as test
#
# 2021-12-20 - updated to 8.0.14-fpm-buster
#
# 2022-01-25 - updated to 8.1.2-fpm-buster
FROM php:8.1.2-fpm-buster
ENV ACCEPT_EULA=Y
LABEL maintainer="Antoine Besnier <[email protected]>"
CMD ["php-fpm"]
EXPOSE 9000
STOPSIGNAL SIGQUIT
RUN /bin/sh -c set -eux; cd /usr/local/etc; if [ -d php-fpm.d ]; then sed 's!=NONE/!=!g' php-fpm.conf.default | tee php-fpm.conf > /dev/null; cp php-fpm.d/www.conf.default php-fpm.d/www.conf; else mkdir php-fpm.d; cp php-fpm.conf.default php-fpm.d/www.conf; { echo '[global]'; echo 'include=etc/php-fpm.d/*.conf'; } | tee php-fpm.conf; fi; { echo '[global]'; echo 'error_log = /proc/self/fd/2'; echo; echo '; https://github.com/docker-library/php/pull/725#issuecomment-443540114'; echo 'log_limit = 8192'; echo; echo '[www]'; echo '; if we send this to /proc/self/fd/1, it never appears'; echo 'access.log = /proc/self/fd/2'; echo; echo 'clear_env = no'; echo; echo '; Ensure worker stdout and stderr are sent to the main error log.'; echo 'catch_workers_output = yes'; echo 'decorate_workers_output = no'; } | tee php-fpm.d/docker.conf; { echo '[global]'; echo 'daemonize = no'; echo; echo '[www]'; echo 'listen = 9000'; } | tee php-fpm.d/zz-docker.conf
WORKDIR /var/www/html
ENTRYPOINT ["docker-php-entrypoint"]
# php8.1.1
ENV PHP_SHA256="6b448242fd360c1a9f265b7263abf3da25d28f2b2b0f5465533b69be51a391dd"
ENV PHP_URL="https://www.php.net/distributions/php-8.1.2.tar.xz" PHP_ASC_URL="https://www.php.net/distributions/php-8.1.2.tar.xz.asc"
ENV PHP_VERSION="8.1.2"
ENV GPG_KEYS="F1F692238FBC1666E5A5CCD4199F9DFEF6FFBAFD 39B641343D8C104B2B146DC3F9C39DC0B9698544 528995BFEDFBA7191D46839EF9BA0ADA31CBD89E"
#php 8.0.14
#ENV PHP_SHA256="fbde8247ac200e4de73449d9fefc8b495d323b5be9c10cdb645fb431c91156e3"
#ENV PHP_URL="https://www.php.net/distributions/php-8.0.14.tar.xz" PHP_ASC_URL="https://www.php.net/distributions/php-8.0.14.tar.xz.asc"
#ENV PHP_VERSION="8.0.14"
#ENV GPG_KEYS="1729F83938DA44E27BA0F4D3DBDB397470D12172 BFDDD28642824F8118EF77909B67A5C12229118F"
# php build setup
ENV PHP_LDFLAGS="-Wl,-O1 -pie"
ENV PHP_CPPFLAGS="-fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
ENV PHP_CFLAGS="-fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
ENV PHP_EXTRA_CONFIGURE_ARGS="--enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --disable-cgi --with-xmlrpc"
RUN /bin/sh -c set -eux; mkdir -p "$PHP_INI_DIR/conf.d"; [ ! -d /var/www/html ]; mkdir -p /var/www/html; chown www-data:www-data /var/www/html; chmod 777 /var/www/html
ENV PHP_INI_DIR="/usr/local/etc/php"
RUN /bin/sh -c 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 PHPIZE_DEPS="autoconf dpkg-dev file g++ gcc libc-dev make pkg-config re2c"
RUN /bin/sh -c set -eux; { echo 'Package: php*'; echo 'Pin: release *'; echo 'Pin-Priority: -1'; } > /etc/apt/preferences.d/no-debian-php
RUN /bin/sh -c set -eux; savedAptMark="$(apt-mark showmanual)"; apt-get update; apt-get install -y --no-install-recommends ${PHP_EXTRA_BUILD_DEPS:-} libargon2-dev libcurl4-openssl-dev libonig-dev libreadline-dev libsodium-dev libsqlite3-dev libssl-dev libxml2-dev zlib1g-dev libgmp-dev ; export CFLAGS="$PHP_CFLAGS" CPPFLAGS="$PHP_CPPFLAGS" LDFLAGS="$PHP_LDFLAGS" ; docker-php-source extract; cd /usr/src/php; gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; if [ ! -d /usr/include/curl ]; then ln -sT "/usr/include/$debMultiarch/curl" /usr/local/include/curl; fi; ./configure --build="$gnuArch" --with-config-file-path="$PHP_INI_DIR" --with-config-file-scan-dir="$PHP_INI_DIR/conf.d" --enable-option-checking=fatal --with-mhash --with-pic --enable-ftp --enable-mbstring --enable-mysqlnd --with-password-argon2 --with-sodium=shared --with-pdo-sqlite=/usr --with-sqlite3=/usr --with-curl --with-openssl --with-readline --with-zlib --with-gmp --enable-pcntl --with-pear $(test "$gnuArch" = 's390x-linux-gnu' && echo '--without-pcre-jit') --with-libdir="lib/$debMultiarch" ${PHP_EXTRA_CONFIGURE_ARGS:-} ; make -j "$(nproc)"; find -type f -name '*.a' -delete; make install; find /usr/local/bin /usr/local/sbin -type f -perm +0111 -exec strip --strip-all '{}' + || true; make clean; cp -v php.ini-* "$PHP_INI_DIR/"; cd /; docker-php-source delete; apt-mark auto '.*' > /dev/null; [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; find /usr/local -type f -executable -exec ldd '{}' ';' | awk '/=>/ { print $(NF-1) }' | sort -u | xargs -r dpkg-query --search | cut -d: -f1 | sort -u | xargs -r apt-mark manual ; apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; rm -rf /var/lib/apt/lists/*; pecl update-channels; rm -rf /tmp/pear ~/.pearrc; php --version
RUN /bin/sh -c set -eux; savedAptMark="$(apt-mark showmanual)"; apt-get update; apt-get install -y --no-install-recommends gnupg dirmngr; rm -rf /var/lib/apt/lists/*; mkdir -p /usr/src; cd /usr/src; curl -fsSL -o php.tar.xz "$PHP_URL"; if [ -n "$PHP_SHA256" ]; then echo "$PHP_SHA256 *php.tar.xz" | sha256sum -c -; fi; if [ -n "$PHP_ASC_URL" ]; then curl -fsSL -o php.tar.xz.asc "$PHP_ASC_URL"; export GNUPGHOME="$(mktemp -d)"; for key in $GPG_KEYS; do gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key"; done; gpg --batch --verify php.tar.xz.asc php.tar.xz; gpgconf --kill all; rm -rf "$GNUPGHOME"; fi; apt-mark auto '.*' > /dev/null; apt-mark manual $savedAptMark > /dev/null; apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false
# Microsoft SQL Server Prerequisites
# from https://laravel-news.com/install-microsoft-sql-drivers-php-7-docker
RUN php --info && apt-get update \
&& apt-get -y --no-install-recommends install gnupg \
&& curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
&& curl https://packages.microsoft.com/config/debian/10/prod.list \
> /etc/apt/sources.list.d/mssql-release.list \
&& apt-get install -y --no-install-recommends \
locales \
apt-transport-https \
&& echo "en_US.UTF-8 UTF-8" > /etc/locale.gen \
&& locale-gen \
&& apt-get update --allow-releaseinfo-change\
&& apt-get -y --no-install-recommends install \
unixodbc-dev \
msodbcsql17 \
&& apt-get upgrade -y \
&& apt-get install -y \
g++ \
libbz2-dev \
libc-client-dev \
libcurl4-gnutls-dev \
libedit-dev \
libfreetype6-dev \
libicu-dev \
libjpeg62-turbo-dev \
libkrb5-dev \
libldap2-dev \
libldb-dev \
libmagickwand-dev \
libmcrypt-dev \
libmemcached-dev \
libpng-dev \
libpq-dev \
libsqlite3-dev \
libssl-dev \
libreadline-dev \
libsmbclient-dev \
libxslt1-dev \
libzip-dev \
libonig-dev \
memcached \
wget \
unzip \
zlib1g-dev \
&& docker-php-ext-install -j$(nproc) \
bcmath \
bz2 \
calendar \
exif \
gettext \
mysqli \
opcache \
pdo_mysql \
pdo_pgsql \
pgsql \
soap \
# sockets \
# xmlrpc \ note: xmlrpc has been unbundled from php8.0
xsl \
&& CFLAGS="$CFLAGS -D_GNU_SOURCE" docker-php-ext-install sockets \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd \
&& PHP_OPENSSL=yes docker-php-ext-configure imap --with-kerberos --with-imap-ssl \
&& docker-php-ext-install -j$(nproc) imap \
&& docker-php-ext-configure intl \
&& docker-php-ext-install -j$(nproc) intl \
&& docker-php-ext-configure ldap \
&& docker-php-ext-install ldap \
&& docker-php-ext-configure zip \
&& docker-php-ext-install zip \
&& docker-php-ext-install mbstring pdo pdo_mysql \
&& pecl install xdebug && docker-php-ext-enable xdebug \
&& pecl install memcached && docker-php-ext-enable memcached \
&& pecl install mongodb && docker-php-ext-enable mongodb \
&& pecl install redis && docker-php-ext-enable redis \
&& pecl install smbclient && docker-php-ext-enable smbclient \
&& pecl install apcu && docker-php-ext-enable apcu \
# && pecl install xmlrpc-1.0.0RC2 && docker-php-ext-enable xmlrpc\ note: xmlrpc has been unbundled from php8
# && docker-php-ext-enable gmp \
&& pecl install sqlsrv-5.10.0beta2 pdo_sqlsrv-5.10.0beta2 xdebug \
&& yes '' | pecl install imagick && docker-php-ext-enable imagick \
&& docker-php-ext-enable sqlsrv pdo_sqlsrv xdebug \
&& docker-php-source delete \
&& apt-get remove -y g++ \
&& apt-get autoremove --purge -y && apt-get autoclean -y && apt-get clean -y \
&& rm -rf /var/lib/apt/lists/* \
&& rm -rf /tmp/* /var/tmp/*