|
| 1 | +# Stage 1: Build FFmpeg Image |
| 2 | +FROM sipsorcery/ffmpegbuild:7.0 AS ffmpeg |
| 3 | + |
| 4 | +# Stage 2: Base Image - Install FFmpeg dependencies (This will be cached) |
| 5 | +FROM ubuntu:24.04 AS base |
| 6 | + |
| 7 | +ENV DEBIAN_FRONTEND=noninteractive |
| 8 | + |
| 9 | +# Install the required libraries for FFmpeg in the final image (as root) |
| 10 | +RUN apt-get update && apt-get install -y \ |
| 11 | + libdrm2 \ |
| 12 | + libsdl2-2.0-0 \ |
| 13 | + libsndio7.0 \ |
| 14 | + libxvidcore4 \ |
| 15 | + libxv1 \ |
| 16 | + libass9 \ |
| 17 | + libvpx-dev \ |
| 18 | + libsdl2-dev \ |
| 19 | + libx264-dev \ |
| 20 | + libx265-dev \ |
| 21 | + libopus-dev \ |
| 22 | + libfreetype6-dev \ |
| 23 | + libvorbis-dev \ |
| 24 | + libxvidcore-dev \ |
| 25 | + libavutil-dev \ |
| 26 | + libssl-dev \ |
| 27 | + libavdevice-dev \ |
| 28 | + libfdk-aac-dev \ |
| 29 | + aspnetcore-runtime-8.0 \ |
| 30 | + && rm -rf /var/lib/apt/lists/* |
| 31 | + |
| 32 | +WORKDIR /app |
| 33 | +EXPOSE 8081 |
| 34 | + |
| 35 | +# Stage 3: Build .NET Application (Only rebuilds if source code changes) |
| 36 | +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build |
| 37 | + |
| 38 | +ARG BUILD_CONFIGURATION=Release |
| 39 | +WORKDIR /src |
| 40 | + |
| 41 | +# Add local NuGet source (replace with your actual package version) |
| 42 | +#RUN mkdir -p /local-nuget |
| 43 | +#COPY ./local-nuget/*.nupkg /local-nuget/ |
| 44 | +#RUN dotnet nuget add source /local-nuget --name local |
| 45 | + |
| 46 | +COPY [".", "."] |
| 47 | + |
| 48 | +# Publish the application |
| 49 | +FROM build AS publish |
| 50 | +RUN dotnet publish "./AspNetLocalFunction.csproj" -c $BUILD_CONFIGURATION -o /app/publish |
| 51 | + |
| 52 | +# Stage 4: Final Image to Run the App |
| 53 | +FROM base AS final |
| 54 | + |
| 55 | +WORKDIR /app |
| 56 | + |
| 57 | +# Copy the published app from the build image |
| 58 | +COPY --from=publish /app/publish . |
| 59 | + |
| 60 | +# Copy FFmpeg binaries and libraries from the FFmpeg build image |
| 61 | +COPY --from=ffmpeg /usr/local/bin/ffmpeg /usr/local/bin/ |
| 62 | +COPY --from=ffmpeg /usr/local/bin/ffprobe /usr/local/bin/ |
| 63 | +COPY --from=ffmpeg /usr/local/lib/libavcodec.so.61.3.100 /usr/local/lib/ |
| 64 | +COPY --from=ffmpeg /usr/local/lib/libavdevice.so.61.1.100 /usr/local/lib/ |
| 65 | +COPY --from=ffmpeg /usr/local/lib/libavfilter.so.10.1.100 /usr/local/lib/ |
| 66 | +COPY --from=ffmpeg /usr/local/lib/libavformat.so.61.1.100 /usr/local/lib/ |
| 67 | +COPY --from=ffmpeg /usr/local/lib/libavutil.so.59.8.100 /usr/local/lib/ |
| 68 | +COPY --from=ffmpeg /usr/local/lib/libpostproc.so.58.1.100 /usr/local/lib/ |
| 69 | +COPY --from=ffmpeg /usr/local/lib/libswresample.so.5.1.100 /usr/local/lib/ |
| 70 | +COPY --from=ffmpeg /usr/local/lib/libswscale.so.8.1.100 /usr/local/lib/ |
| 71 | + |
| 72 | +# Update library links |
| 73 | +RUN ldconfig |
| 74 | + |
| 75 | +# Ensure FFmpeg is available in the PATH for your app |
| 76 | +ENV PATH="/usr/local/bin:${PATH}" |
| 77 | + |
| 78 | +# Set entrypoint to run the .NET application |
| 79 | +ENTRYPOINT ["dotnet", "AspNetLocalFunction.dll"] |
0 commit comments