####################### #### Builder stage #### FROM library/ubuntu:22.04 AS builder ARG DEBIAN_FRONTEND=noninteractive RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt,sharing=locked \ apt update && apt-get install -y \ git \ libglib2.0-0 \ libgl1-mesa-glx \ python3-venv \ python3-pip \ build-essential \ python3-opencv \ libopencv-dev # This is needed for patchmatch support RUN cd /usr/lib/x86_64-linux-gnu/pkgconfig/ &&\ ln -sf opencv4.pc opencv.pc ARG WORKDIR=/invokeai WORKDIR ${WORKDIR} ENV VIRTUAL_ENV=${WORKDIR}/.venv ENV PATH="$VIRTUAL_ENV/bin:$PATH" RUN --mount=type=cache,target=/root/.cache/pip \ python3 -m venv ${VIRTUAL_ENV} &&\ pip install --extra-index-url https://download.pytorch.org/whl/cu116 \ torch==1.12.0+cu116 \ torchvision==0.13.0+cu116 &&\ pip install -e git+https://github.com/invoke-ai/PyPatchMatch@0.1.3#egg=pypatchmatch COPY . . RUN --mount=type=cache,target=/root/.cache/pip \ cp binary_installer/py3.10-linux-x86_64-cuda-reqs.txt requirements.txt && \ pip install -r requirements.txt &&\ pip install -e . ####################### #### Runtime stage #### FROM library/ubuntu:22.04 as runtime ARG DEBIAN_FRONTEND=noninteractive ENV PYTHONUNBUFFERED=1 RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt,sharing=locked \ apt update && apt install -y --no-install-recommends \ git \ curl \ ncdu \ iotop \ bzip2 \ libglib2.0-0 \ libgl1-mesa-glx \ python3-venv \ python3-pip \ build-essential \ python3-opencv \ libopencv-dev &&\ apt-get clean && apt-get autoclean ARG WORKDIR=/invokeai WORKDIR ${WORKDIR} ENV INVOKEAI_ROOT=/mnt/invokeai ENV VIRTUAL_ENV=${WORKDIR}/.venv ENV PATH="$VIRTUAL_ENV/bin:$PATH" COPY --from=builder ${WORKDIR} ${WORKDIR} COPY --from=builder /usr/lib/x86_64-linux-gnu/pkgconfig /usr/lib/x86_64-linux-gnu/pkgconfig # build patchmatch RUN python -c "from patchmatch import patch_match" ## workaround for non-existent initfile when runtime directory is mounted; see #1613 RUN touch /root/.invokeai ENTRYPOINT ["bash"] CMD ["-c", "python3 scripts/invoke.py --web --host 0.0.0.0"]