Skip to content

Instantly share code, notes, and snippets.

@rodrigopa
Created January 17, 2023 15:37
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rodrigopa/56c11eae6109a4915e0e7e4ad00edd66 to your computer and use it in GitHub Desktop.
Save rodrigopa/56c11eae6109a4915e0e7e4ad00edd66 to your computer and use it in GitHub Desktop.
Dockerfile for PHP from Source
FROM alpine:3.16
LABEL maintainer="rodrigopa <rodrigo.pinheiroa@hotmail.com>" version="1.0" license="MIT"
ENV TIMEZONE=${timezone:-"America/Fortaleza"} \
APP_ENV=prod
RUN set -ex && apk update && apk add --no-cache ca-certificates curl wget tar xz tzdata pcre php81 php81-bcmath php81-curl php81-ctype php81-dom php81-fileinfo php81-gd php81-iconv php81-mbstring php81-mysqlnd php81-openssl php81-pdo php81-pdo_mysql php81-pdo_sqlite php81-phar php81-posix php81-redis php81-sockets php81-sodium php81-sysvshm php81-sysvmsg php81-sysvsem php81-simplexml php81-tokenizer php81-zip php81-zlib php81-xml php81-xmlreader php81-xmlwriter php81-pcntl php81-opcache && ln -sf /usr/bin/php81 /usr/bin/php && apk del --purge *-dev && rm -rf /var/cache/apk/* /tmp/* /usr/share/man /usr/share/php81 && php -v && php -m && echo -e "\033[42;37m Build Completed :).\033[0m\n"
ENV PHPIZE_DEPS="autoconf dpkg-dev dpkg file g++ gcc libc-dev make php81-dev php81-pear pkgconf re2c pcre-dev pcre2-dev zlib-dev libtool automake libaio-dev openssl-dev curl-dev" \
PHP_BUILD_VERSION=81 \
SW_VERSION="v5.0.0" \
COMPOSER_VERSION="2.3.1"
RUN set -ex && apk update && apk add --no-cache libstdc++ openssl git bash c-ares-dev libpq-dev && apk add --no-cache --virtual .build-deps $PHPIZE_DEPS && cd /tmp && curl -SL "https://github.com/swoole/swoole-src/archive/${SW_VERSION}.tar.gz" -o swoole.tar.gz && ls -alh && cd /tmp && mkdir -p swoole && tar -xf swoole.tar.gz -C swoole --strip-components=1 && ln -s /usr/bin/phpize${PHP_BUILD_VERSION} /usr/local/bin/phpize && ln -s /usr/bin/php-config${PHP_BUILD_VERSION} /usr/local/bin/php-config && ( cd swoole && phpize && ./configure --enable-openssl --enable-swoole-curl --enable-cares --enable-swoole-pgsql && make -s -j$(nproc) && make install ) && echo "memory_limit=1G" > /etc/php${PHP_BUILD_VERSION}/conf.d/00_default.ini && echo "opcache.enable_cli = 'On'" >> /etc/php${PHP_BUILD_VERSION}/conf.d/00_opcache.ini && echo "extension=swoole.so" > /etc/php${PHP_BUILD_VERSION}/conf.d/50_swoole.ini && echo "swoole.use_shortname = 'Off'" >> /etc/php${PHP_BUILD_VERSION}/conf.d/50_swoole.ini && wget -nv -O /usr/local/bin/composer https://github.com/composer/composer/releases/download/${COMPOSER_VERSION}/composer.phar && chmod u+x /usr/local/bin/composer && apk del .build-deps && rm -rf /var/cache/apk/* /tmp/* /usr/share/man /usr/local/bin/php* && php -v && php -m && php --ri swoole && php --ri Zend\ OPcache && composer && echo -e "\033[42;37m Build Completed :).\033[0m\n"
RUN set -ex \
# show php version and extensions \
&& php -v \
&& php -m \
&& php --ri swoole \
# ---------- some config ----------
&& cd /etc/php* \
# - config PHP
&& { \
echo "upload_max_filesize=64M"; \
echo "post_max_size=64M"; \
echo "memory_limit=1G"; \
echo "date.timezone=${TIMEZONE}"; \
} | tee conf.d/99_overrides.ini \
# - config timezone
&& ln -sf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime \
&& echo "${TIMEZONE}" > /etc/timezone \
# ---------- clear works ----------
&& rm -rf /var/cache/apk/* /tmp/* /usr/share/man
WORKDIR /opt/www
COPY . /opt/www
CMD composer install --no-dev -o
EXPOSE 8000
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment