Compare commits

...

3 Commits

Author SHA1 Message Date
Bernhard Frauendienst
054b185cbb
Merge 88d1879d59 into 2307ff6746 2025-01-08 19:16:59 -05:00
Bernhard Frauendienst
88d1879d59 Add GitHub Action for Docker images
Add a GitHub Action that builds a docker image on every push and tag,
and publishes it to GitHub container repository, and -- if a docker
username is defined in the repository secrets -- to the Docker Hub.
2024-05-13 19:16:59 +02:00
Bernhard Frauendienst
b62b606d30 Add Dockerfile
Based on ComfyUI PR #530

Co-Authored-By: ZacharyACoon <show>
2024-05-13 19:16:59 +02:00
5 changed files with 232 additions and 0 deletions

7
.dockerignore Normal file
View File

@ -0,0 +1,7 @@
.git
__pycache__/
*.py[cod]
input
models
notebooks
output

98
.github/workflows/docker.yml vendored Normal file
View File

@ -0,0 +1,98 @@
name: Build and publish Docker images
on:
push:
branches:
- "**"
tags:
- "v*.*.*"
pull_request:
branches:
- "main"
jobs:
docker:
strategy:
fail-fast: false
matrix:
include:
- id: cu118
name: CUDA 11.8
pytorch_install_args: "--index-url https://download.pytorch.org/whl/cu118"
- id: cu121
name: CUDA 12.1
pytorch_install_args: "--index-url https://download.pytorch.org/whl/cu121"
- id: rocm6.0
name: ROCm 6.0
pytorch_install_args: "--index-url https://download.pytorch.org/whl/rocm6.0"
- id: cpu
name: CPU only
pytorch_install_args: "--index-url https://download.pytorch.org/whl/cpu"
extra_args: --cpu
name: ${{ matrix.name }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Check which repositories to use
id: repositories
run: |
echo "GHCR_IMAGE_NAME=ghcr.io/${GITHUB_REPOSITORY_OWNER}/comfyui" >> "$GITHUB_ENV"
if [[ -n "${DOCKERHUB_USERNAME}" ]]; then
echo "DOCKERHUB_IMAGE_NAME=${DOCKERHUB_USERNAME}/comfyui" >> "$GITHUB_ENV"
else
echo "DOCKERHUB_IMAGE_NAME=" >> "$GITHUB_ENV"
echo "No Docker Hub username set, only deploying to GitHub Container Repository"
fi
env:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
GITHUB_REPOSITORY_OWNER: ${{ github.repository_owner }}
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
# list of Docker images to use as base name for tags
images: |
${{ env.DOCKERHUB_IMAGE_NAME }}
${{ env.GHCR_IMAGE_NAME }}
flavor: |
suffix=-${{ matrix.id }},onlatest=true
# generate Docker tags based on the following events/attributes
tags: |
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=sha
# set latest tag for default branch
type=raw,value=latest,enable={{is_default_branch}}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
if: github.event_name != 'pull_request' && env.DOCKERHUB_IMAGE_NAME != ''
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GHCR
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
PYTORCH_INSTALL_ARGS=${{ matrix.pytorch_install_args }}
EXTRA_ARGS=${{ matrix.extra_args }}
cache-from: type=gha,scope=${{ github.ref_name }}-${{ matrix.id }}
cache-to: type=gha,mode=max,scope=${{ github.ref_name }}-${{ matrix.id }}

72
Dockerfile Normal file
View File

@ -0,0 +1,72 @@
# syntax=docker/dockerfile:1
ARG PYTHON_VERSION=3.11
FROM python:${PYTHON_VERSION}-slim
ARG PYTORCH_INSTALL_ARGS=""
ARG EXTRA_ARGS=""
ARG USERNAME=comfyui
ARG USER_UID=1000
ARG USER_GID=${USER_UID}
# Fail fast on errors or unset variables
SHELL ["/bin/bash", "-eux", "-o", "pipefail", "-c"]
RUN <<EOF
groupadd --gid ${USER_GID} ${USERNAME}
useradd --uid ${USER_UID} --gid ${USER_GID} -m ${USERNAME}
EOF
RUN <<EOF
apt-get update
apt-get install -y --no-install-recommends \
git \
git-lfs \
rsync \
fonts-recommended
EOF
# run instructions as user
USER ${USER_UID}:${USER_GID}
WORKDIR /app
ENV XDG_CACHE_HOME=/cache
ENV PIP_CACHE_DIR=/cache/pip
ENV VIRTUAL_ENV=/app/venv
ENV VIRTUAL_ENV_CUSTOM=/app/custom_venv
# create cache directory. During build we will use a cache mount,
# but later this is useful for custom node installs
RUN --mount=type=cache,target=/cache/,uid=${USER_UID},gid=${USER_GID} \
mkdir -p ${PIP_CACHE_DIR}
# create virtual environment to manage packages
RUN python -m venv ${VIRTUAL_ENV}
# run python from venv (prefer custom_venv over baked-in one)
ENV PATH="${VIRTUAL_ENV_CUSTOM}/bin:${VIRTUAL_ENV}/bin:${PATH}"
RUN --mount=type=cache,target=/cache/,uid=${USER_UID},gid=${USER_GID} \
pip install torch torchvision torchaudio ${PYTORCH_INSTALL_ARGS}
# copy requirements files first so packages can be cached separately
COPY --chown=${USER_UID}:${USER_GID} requirements.txt .
RUN --mount=type=cache,target=/cache/,uid=${USER_UID},gid=${USER_GID} \
pip install -r requirements.txt
COPY --chown=${USER_UID}:${USER_GID} . .
# default environment variables
ENV COMFYUI_ADDRESS=0.0.0.0
ENV COMFYUI_PORT=8188
ENV COMFYUI_EXTRA_BUILD_ARGS="${EXTRA_ARGS}"
ENV COMFYUI_EXTRA_ARGS=""
# default start command
CMD \
if [ -d "${VIRTUAL_ENV_CUSTOM}" ]; then \
rsync -aP "${VIRTUAL_ENV}/" "${VIRTUAL_ENV_CUSTOM}/" ;\
sed -i "s!${VIRTUAL_ENV}!${VIRTUAL_ENV_CUSTOM}!g" "${VIRTUAL_ENV_CUSTOM}/pyvenv.cfg" ;\
fi ;\
python -u main.py --listen ${COMFYUI_ADDRESS} --port ${COMFYUI_PORT} ${COMFYUI_EXTRA_BUILD_ARGS} ${COMFYUI_EXTRA_ARGS}

View File

@ -207,6 +207,41 @@ Install the dependencies by opening your terminal inside the ComfyUI folder and:
After this you should have everything installed and can proceed to running ComfyUI.
## Docker
There are prebuilt docker images for AMD and NVIDIA GPUs on [GitHub Packages](https://ghcr.io/comfyanonymous/comfyui).
You can pull them to your local docker registry with:
```shell
# For NVIDIA GPUs
docker pull ghcr.io/comfyanonymous/comfyui:latest-cu121
# For AMD GPUs
docker pull ghcr.io/comfyanonymous/comfyui:latest-rocm6.0
# For CPU only
docker pull ghcr.io/comfyanonymous/comfyui:latest-cpu
```
### Building images manually
You can build a docker image with the Dockerfile in this repo.
Specify PYTORCH_INSTALL_ARGS build arg with one of the PyTorch commands above to build for AMD or NVIDIA GPUs.
```docker build --build-arg PYTORCH_INSTALL_ARGS="--index-url https://download.pytorch.org/whl/cu121" .```
```docker build --build-arg PYTORCH_INSTALL_ARGS="--index-url https://download.pytorch.org/whl/rocm6.0" .```
This dockerfile requires BuildKit to be enabled. If your docker does not support the buildx command, you can
enable BuildKit by setting the DOCKER_BUILDKIT environment variable.
```DOCKER_BUILDKIT=1 docker build --build-arg PYTORCH_INSTALL_ARGS="--index-url https://download.pytorch.org/whl/cu121" .```
NOTE: For building the CPU-only image, it is recommended that you add the --cpu flag to the EXTRA_ARGS build arg:
```docker build --build-arg PYTORCH_INSTALL_ARGS="--index-url https://download.pytorch.org/whl/cpu" --build-arg EXTRA_ARGS=--cpu .```
### Others:
#### Apple Mac silicon

20
docker-compose.yaml Normal file
View File

@ -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"