Dockerfile 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. ARG ARCH=
  2. FROM ${ARCH}alpine:3.17
  3. LABEL Maintainer="kerstin Sieren <kerstin@sieren.biz>" \
  4. Description="Lightweight container with Nginx & PHP-FPM based on Alpine Linux."
  5. # Install packages
  6. RUN apk --no-cache add \
  7. php81 \
  8. php81-fpm \
  9. php81-opcache \
  10. php81-pecl-apcu \
  11. php81-mysqli \
  12. php81-pgsql \
  13. php81-json \
  14. php81-openssl \
  15. php81-curl \
  16. php81-zlib \
  17. php81-soap \
  18. php81-xml \
  19. php81-fileinfo \
  20. php81-phar \
  21. php81-intl \
  22. php81-dom \
  23. php81-xmlreader \
  24. php81-ctype \
  25. php81-session \
  26. php81-iconv \
  27. php81-tokenizer \
  28. php81-zip \
  29. php81-simplexml \
  30. php81-mbstring \
  31. php81-gd \
  32. nginx \
  33. runit \
  34. curl \
  35. # Bring in gettext so we can get `envsubst`, then throw
  36. # the rest away. To do this, we need to install `gettext`
  37. # then move `envsubst` out of the way so `gettext` can
  38. # be deleted completely, then move `envsubst` back.
  39. && apk add --no-cache --virtual .gettext gettext \
  40. && mv /usr/bin/envsubst /tmp/ \
  41. && runDeps="$( \
  42. scanelf --needed --nobanner /tmp/envsubst \
  43. | awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \
  44. | sort -u \
  45. | xargs -r apk info --installed \
  46. | sort -u \
  47. )" \
  48. && apk add --no-cache $runDeps \
  49. && apk del .gettext \
  50. && mv /tmp/envsubst /usr/local/bin/ \
  51. # Remove alpine cache
  52. && rm -rf /var/cache/apk/* \
  53. # Remove default server definition
  54. && rm /etc/nginx/http.d/default.conf \
  55. # Make sure files/folders needed by the processes are accessable when they run under the nobody user
  56. && chown -R nobody.nobody /run \
  57. && chown -R nobody.nobody /var/lib/nginx \
  58. && chown -R nobody.nobody /var/log/nginx
  59. # Add configuration files
  60. COPY --chown=nobody rootfs/ /
  61. # Switch to use a non-root user from here on
  62. USER nobody
  63. # Add application
  64. WORKDIR /var/www/html
  65. # Expose the port nginx is reachable on
  66. EXPOSE 8080
  67. # Let runit start nginx & php-fpm
  68. CMD [ "/bin/docker-entrypoint.sh" ]
  69. # Configure a healthcheck to validate that everything is up&running
  70. HEALTHCHECK --timeout=10s CMD curl --silent --fail http://127.0.0.1:8080/fpm-ping
  71. ENV client_max_body_size=2M \
  72. clear_env=no \
  73. allow_url_fopen=On \
  74. allow_url_include=Off \
  75. display_errors=Off \
  76. file_uploads=On \
  77. max_execution_time=0 \
  78. max_input_time=-1 \
  79. max_input_vars=1000 \
  80. memory_limit=128M \
  81. post_max_size=8M \
  82. upload_max_filesize=2M \
  83. zlib.output_compression=On