Docker로 AI 서비스를 배포하는 방법: Ollama와 Open WebUI 구성하기

Docker Compose로 Ollama와 Open WebUI를 설치하고 로컬 AI 서비스를 실행하는 방법을 단계별 명령어와 함께 설명합니다.

목차

Docker 배포 전 준비사항

로컬에서 Ollama와 Open WebUI를 함께 실행하려는 초급자를 대상으로 합니다. — 저장공간과 메모리가 필요하므로, 먼저 <code>df -h</code>로 디스크 여유 공간을, <code>free -h</code>로 메모리” style=”max-width:100%;height:auto;max-height:640px” /></p>
<p>로컬에서 Ollama와 Open WebUI를 함께 실행하려는 초급자를 대상으로 합니다. Docker와 Docker Compose가 이미 설치되어 있고 터미널 명령을 실행할 수 있다고 가정합니다. AI 모델을 실행하려면 저장공간과 메모리가 필요하므로, 먼저 <code>df -h</code>로 디스크 여유 공간을, <code>free -h</code>로 메모리를 확인합니다. 예시로 사용하는 llama3 8B 모델은 약 4.7GB의 저장공간이 필요하며, 메모리는 8GB 이상을 권장합니다.</p>
<p>Ollama는 로컬에서 AI 모델을 실행하는 서비스이고, Open WebUI는 웹브라우저에서 대화할 수 있도록 화면을 제공하는 도구입니다. Docker를 사용하면 두 서비스를 각각 설치하지 않고 컨테이너(프로그램을 독립된 환경에 격리하는 기술)로 관리할 수 있습니다.</p>
<h2 id=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:latestghcr.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 psPORTSSTATUS를 확인하고, 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 볼륨을 별도로 백업하는 것이 좋습니다.

관련 글