Dockerfile 2.6 KB

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