PHPOpenCV.Dockerfile 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. ############################
  2. # 1. Builder stage
  3. ############################
  4. FROM ubuntu:22.04 AS builder
  5. ENV DEBIAN_FRONTEND=noninteractive
  6. WORKDIR /build
  7. # Build dependencies
  8. RUN apt update && apt install -y \
  9. build-essential \
  10. cmake \
  11. git \
  12. pkg-config \
  13. checkinstall \
  14. gcc-arm-linux-gnueabi \
  15. python3 \
  16. libjpeg-dev \
  17. libpng-dev \
  18. software-properties-common \
  19. wget \
  20. ca-certificates \
  21. && rm -rf /var/lib/apt/lists/*
  22. # PHP dev
  23. RUN add-apt-repository ppa:ondrej/php \
  24. && apt update \
  25. && apt install -y \
  26. php8.2-dev \
  27. php8.2-cli \
  28. && rm -rf /var/lib/apt/lists/*
  29. # OpenCV sources
  30. RUN git clone --depth 1 --branch 4.7.0 https://github.com/opencv/opencv.git \
  31. && git clone --depth 1 --branch 4.7.0 https://github.com/opencv/opencv_contrib.git
  32. # Build OpenCV
  33. RUN mkdir /build/opencv/build \
  34. && cd /build/opencv/build \
  35. && cmake \
  36. -D CMAKE_BUILD_TYPE=RELEASE \
  37. -D CMAKE_INSTALL_PREFIX=/usr/local \
  38. -D OPENCV_GENERATE_PKGCONFIG=YES \
  39. -D OPENCV_EXTRA_MODULES_PATH=/build/opencv_contrib/modules \
  40. .. \
  41. && make -j$(nproc) \
  42. && make install
  43. # Build php-opencv extension
  44. RUN git clone https://github.com/php-opencv/php-opencv.git \
  45. && cd php-opencv \
  46. && phpize \
  47. && ./configure --with-php-config=/usr/bin/php-config \
  48. && make \
  49. && make install
  50. ############################
  51. # 2. Runtime stage (MINIMAL)
  52. ############################
  53. FROM ubuntu:22.04
  54. ENV DEBIAN_FRONTEND=noninteractive
  55. WORKDIR /
  56. RUN apt update && apt install -y --no-install-recommends \
  57. software-properties-common \
  58. gnupg \
  59. ca-certificates \
  60. && add-apt-repository ppa:ondrej/php
  61. # Runtime dependencies only
  62. RUN apt update && apt install -y --no-install-recommends \
  63. php8.2-fpm \
  64. php8.2-cli \
  65. php8.2-gd \
  66. php8.2-curl \
  67. php8.2-zip \
  68. php8.2-xml \
  69. php8.2-mbstring \
  70. php8.2-mysql \
  71. php8.2-imagick \
  72. php8.2-redis \
  73. php8.2-intl \
  74. php8.2-xdebug \
  75. libjpeg-turbo8 \
  76. libpng16-16 \
  77. libstdc++6 \
  78. libgcc-s1 \
  79. netcat-traditional \
  80. iputils-ping \
  81. msmtp-mta \
  82. && rm -rf /var/lib/apt/lists/*
  83. # Copy OpenCV runtime libs
  84. COPY --from=builder /usr/local /usr/local
  85. # Copy PHP extension
  86. COPY --from=builder /usr/lib/php/20220829/opencv.so /usr/lib/php/20220829/
  87. # Enable extension
  88. RUN echo "extension=opencv.so" \
  89. > /etc/php/8.2/cli/conf.d/20-opencv.ini \
  90. && echo "extension=opencv.so" \
  91. > /etc/php/8.2/fpm/conf.d/20-opencv.ini
  92. # PHP-FPM config
  93. RUN sed -i 's|listen = .*|listen = 9000|' /etc/php/8.2/fpm/pool.d/www.conf \
  94. && mkdir -p /var/run/php
  95. EXPOSE 9000
  96. CMD ["/usr/sbin/php-fpm8.2", "-F"]