
내 PC에서만 작동하는 '나만의 전용 AI'를 Ollama × Docker로 돌려보았다
요약
Docker와 Ollama를 활용하여 외부 데이터 유출 걱정 없는 로컬 AI 환경을 구축하는 방법을 소개합니다. Windows 환경을 기준으로 Docker Desktop 설치부터 docker-compose를 이용한 컨테이너 실행까지의 전 과정을 단계별로 안내합니다.
핵심 포인트
- Docker와 Ollama를 조합해 개인용 로컬 AI 구축 가능
- 데이터가 외부 서버로 전송되지 않아 보안성 확보
- Docker Compose를 활용한 환경 재현 및 모델 데이터 영속화
- GPU 없이 CPU만으로도 기본적인 로컬 AI 구동 가능
내 PC에서만 작동하는 '나만의 전용 AI'는 사실 허무할 정도로 간단하게 만들 수 있다.
ChatGPT나 Claude에 질문을 던질 때마다, '이 데이터, 외부로 내보내도 괜찮을까?'라며 순간적으로 손이 멈춘 적은 없는가. 개인적인 메모나 검토 중인 코드, 사소한 푸념까지 클라우드 너머로 보내는 것은 은근히 스트레스가 된다.
이 기사에서는 누구나 알고 있는 컨테이너 (Docker) 와 로컬 AI (Ollama) 만을 사용하여, 인터넷으로 데이터를 전혀 보내지 않는 '나만의 전용 AI'를 PC 상에 구축하기까지의 과정을, 설치의 첫걸음부터 실제로 해본 기록으로서 작성한다. 생략 없이 전부 적었으므로, 위에서부터 순서대로 복사해서 붙여넣으면 똑같은 단계까지 도달할 수 있을 것이다.
Windows를 전제로 작성하고 있다 (Mac/Linux에서도 docker compose 부분은 거의 그대로 사용할 수 있다). 본 기사의 설정은 CPU 동작을 전제로 하며, GPU가 없어도 작동한다 (느리지만 작동한다).
먼저, 클라우드 AI와 로컬 AI가 근본적으로 무엇이 다른지 도표로 나타냈다.
클라우드 AI는 질문이 일단 외부 서버로 전달된다. 로컬 AI는 질문도 답변도 PC 안에서만 완결되며 외부로 나가지 않는다. 이 차이를 실제로 손끝에서 확인할 수 있는 단계까지 만들어 본다.
| 항목 | 기준 |
|---|---|
| OS | Windows 10/11 (64bit) ※Mac/Linux에서도 대체로 같은 절차 |
| ... | |
| 특별한 스펙은 필요하지 않다. 평소 사용하는 노트북으로도 충분히 테스트할 수 있다. |
먼저 컨테이너를 구동하는 토대가 되는 Docker Desktop을 설치한다.
-
공식 사이트 (https://www.docker.com/products/docker-desktop/)를 연다
-
자신의 OS (Windows/Mac/Linux)를 선택하여 인스톨러를 다운로드한다
-
인스톨러를 실행하고 화면의 지시에 따라 진행한다
-
Windows의 경우, 도중에 WSL2 활성화를 요구받을 수 있다. 요구받으면 허가하고 진행한다 (최초 실행 시 재부팅이 필요할 수 있다)
-
Windows의 경우, 도중에
-
설치 완료 후, Docker Desktop을 실행하고 고래 아이콘이 트레이에 상주할 때까지 기다린다
-
터미널 (PowerShell이면 OK)에서 설치가 되었는지 확인한다
docker --version
docker compose version
버전이 표시되면 준비 완료. 여기까지는 일반적인 앱 설치와 같아서 어려운 점은 전혀 없다.
Docker Desktop이 설치되었다면, 이후의 흐름은 다음 5단계다.
'Docker Desktop 설치'까지는 끝났으므로, 다음은 설정 파일을 만드는 단계부터 진행한다.
원하는 위치에 작업용 폴더를 만들고, 그 안에 docker-compose.yml이라는 이름으로 아래 내용을 그대로 저장한다.
services:
ollama:
image: ollama/ollama
...
굳이 파일을 준비하는 이유는, 매번 긴 docker run ... 명령어를 입력하지 않고 docker compose up -d 한 마디로 동일한 환경을 몇 번이고 재현할 수 있도록 하기 위해서다. volumes를 통해 모델의 내용을 컨테이너 외부 (PC 측)에 영속화(Persistence)하므로, 컨테이너를 다시 만들어도 다운로드된 모델은 사라지지 않는다.
docker-compose.yml을 저장한 폴더에서 아래를 순서대로 실행한다.
# 컨테이너를 기동
docker compose up -d
# 기동되었는지 확인한다
...
docker compose ps를 실행하여 ollama의 STATUS가 Up (running) 상태라면 여기까지는 성공한 것이다. 아직이라면 Docker Desktop 자체가 실행 중인지 확인한다.
최초 실행 시에는 모델 본체 (수 GB)의 다운로드가 진행되므로, 회선 속도에 따라 수 분에서 십수 분이 걸릴 수 있다. 이 부분이 가장 지루한 공정이므로, 커피라도 한 잔 내려서 기다리는 것이 좋다.
모델 취득이 끝나면 실제로 말을 걸어본다.
docker compose exec ollama ollama run llama3
실행하면 >>> 프롬프트가 나오므로, 거기에 질문을 입력한다. 예를 들어 이렇게 물어본다.
>>> 안녕하세요, 당신은 무엇인가요?
안녕하세요! 저는 로컬 환경에서 동작하고 있는 AI 어시스턴트입니다. 인터넷을 통한 서버가 아니라, 당신의 PC 상의 Docker 컨테이너 내에서 처리하고 있습니다. 무엇을 도와드릴까요?
이렇게 문장으로서 답변이 돌아온다면 성공이다 (실제 말투는 모델에 따라 달라진다). 여기까지 왔다면, 인터넷으로 단 1바이트도 보내지 않고 대화할 수 있는 챗봇이 손에 들어온 셈이다. 응답이 없거나 에러가 발생하는 경우에는 ollama pull이 완료되었는지, 혹은 모델명의 철자가 맞는지 다시 확인한다.
대화로 테스트하는 것뿐만 아니라, 이 Ollama를 실제 앱에組み込んだ(組み込んだ) 이야기는 개인 블로그(LLM(Ollama/OpenAI)로 영화 태그를 자동 생성하는 배치를 Spring Boot에組み込んだ(組み込んだ) 이야기 · 외부 사이트로 이동합니다)에 적어두었다.
터미널에서의 상호작용에 거부감이 있는 사람은 브라우저 채팅 화면(Open WebUI)을 추가할 수 있다. docker-compose.yml에 다음을 추가하기만 하면 된다.
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
...
(volumes: 아래에 open-webui_data:도 추가한다)
docker compose up -d를 다시 실행하고, 브라우저에서 http://localhost:3000을 열면 ChatGPT와 같은 화면에서 로컬 AI와 대화할 수 있다. 여기서는 깊게 파고들지 말고, 흥미가 있다면 한 번 만져보는 정도로 충분하다.
실제로 대화하는 도중, 데이터가 어디를 통과하는지 도식화하면 다음과 같다.
[IMG:1]
입력도 생성도 모두 컨테이너와 모델 사이에서 완결되며, 인터넷으로는 일절 나가지 않는다 (점선이 '통신하지 않음'을 나타낸다). 이 경계를 직접 눈으로 확인할 수 있었던 것이, 실제로 해보면서 가장 안심되었던 점이었다.
| 관점 | 클라우드 API (ChatGPT 등) | 로컬 AI (Ollama × Docker) |
|---|---|---|
| 데이터의 행선지 | 외부 서버로 송신 | PC 내에서 완결, 외부로 나가지 않음 |
| ... | ... | ... |
성능으로 비교하면 클라우드 쪽이 더 우세하다고 생각한다. 다만 실제로 구동해보며 알게 된 것은, 로컬로 돌리는 가치는 '속도'보다 '자신의 데이터를 외부에 내보내지 않고 테스트할 수 있다는 점'이었다. 가벼운 초안이나 검토 중인 코드를 깊게 고민하지 않고 던질 수 있는 편안함은, 정확도와는 다른 축의 가치라고 느꼈다.
우선 가벼운 모델로 한 번 구동해보면, '내 PC 안에서만 완결되는 AI'의 감각을 잡을 수 있을 것이다.
개인 블로그(https://mint041223techblog.netlify.app/)에 일상적인 개발에서 깨달은 점들을 자세히 적고 있습니다 (외부 사이트로 이동합니다).
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기