Dockerfile 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. FROM php:8.0.2-alpine3.13 as base
  2. ARG SHLINK_VERSION=2.5.2
  3. ENV SHLINK_VERSION ${SHLINK_VERSION}
  4. ENV SWOOLE_VERSION 4.6.3
  5. ENV PDO_SQLSRV_VERSION 5.9.0
  6. ENV LC_ALL "C"
  7. WORKDIR /etc/shlink
  8. # Install required PHP extensions
  9. RUN \
  10. # Install mysql and calendar
  11. docker-php-ext-install -j"$(nproc)" pdo_mysql calendar && \
  12. # Install sqlite
  13. apk add --no-cache sqlite-libs sqlite-dev && \
  14. docker-php-ext-install -j"$(nproc)" pdo_sqlite && \
  15. # Install postgres
  16. apk add --no-cache postgresql-dev && \
  17. docker-php-ext-install -j"$(nproc)" pdo_pgsql && \
  18. # Install intl
  19. apk add --no-cache icu-dev && \
  20. docker-php-ext-install -j"$(nproc)" intl && \
  21. # Install zip and gd
  22. apk add --no-cache libzip-dev zlib-dev libpng-dev && \
  23. docker-php-ext-install -j"$(nproc)" zip gd && \
  24. # Install gmp
  25. apk add --no-cache gmp-dev && \
  26. docker-php-ext-install -j"$(nproc)" gmp
  27. # Install sqlsrv driver
  28. RUN if [ $(uname -m) == "x86_64" ]; then \
  29. wget https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.5.1.1-1_amd64.apk && \
  30. apk add --allow-untrusted msodbcsql17_17.5.1.1-1_amd64.apk && \
  31. apk add --no-cache --virtual .phpize-deps ${PHPIZE_DEPS} unixodbc-dev && \
  32. pecl install pdo_sqlsrv-${PDO_SQLSRV_VERSION} && \
  33. docker-php-ext-enable pdo_sqlsrv && \
  34. apk del .phpize-deps && \
  35. rm msodbcsql17_17.5.1.1-1_amd64.apk ; \
  36. fi
  37. # Install swoole
  38. RUN apk add --no-cache --virtual .phpize-deps ${PHPIZE_DEPS} && \
  39. pecl install swoole-${SWOOLE_VERSION} && \
  40. docker-php-ext-enable swoole && \
  41. apk del .phpize-deps
  42. # Install shlink
  43. FROM base as builder
  44. COPY . .
  45. COPY --from=composer:2 /usr/bin/composer ./composer.phar
  46. RUN apk add --no-cache git && \
  47. php composer.phar install --no-dev --optimize-autoloader --prefer-dist --no-progress --no-interaction && \
  48. php composer.phar clear-cache && \
  49. rm -r docker composer.* && \
  50. sed -i "s/%SHLINK_VERSION%/${SHLINK_VERSION}/g" config/autoload/app_options.global.php
  51. # Prepare final image
  52. FROM base
  53. LABEL maintainer="Alejandro Celaya <alejandro@alejandrocelaya.com>"
  54. COPY --from=builder /etc/shlink .
  55. RUN ln -s /etc/shlink/bin/cli /usr/local/bin/shlink
  56. # Expose default swoole port
  57. EXPOSE 8080
  58. # Expose params config dir, since the user is expected to provide custom config from there
  59. VOLUME /etc/shlink/config/params
  60. # Copy config specific for the image
  61. COPY docker/docker-entrypoint.sh docker-entrypoint.sh
  62. COPY docker/config/shlink_in_docker.local.php config/autoload/shlink_in_docker.local.php
  63. COPY docker/config/php.ini ${PHP_INI_DIR}/conf.d/
  64. ENTRYPOINT ["/bin/sh", "./docker-entrypoint.sh"]