diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..d65532d0 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +__pycache__/ +*.py[cod] +input +models +notebooks +output diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..e0ca702a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,70 @@ +# 3.10.11-bullseye, has python, git, but relatively small (<250MB) +ARG BASE_IMAGE="python@sha256:88fb365ea5d52ec8f5799f40a4742b9fb3c91dac92f7048eabaae194a25ccc28" +ARG GPU_MAKE="nvidia" +ARG UID=1000 +ARG GID=1000 + +FROM ${BASE_IMAGE} +ARG GPU_MAKE +ARG UID +ARG GID + +SHELL [ "/bin/bash", "-uec"] +RUN \ + --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \ + --mount=target=/var/cache/apt,type=cache,sharing=locked \ +<<'EOF' + apt-get update + apt-get install -yq git-lfs + echo "comfyui" >> /etc/hostname +EOF + +# run instructions as user +USER ${UID}:${GID} +# run python from future venv +ENV PATH="/app/venv/bin:${PATH}" +# copy context to obvious location +COPY --chown=${UID}:${GID} ./ /app +# create cache directory *with user permissions* +WORKDIR /app/.cache +# default to app directory +WORKDIR /app +# set pip cache location +ENV XDG_CACHE_HOME="/app/.cache/pip" +# run with mounted cache +RUN --mount=type=cache,target=/app/.cache,uid=${UID},gid=${GID} <<'EOF' + mkdir -p /app/.cache/transformers + # choose package index based on chosen hardware + if [ "${GPU_MAKE}" = "nvidia" ]; then + EXTRA_INDEX_URL="https://download.pytorch.org/whl/cu118" + EXTRAS="xformers" + elif [ "${GPU_MAKE}" = "amd" ]; then + EXTRA_INDEX_URL="https://download.pytorch.org/whl/rocm5.4.2" + EXTRAS="" + elif [ "${GPU_MAKE}" = "cpu" ]; then + EXTRA_INDEX_URL="https://download.pytorch.org/whl/cpu" + EXTRAS="" + else + echo "Unknown GPU_MAKE provided as docker build arg." + exit 2 + fi + # create virtual environment to manage packages + python -m venv venv + # install framework packages + pip install \ + --extra-index-url "${EXTRA_INDEX_URL}" \ + install \ + torch \ + torchvision \ + torchaudio \ + ${EXTRAS} + pip install -r requirements.txt +EOF + +# default environment variables +ENV COMFYUI_ADDRESS=0.0.0.0 +ENV COMFYUI_PORT=8188 +ENV COMFYUI_EXTRA_ARGS="" +ENV TRANSFORMERS_CACHE="/app/.cache/transformers" +# default start command +CMD bash -c "python -u main.py --listen ${COMFYUI_ADDRESS} --port ${COMFYUI_PORT} ${COMFYUI_EXTRA_ARGS}" diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 00000000..daac055a --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,20 @@ +version: "3.9" + +services: + comfyui: + user: "1000:1000" + build: . + deploy: + resources: + reservations: + devices: + - driver: nvidia + count: 1 + capabilities: [gpu] + ports: + - "8188:8188" + volumes: + - "./models:/app/models" + - "./input:/app/input" + - "./temp:/app/output/temp" + - "./output:/app/output"