Dockerfile 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. ARG BASE_IMAGE_VERSION="v3.11.0"
  2. FROM --platform=${BUILDPLATFORM} darthsim/imgproxy-base:${BASE_IMAGE_VERSION} as base-native
  3. FROM darthsim/imgproxy-base:${BASE_IMAGE_VERSION} as build
  4. ARG BUILDARCH
  5. ARG TARGETARCH
  6. RUN dpkg --add-architecture ${BUILDARCH} \
  7. && apt-get update \
  8. && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends libstdc++6:${BUILDARCH}
  9. # This is pretty dirty hack. Building imgproxy under Qemu is pretty slow.
  10. # So we install Go binary native for the BUILDARCH.
  11. RUN rm -rf /usr/local/go
  12. COPY --from=base-native /usr/local/go /usr/local/go
  13. ENV CGO_ENABLED=1
  14. ENV GOOS=linux
  15. ENV GOARCH=$TARGETARCH
  16. COPY . .
  17. RUN bash -c 'go build -v -ldflags "-s -w" -o /opt/imgproxy/bin/imgproxy'
  18. # Remove unnecessary files
  19. RUN rm -rf /opt/imgproxy/lib/pkgconfig /opt/imgproxy/lib/cmake
  20. # ==================================================================================================
  21. # Final image
  22. FROM ubuntu:noble
  23. LABEL maintainer="Sergey Alexandrovich <darthsim@gmail.com>"
  24. RUN apt-get update \
  25. && apt-get upgrade -y \
  26. && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
  27. bash \
  28. ca-certificates \
  29. libstdc++6 \
  30. fontconfig-config \
  31. fonts-dejavu-core \
  32. media-types \
  33. libjemalloc2 \
  34. libtcmalloc-minimal4 \
  35. && ln -s /usr/lib/$(uname -m)-linux-gnu/libjemalloc.so.2 /usr/local/lib/libjemalloc.so \
  36. && ln -s /usr/lib/$(uname -m)-linux-gnu/libtcmalloc_minimal.so.4 /usr/local/lib/libtcmalloc_minimal.so \
  37. && rm -rf /var/lib/apt/lists/*
  38. COPY --from=build /opt/imgproxy/bin/imgproxy /opt/imgproxy/bin/
  39. COPY --from=build /opt/imgproxy/lib /opt/imgproxy/lib
  40. RUN ln -s /opt/imgproxy/bin/imgproxy /usr/local/bin/imgproxy
  41. COPY docker/entrypoint.sh /usr/local/bin/
  42. COPY docker/imgproxy-build-package /usr/local/bin/
  43. # AWS Lambda adapter
  44. COPY --from=public.ecr.aws/awsguru/aws-lambda-adapter:0.8.3 /lambda-adapter /opt/extensions/lambda-adapter
  45. COPY NOTICE /opt/imgproxy/share/doc/
  46. ENV VIPS_WARNING=0
  47. ENV MALLOC_ARENA_MAX=2
  48. ENV IMGPROXY_MALLOC malloc
  49. ENV AWS_LWA_READINESS_CHECK_PATH /health
  50. ENV AWS_LWA_INVOKE_MODE response_stream
  51. # Disable SVE on ARM64. SVE is slower than NEON on Amazon Graviton 3
  52. ENV VIPS_VECTOR=167772160
  53. RUN groupadd -r imgproxy \
  54. && useradd -r -u 999 -g imgproxy imgproxy \
  55. && mkdir -p /var/cache/fontconfig \
  56. && chmod 777 /var/cache/fontconfig
  57. USER 999
  58. ENTRYPOINT [ "entrypoint.sh" ]
  59. CMD ["imgproxy"]
  60. EXPOSE 8080