trrr14 / Dockerfile
Fred808's picture
Rename Dockerfile (1) to Dockerfile
3e96933 verified
# Stage 1: Build Stage (for dependencies)
FROM python:3.11-slim as builder
# Install build dependencies for qBittorrent client library
RUN apt-get update && \
apt-get install -y --no-install-recommends \
build-essential \
libssl-dev \
libffi-dev \
python3-dev \
&& rm -rf /var/lib/apt/lists/*
# Set up working directory
WORKDIR /app
# Copy only the requirements file to leverage Docker cache
COPY requirements.txt .
# Install Python dependencies
RUN pip install --no-cache-dir -r requirements.txt
# Stage 2: Final Image
# Use a base image that includes a modern Linux distribution for qBittorrent
FROM ubuntu:22.04
# Set environment variables
ENV DEBIAN_FRONTEND=noninteractive
ENV QB_WEBUI_PORT=8080
ENV APP_PORT=8000
# Install qBittorrent-nox (daemon) and other necessary packages
RUN apt-get update && \
apt-get install -y --no-install-recommends \
qbittorrent-nox \
python3 \
python3-pip \
# Install tini for proper signal handling and process management
tini \
&& rm -rf /var/lib/apt/lists/*
# Create a non-root user for security
RUN useradd -ms /bin/bash qbuser
# Copy the installed Python packages from the builder stage
COPY --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3/dist-packages
COPY --from=builder /usr/local/bin /usr/local/bin
# Set up the application directory and copy files
WORKDIR /home/qbuser/app
COPY app/ ./app/
COPY run.sh .
RUN chmod +x run.sh && \
chown -R qbuser:qbuser /home/qbuser/app
# Set the non-root user
USER qbuser
# Expose the FastAPI port and the qBittorrent Web UI port
EXPOSE 8000
EXPOSE 8080
# Use tini as the entrypoint to manage the main process
ENTRYPOINT ["/usr/bin/tini", "--"]
# Run the startup script
CMD ["./run.sh"]