목차
Docker 배포 전 준비사항
Ollama와 Open WebUI 실행하기
작업 폴더를 만든 뒤 compose.yaml 파일을 작성합니다. 아래 구성에서는 Ollama와 Open WebUI가 같은 Docker 네트워크에서 통신합니다. GPU 설정은 포함하지 않았으므로 이 구성은 CPU로 동작합니다. depends_on은 Ollama 컨테이너의 시작 순서만 지정하며, Ollama API가 실제로 준비될 때까지 기다리지는 않습니다.
services:
ollama:
image: ollama/ollama
container_name: ollama
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
restart: unless-stopped
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
ports:
- "3000:8080"
environment:
- OLLAMA_BASE_URL=http://ollama:11434
volumes:
- open_webui_data:/app/backend/data
depends_on:
- ollama
restart: unless-stopped
volumes:
ollama_data:
open_webui_data:
파일을 저장한 폴더에서 다음 명령을 실행합니다.
docker compose up -d
docker exec -it ollama ollama pull llama3
첫 번째 명령은 두 컨테이너를 백그라운드에서 실행합니다. 두 번째 명령은 Ollama에 사용할 모델을 내려받는 예시입니다. 모델 이름과 크기는 Ollama의 모델 목록에서 확인한 뒤 선택하고, 운영 환경에서 재현 가능한 구성이 필요하면 ollama/ollama:latest와 ghcr.io/open-webui/open-webui:main처럼 계속 바뀌는 이미지 태그 대신 검증된 버전 태그를 고정합니다.
접속 및 운영 시 확인할 점
브라우저에서 http://localhost:3000에 접속하면 Open WebUI의 관리자 계정 생성 화면이 나타납니다. 첫 화면에서 만든 계정이 관리자가 되며, 계정 정보는 외부 서비스에 가입하는 것이 아니라 내 서버의 Open WebUI 데이터 볼륨에 저장됩니다. NAS에서 실행했다면 IP 주소만 NAS의 내부 IP로 바꾸고 포트는 3000을 그대로 사용합니다.
컨테이너 상태는 다음 명령으로 확인할 수 있습니다.
docker compose ps
docker compose logs -f ollama
화면이 열리지 않으면 다음 순서로 점검합니다. 포트 충돌과 컨테이너의 실행 상태는 docker compose ps의 PORTS와 STATUS를 확인하고, Ollama 연결 주소는 docker compose config 출력의 OLLAMA_BASE_URL을 확인합니다. 로그를 자세히 보려면 docker compose logs -f ollama 또는 docker compose logs -f open-webui를 실행합니다. 첫 실행 직후 Open WebUI에서 모델 목록이 비어 보이면 Ollama가 준비될 때까지 잠시 기다린 뒤 새로고침합니다. 모델 데이터는 Docker 볼륨에 저장되므로 컨테이너를 삭제하기 전에 볼륨 삭제 여부를 반드시 확인해야 합니다. docker compose down은 컨테이너만 내리고 볼륨은 유지하지만, docker compose down -v는 볼륨까지 삭제합니다. Docker 볼륨은 편리한 저장 방식이지만 별도의 백업은 아니며, 장애나 실수로부터 데이터를 자동 보호하지 않습니다.
결론
이 글의 Compose 구성으로 Ollama와 Open WebUI를 CPU 환경에서 함께 실행할 수 있습니다. GPU가 없어도 CPU로 시작할 수 있으며, GPU를 사용하려면 별도의 GPU 설정을 추가해야 합니다. 운영 환경에서는 이미지 버전을 고정하고 Docker 볼륨을 별도로 백업하는 것이 좋습니다.