Skip to content

Dockerfile for stable-diffusion-webui with the goal of keeping it small and follow best practices. (Dockerfile, CI image build)

License

Notifications You must be signed in to change notification settings

jim60105/docker-stable-diffusion-webui

Repository files navigation

docker-stable-diffusion-webui

δΈ­ζ–‡ | English

CodeFactor DeepSource GitHub Workflow Status (with event)

Yet another docker image for AUTOMATIC1111/Stable Diffusion web UI: A web interface for Stable Diffusion, implemented using Gradio library. from the community.

The main goal of designing this image is to keep it small and follow best practices. Successfully controlled the size to around 10GB, saving approximately 1/3 of the capacity compared to other existing solutions.

This makes it possible for me to consistently automate building images by using the CI workflow on GitHub free runner. You can pull the pre-built images from ghcr, saving time instead of constructing them yourself!

Get the Dockerfile at GitHub, or pull the image from ghcr.io.

πŸš€ Get your Docker ready for GPU support

Windows

Once you have installed Docker Desktop, CUDA Toolkit, NVIDIA Windows Driver, and ensured that your Docker is running with WSL2, you are ready to go.

Here is the official documentation for further reference.
https://docs.nvidia.com/cuda/wsl-user-guide/index.html#nvidia-compute-software-support-on-wsl-2 https://docs.docker.com/desktop/wsl/use-wsl/#gpu-support

Linux, OSX

Install an NVIDIA GPU Driver if you do not already have one installed.
https://docs.nvidia.com/datacenter/tesla/tesla-installation-notes/index.html

Install the NVIDIA Container Toolkit with this guide.
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html

πŸ–₯️ Run the project

  1. Clone the repository to your local machine and navigate to the directory.

    git clone https://github.com/jim60105/docker-stable-diffusion-webui.git
    cd docker-stable-diffusion-webui
  2. Compose up the service and wait for startup loading.

    docker compose up -d
  3. Access the web UI at http://localhost:7860.
    (Browser won't be started automatically!)

Models and settings will be stored at directory ./data.
Output images will be stored at directory ./data/output for default.

πŸ”€ Switch between different versions/branches

Docker Image Tags

The docker image tag corresponds to the non-RC version number from v1.6.1 and its dev branch in AUTOMATIC1111/stable-diffusion-webui. The dev image rebuilds weekly to keep up with the latest changes.

Image tag Code version
dev (latest) AUTOMATIC1111/stable-diffusion-webui dev branch
v1.6.1 AUTOMATIC1111/stable-diffusion-webui v1.6.1 tag
v1.7.0 AUTOMATIC1111/stable-diffusion-webui v1.7.0 tag
v1.8.0 AUTOMATIC1111/stable-diffusion-webui v1.8.0 tag
v1.9.4 AUTOMATIC1111/stable-diffusion-webui v1.9.4 tag
v1.10.1 AUTOMATIC1111/stable-diffusion-webui v1.10.1 tag

You can check all available tags at ghcr.io.

Specify the image in the docker-compose.yml

Change the tag after ghcr.io/jim60105/stable-diffusion-webui in the image field of docker-compose.yml to your desired version.

For example, if you want to use the v1.8.0 version, you should modify it to:

image: ghcr.io/jim60105/stable-diffusion-webui:v1.8.0

Then restart the service using the following command:

docker compose down && docker compose up -d

Use the forge version

There's a special version forge which is based on the main branch of lllyasviel/stable-diffusion-webui-forge. The forge image rebuilds weekly to keep up with the latest changes.

Image tag Code version
forge lllyasviel/stable-diffusion-webui-forge main branch
forge-previous lllyasviel/stable-diffusion-webui-forge previous tag

You can use it with the docker-compose.forge.yml file.

docker compose -f docker-compose.forge.yml up -d

Note

Notice that they used the same port 7860, so you can't run them at the same time.
Please stop the running service before starting another one.
image

runtime-deps images

Note

You can build it locally with Docker build arguments: SKIP_REQUIREMENTS_INSTALL=true

Some recent versions have runtime-deps images that you can use, like v1.8.0-runtime-deps, v1.9.4-runtime-deps, and forge-runtime-deps.

These images does not include pre-installed pip requirements.
Instead, the requirements will be installed during the image first launch.

The initial startup process may take some time, but this leads to a smaller image size of 1.3GB!

Consider using them if they fit your needs.

Tip

This image can be used in a tricky way: to preserve and reuse the /home/1001/.local directory through a volume.
It's like sharing the same environment across different Python applications.
I wouldn't recommend this approach for regular users... you must be fully aware of what you're doing.
As for power users, please refer to this commit for more information.
Thanks to the community for coming up with this amazing idea!πŸ˜†

πŸ› οΈ Build instructions

Important

Clone the Git repository recursively to include submodules:
git clone --recursive https://github.com/jim60105/docker-stable-diffusion-webui.git

docker compose up -d --build

Note

If you are using an earlier version of the docker client, it is necessary to enable the BuildKit mode when building the image. This is because I used the COPY --link feature which enhances the build performance and was introduced in Buildx v0.8.
With the Docker Engine 23.0 and Docker Desktop 4.19, Buildx has become the default build client. So you won't have to worry about this when using the latest version.

πŸ”„ Migrate from existing settings

  1. Edit your existing config.json and modify all paths to be under /data, for example:

    {
        "outdir_samples": "",
        "outdir_txt2img_samples": "/data/output/txt2img-images",
        "outdir_img2img_samples": "/data/output/img2img-images",
        "outdir_extras_samples": "/data/output/extras-images",
        "outdir_grids": "",
        "outdir_txt2img_grids": "/data/output/txt2img-grids",
        "outdir_img2img_grids": "/data/output/img2img-grids",
        "outdir_save": "/data/log/images",
        "outdir_init_images": "/data/output/init-images",
    }
  2. Place config.json under the data directory.

  3. Put the models and other existing data into corresponding folders under data.

  4. Please correct the permissions of all the files in the data folder:

    docker run -v ".:/app" -it busybox sh -c "chown -R 1001:0 /app/data && chmod -R 775 /app/data"

Note

This instruction uses busybox to change the owner group of the data directory to 0 (root group) and grants write permission to the group. This aligns with OpenShift best practices by supporting arbitrary uid.

Warning

This image follows best practices by using non-root user and restricting write permissions to non-essential folders. You may not be able to store files outside the /data path unless appropriate modifications have been made.

πŸ“ LICENSE

Note

The main program, AUTOMATIC1111/stable-diffusion-webui, is distributed under AGPL-3.0 license.
Please consult their repository for access to the source code and licenses.
The following is the license for the Dockerfiles and CI workflows in this repository.

agplv3

GNU AFFERO GENERAL PUBLIC LICENSE Version 3

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.

Caution

An AGPLv3 licensed Dockerfile means that you MUST distribute the source code with the same license, if you

  • Re-distribute the image. (You can simply point to this GitHub repository if you doesn't made any code changes.)
  • Distribute a image that uses code from this repository.
  • Or distribute a image based on this image. (FROM ghcr.io/jim60105/stable-diffusion-webui in your Dockerfile)

"Distribute" means to make the image available for other people to download, usually by pushing it to a public registry. If you are solely using it for your personal purposes, this has no impact on you.

Please consult the LICENSE for more details.

About

Dockerfile for stable-diffusion-webui with the goal of keeping it small and follow best practices. (Dockerfile, CI image build)

Topics

Resources

License

Stars

Watchers

Forks

Packages