본문으로 건너뛰기

Docker 배포

Sinaptic® DROID+를 Docker를 사용하여 운영 환경에서 실행하세요. 공식 이미지는 매우 가벼우며(<15MB), root 권한이 아닌 사용자로 실행되고, 빌트인 상태 확인(healthcheck) 기능을 포함하고 있습니다.

이미지 정보

레지스트리이미지명다운로드(Pull) 명령어
Docker Hub (기본)sinapticai/droiddocker pull sinapticai/droid:latest
GHCR (미러)ghcr.io/sinapticai/droiddocker pull ghcr.io/sinapticai/droid:latest

태그: latest, 0.5.0, 0.5, 0 (유의적 버전), 그리고 특정 버전 고정을 위한 sha-<commit>.

빠른 시작

docker run -d \
--name droid \
-p 8080:8080 \
-p 8081:8081 \
-v ./droid.yaml:/etc/droid/droid.yaml \
-v ./configs/agents:/etc/droid/agents \
-e OPENAI_API_KEY=$OPENAI_API_KEY \
sinapticai/droid

이 명령은 다음 설정으로 Sinaptic® DROID+를 시작합니다:

  • 8080 포트: OpenAI 호환 API
  • 8081 포트: 관리 API + 에이전트 빌더(Agent Builder) UI
  • 로컬 설정 및 에이전트 파일이 컨테이너에 마운트됨
  • 환경 변수를 통해 API 키 전달

설정 방법

컨테이너는 다음 두 경로를 사용합니다:

경로용도기본값
/etc/droid/droid.yaml런타임 설정필수 (사용자 파일 마운트)
/var/lib/droid데이터 디렉토리 (RAG, 로그, 감사)자동 생성됨

DROID_CONFIG 환경 변수로 설정 경로를, DROID_DATA_DIR 환경 변수로 데이터 디렉토리 경로를 변경할 수 있습니다.

환경 변수

API 키 및 설정 덮어쓰기는 환경 변수를 통해 수행합니다. 설정 파일은 ${VAR} 구문을 지원합니다.

docker run -d \
-e OPENAI_API_KEY=sk-... \
-e ANTHROPIC_API_KEY=sk-ant-... \
-e GEMINI_API_KEY=AIza... \
-e GROK_API_KEY=xai-... \
sinapticai/droid

Docker Compose

운영 환경에서는 Docker Compose 사용을 권장합니다:

# docker-compose.yml
version: "3.8"

services:
droid:
image: sinapticai/droid:latest
ports:
- "8080:8080" # OpenAI 호환 API
- "8081:8081" # 관리 API + 빌더 UI
volumes:
- ./droid.yaml:/etc/droid/droid.yaml:ro
- ./configs/agents:/etc/droid/agents:ro
- droid-data:/var/lib/droid
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
restart: unless-stopped
healthcheck:
test: ["/usr/local/bin/droid", "health", "--openai-port", "8080"]
interval: 30s
timeout: 3s
start_period: 5s
retries: 3

volumes:
droid-data:

실행:

docker compose up -d

상태 확인 (Health Checks)

컨테이너에는 30초마다 droid health를 실행하는 빌트인 상태 확인 기능이 포함되어 있습니다. 수동으로 확인할 수도 있습니다:

# 컨테이너 외부에서 확인
curl http://localhost:8081/health

# Docker inspect 사용
docker inspect --format='{{.State.Health.Status}}' droid

운영 환경 권장 사항

볼륨 설정

설정 파일은 읽기 전용(:ro)으로 마운트하고, 데이터 저장에는 이름이 지정된 볼륨(named volume)을 사용하세요.

-v ./droid.yaml:/etc/droid/droid.yaml:ro
-v ./configs/agents:/etc/droid/agents:ro
-v droid-data:/var/lib/droid

보안

컨테이너는 기본적으로 root가 아닌 사용자로 실행됩니다(distroless 이미지). 추가 보안을 위해 다음을 고려하세요:

  • 8081 포트를 외부에 노출하지 마세요. 관리 API와 빌더 UI는 내부용입니다.
  • 환경 변수 대신 Docker 비밀 정보(secrets)나 Vault를 사용하여 API 키를 관리하세요.
  • 모든 운영 에이전트에 대해 SinapticAI 차단(block) 모드를 활성화하세요.
# 외부에는 API 포트만 노출
ports:
- "8080:8080"
# 8081 포트는 내부 네트워크에서만 유지

자원 제한

Sinaptic® DROID+ 자체는 가볍지만, LLM 응답 스트리밍 중에 메모리 사용량이 늘어날 수 있습니다. 권장 최소 사양은 다음과 같습니다:

deploy:
resources:
limits:
memory: 512M
cpus: "1.0"
reservations:
memory: 128M
cpus: "0.25"

로깅

Sinaptic® DROID+는 기본적으로 구조화된 JSON 로그를 stdout으로 출력합니다. 선호하는 로그 수집기를 사용하여 캡처하세요.

logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"

네트워킹

여러 개의 Sinaptic® DROID+ 인스턴스를 실행하거나 로컬 LLM(Ollama, LM Studio)에 연결하는 경우:

services:
droid:
# ... droid 설정 ...
networks:
- droid-net

ollama:
image: ollama/ollama:latest
networks:
- droid-net

networks:
droid-net:
driver: bridge

그 후 droid.yaml에서 서비스 이름으로 Ollama를 참조하세요:

ollama:
base_url: "http://ollama:11434/v1"

업데이트 방법

docker pull sinapticai/droid:latest
docker compose up -d

컨테이너는 상태를 저장하지 않습니다(stateless). 모든 설정은 마운트된 파일에, 모든 데이터는 볼륨에 저장되므로 언제든지 안전하게 컨테이너를 교체할 수 있습니다.

소스에서 빌드하기

Docker 이미지를 직접 빌드하려는 경우:

git clone https://github.com/SinapticAI/droid-community.git
cd droid-community
docker build -t droid:local .

문제 해결

컨테이너가 즉시 종료됨: docker logs droid로 로그를 확인하세요. 가장 흔한 원인은 droid.yaml 파일이 없거나 형식이 잘못된 경우입니다.

상태 확인 실패: 컨테이너 내부에서 8080 포트에 접근 가능한지, 설정 파일이 올바른 YAML 형식인지 확인하세요.

로컬 LLM에 연결할 수 없음: Ollama나 LM Studio가 호스트 머신에서 실행 중이라면 localhost 대신 host.docker.internal을 사용하세요.

ollama:
base_url: "http://host.docker.internal:11434/v1"

볼륨 권한 거부 (Permission denied): 컨테이너는 root가 아닌 사용자로 실행됩니다. 마운트된 디렉토리가 UID 65534(nobody) 사용자에 의해 읽기 가능한지 확인하세요.