Deploy OpenWebUI
Let’s run the OpenWebUI container after building the Docker image.
In the rapidly growing ecosystem of open-source Large Language Models (LLMs), OpenWebUI has emerged as a powerful and flexible front-end solution. Whether you’re experimenting with models like llama3, mistral, or gemma via Ollama, or running your own inference pipelines, OpenWebUI provides a seamless and user-friendly interface.
Inspired by the strengths of this open-source project, I plan to leverage OpenWebUI as a foundation to build my own custom system, DS2Man.
Start with the OpenWebUI Image from DockerHub
As mentioned earlier, the documentation is well-organized. Among the available options, I will start by pulling the OpenWebUI image from DockerHub and trying it out.
For detailed information, I referred to the Doc, Quick Start page.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
(base) jaoneol@DESKTOP-B7GM3C5:~$ docker pull ghcr.io/open-webui/open-webui:main
main: Pulling from open-webui/open-webui
dad67da3f26b: Pull complete
799440a7bae7: Pull complete
9596beeb5a6d: Pull complete
15658014cd85: Pull complete
c6c4c910d4a2: Pull complete
4f4fb700ef54: Pull complete
32d4a47d6ece: Pull complete
b5489e651093: Pull complete
9df73a9f1acd: Pull complete
ea4f3bfca87f: Pull complete
9aa9eb68ebf6: Pull complete
2ae51f2080a1: Pull complete
b01f0701a561: Pull complete
7c7ccc06a016: Pull complete
ace317527ada: Pull complete
Digest: sha256:01add1f7940bf57474055aaf34d4ea0ac762c05f309735e183b3712586f0befe
Status: Downloaded newer image for ghcr.io/open-webui/open-webui:main
ghcr.io/open-webui/open-webui:main
(base) jaoneol@DESKTOP-B7GM3C5:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ghcr.io/open-webui/open-webui main b74e4892e540 4 days ago 4.84GB
1
2
3
4
5
6
(base) jaoneol@DESKTOP-B7GM3C5:~$ docker run -d -p 3000:8080 -v open-webui:/app/backend/data --name open-webui ghcr.io/open-webui/open-webui:main
504de0d1957ef1133b718c4367260c5088b5c2220f969c7f61e78c2e8b69bfac
(base) jaoneol@DESKTOP-B7GM3C5:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
504de0d1957e ghcr.io/open-webui/open-webui:main "bash start.sh" 4 hours ago Up 4 hours (healthy) 0.0.0.0:3000->8080/tcp, [::]:3000->8080/tcp open-webui
Start with the OpenWebUI Source from GitHub
From now on, I plan to use the code by pulling it and making modifications as needed. Since many parts need to be changed, I will customize it myself.
First, I will explain the process of pulling the code from OpenWebUI’s GitHub, building it with Docker, and running the generated image.
1
2
3
4
5
6
7
8
9
10
11
(base) jaoneol@DESKTOP-B7GM3C5:/mnt/d/02.MyCode/GP-MyReferenc/04.DS2Man_UI$ git clone https://github.com/open-webui/open-webui 04.DS2Man_UI
Cloning into '04.DS2Man_UI'...
remote: Enumerating objects: 114200, done.
remote: Counting objects: 100% (367/367), done.
remote: Compressing objects: 100% (187/187), done.
remote: Total 114200 (delta 308), reused 180 (delta 180), pack-reused 113833 (fr
om 2)
Receiving objects: 100% (114200/114200), 232.26 MiB | 20.88 MiB/s, done.
Resolving deltas: 100% (74063/74063), done.
Updating files: 100% (4652/4652), done.
ycjang@DESKTOP-B7GM3C5 MINGW64 /d/02.MyCode/GP-MyReference (main)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
(base) jaoneol@DESKTOP-B7GM3C5:/mnt/d/02.MyCode/GP-MyReferenc/04.DS2Man_UI$ docker build -t ds2man-ui .
[+] Building 139.2s (31/31) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 7.03kB 0.0s
=> resolve image config for docker-image://docker.io/docker/dockerfile:1 2.4s
=> [auth] docker/dockerfile:pull token for registry-1.docker.io 0.0s
=> docker-image://docker.io/docker/dockerfile:1@sha256:9857836c9ee4268391bb5b09f9f157f3c91bb15821bb77969642813b0d00518d 0.6s
=> => resolve docker.io/docker/dockerfile:1@sha256:9857836c9ee4268391bb5b09f9f157f3c91bb15821bb77969642813b0d00518d 0.0s
=> => sha256:9857836c9ee4268391bb5b09f9f157f3c91bb15821bb77969642813b0d00518d 8.40kB / 8.40kB 0.0s
=> => sha256:176b5004df55ffa561c121dd12c0fad3ffe3c014318721c3c3d566008ce2627a 850B / 850B 0.0s
=> => sha256:a7a871c4f80fb0fd80a56efe8fc598eefc7be2ff7d36af617a31da498c779c68 1.26kB / 1.26kB 0.0s
=> => sha256:724f0f61ffc85cf6ad0032c9063f7a74cd6d3590fd1138154820556e0a92073b 13.16MB / 13.16MB 0.5s
=> => extracting sha256:724f0f61ffc85cf6ad0032c9063f7a74cd6d3590fd1138154820556e0a92073b 0.1s
=> [internal] load metadata for docker.io/library/node:22-alpine3.20 1.8s
=> [internal] load metadata for docker.io/library/python:3.11-slim-bookworm 2.0s
=> [auth] library/node:pull token for registry-1.docker.io 0.0s
=> [auth] library/python:pull token for registry-1.docker.io 0.0s
=> [internal] load .dockerignore 0.1s
=> => transferring context: 281B 0.0s
=> [base 1/13] FROM docker.io/library/python:3.11-slim-bookworm@sha256:9e1912aab0a30bbd9488eb79063f68f42a68ab0946cbe98fecf197fe5b085506 0.2s
=> => resolve docker.io/library/python:3.11-slim-bookworm@sha256:9e1912aab0a30bbd9488eb79063f68f42a68ab0946cbe98fecf197fe5b085506 0.0s
=> => sha256:9e1912aab0a30bbd9488eb79063f68f42a68ab0946cbe98fecf197fe5b085506 9.13kB / 9.13kB 0.0s
=> => sha256:cfa2a40862158178855ab4f7cf6b9341646f826b0467a7b72bdeac68b03986bb 1.75kB / 1.75kB 0.0s
=> => sha256:be3324b8ee1a17161c5fa4a20f310d4af42cbb4f22a1e7a32a98ee9196a6defd 5.37kB / 5.37kB 0.0s
=> [internal] load build context 5.6s
=> => transferring context: 348.85MB 5.6s
=> [build 1/7] FROM docker.io/library/node:22-alpine3.20@sha256:2289fb1fba0f4633b08ec47b94a89c7e20b829fc5679f9b7b298eaa2f1ed8b7e 2.9s
=> => resolve docker.io/library/node:22-alpine3.20@sha256:2289fb1fba0f4633b08ec47b94a89c7e20b829fc5679f9b7b298eaa2f1ed8b7e 0.0s
=> => sha256:35d1e2d251585b806c41f71d0933d7ba3afb6374ee3745523c2ae406480f6bc7 1.72kB / 1.72kB 0.0s
=> => sha256:6b49ab3cd9c3c4f7d52aa86e5ebf9c55219b48707c9397a76141611345fe5c7b 6.21kB / 6.21kB 0.0s
=> => sha256:0a9a5dfd008f05ebc27e4790db0709a29e527690c21bcbcd01481eaeb6bb49dc 3.63MB / 3.63MB 0.3s
=> => sha256:ba4caef5715cce5e7de0253509b9ce257994ec6f40fd8e86f0d3846296ea3675 51.06MB / 51.06MB 1.7s
=> => sha256:0c6d1cca32590d82bab0b754ec382d51e3404db6737b967cf0837d2964ef6029 1.39MB / 1.39MB 0.5s
=> => sha256:2289fb1fba0f4633b08ec47b94a89c7e20b829fc5679f9b7b298eaa2f1ed8b7e 6.43kB / 6.43kB 0.0s
=> => extracting sha256:0a9a5dfd008f05ebc27e4790db0709a29e527690c21bcbcd01481eaeb6bb49dc 0.1s
=> => sha256:82bea49235a67cfa65fc9a72aa287a09ee77e7b4f561791239b5862112e875c5 448B / 448B 0.6s
=> => extracting sha256:ba4caef5715cce5e7de0253509b9ce257994ec6f40fd8e86f0d3846296ea3675 1.0s
=> => extracting sha256:0c6d1cca32590d82bab0b754ec382d51e3404db6737b967cf0837d2964ef6029 0.0s
=> => extracting sha256:82bea49235a67cfa65fc9a72aa287a09ee77e7b4f561791239b5862112e875c5 0.0s
=> [base 2/13] WORKDIR /app/backend 0.1s
=> [base 3/13] RUN if [ 0 -ne 0 ]; then if [ 0 -ne 0 ]; then addgroup --gid 0 app; fi; adduser --uid 0 --gid 0 --home /root --disabled-password --no-create-home app; 0.4s
=> [base 4/13] RUN mkdir -p /root/.cache/chroma 0.6s
=> [base 5/13] RUN echo -n 00000000-0000-0000-0000-000000000000 > /root/.cache/chroma/telemetry_user_id 0.5s
=> [base 6/13] RUN chown -R 0:0 /app /root 0.7s
=> [base 7/13] RUN if [ "false" = "true" ]; then apt-get update && apt-get install -y --no-install-recommends git build-essential pandoc netcat-openbsd curl && apt-get ins 54.1s
=> [build 2/7] WORKDIR /app 0.1s
=> [build 3/7] RUN apk add --no-cache git 1.3s
=> [build 4/7] COPY package.json package-lock.json ./ 0.1s
=> [build 5/7] RUN npm ci 31.6s
=> [build 6/7] COPY . . 1.1s
=> [build 7/7] RUN npm run build 68.3s
=> [base 8/13] COPY --chown=0:0 ./backend/requirements.txt ./requirements.txt 0.1s
=> [base 9/13] RUN pip3 install --no-cache-dir uv && if [ "false" = "true" ]; then pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128 70.3s
=> [base 10/13] COPY --chown=0:0 --from=build /app/build /app/build 1.0s
=> [base 11/13] COPY --chown=0:0 --from=build /app/CHANGELOG.md /app/CHANGELOG.md 0.1s
=> [base 12/13] COPY --chown=0:0 --from=build /app/package.json /app/package.json 0.0s
=> [base 13/13] COPY --chown=0:0 ./backend . 0.2s
=> exporting to image 5.4s
=> => exporting layers 5.4s
=> => writing image sha256:8a9310dd368bde75dd4b6a4433c3c479639cb88252c7f2334149692083db567b 0.0s
=> => naming to docker.io/library/ds2man-ui
1
2
3
4
5
6
7
8
9
10
(base) jaoneol@DESKTOP-B7GM3C5:/mnt/d/02.MyCode/GP-MyReferenc/04.DS2Man_UI$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ds2man-ui latest 8a9310dd368b About a minute ago 4.84GB
(base) jaoneol@DESKTOP-B7GM3C5:/mnt/d/02.MyCode/GP-MyReferenc/04.DS2Man_UI$ docker run -d -p 3000:8080 -v open-webui:/app/backend/data --name titan-ui --restart always ds2man-ui
a414e829de71758b3aaaf88156a2339f891a341bac1d18ef90634cce24338ca9
(base) jaoneol@DESKTOP-B7GM3C5:/mnt/d/02.MyCode/GP-MyReferenc/04.DS2Man_UI$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a414e829de71 ds2man-ui "bash start.sh" 8 seconds ago Up 7 seconds (health: starting) 0.0.0.0:3000->8080/tcp, [::]:3000->8080/tcp titan-ui
The OpenWebUI instance running from the Docker image built after the Docker build