Docker 컨테이너가 생성될 때 ollama를 실행하고 완전히 뜰 때까지 대기했다가 ollama에서 사용할 Gen AI 모델을 다운로드 받아 설치한다.
#!/bin/bashset -e
# Ollama 서버 백그라운드 실행
ollama serve &
OLLAMA_PID=$!
# 서버가 뜰 때까지 대기 (bash 내장 기능으로 포트 연결 시도)while ! (echo > /dev/tcp/localhost/11434) 2>/dev/null; do
sleep 1
done# 모델 다운로드
ollama pull mistral
ollama pull nomic-embed-text
# Ollama 서버를 포그라운드로 유지wait$OLLAMA_PID
docker-compose.yml
Docker 컴포즈를 이용해 ollama를 실행한다. 실제 컨테이너를 띄울 때는 나머지 파일들과 함께 저장된 디렉토리에서 이 파일만 사용하면 된다.
이 작업은 PC와 네트워크 속도에 따라 상당히 긴 시간이 소요될 수 있다. 작업이 모두 끝나면 아래 명령으로 다시 한 번 WSL을 재시작한다.
wsl --shutdown
4. xrdp 설치 및 설정
Ubuntu desktop을 설치하면 조금 느리기는 해도 일반적인 Ubuntu를 사용하는 것과 같은 환경에서 WSL을 사용할 수 있다. 하지만 GUI 환경(X-window)을 보려면 윈도우의 원격 데스크탑으로 접속해서 사용해야 한다.
아래 방법으로 Ubuntu 환경을 Windows의 원격 데스크탑으로 접속하게 만들 수 있다.
우선 xrdp라는 서버 프로그램을 Ubuntu에 설치한다.
sudo apt update && sudo apt install xrdp
설치가 끝나면 설정 파일을 조금 수정할 필요가 있으므로 원본을 복사해 백업을 만든다.
sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak
원본을 백업 했으면 내용을 수정한다.
우선 접속 포트를 표준 원격 데스크탑 포트인 3389에서 3390으로 바꾼다. 혹시 Windows 쪽에 원격 접속이 필요한 경우가 있을 수 있기 때문에 겹치지 않게 하는 것이다.
sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini
아래 변경 사항은 화면 품질을 개선하기 위한 것으로 적용하지 않아도 상관 없다.
sudo sed -i 's/max_bpp=32/#max_bpp=32\nmax_bpp=128/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/xserverbpp=24/#xserverbpp=24\nxserverbpp=128/g' /etc/xrdp/xrdp.ini
이 과정이 끝나면 설정 준비가 끝났으므로 WSL을 리부팅하고 Windows 쪽에서 원격 데스크탑을 이용해 localhost:3390으로 접속해본다. 접속 계정은 Ubuntu를 처음 설치 후 만들었던 User 계정 정보를 사용하면 된다.
5. 한글 입출력 설정
한국어로 시스템 메시지를 나오게 할 수 있는데 딱히 필요하지는 않다. 다만 Ubuntu desktop을 설치한 경우 한글 입력에 필요하므로 설치하는 것이 좋다. Ubuntu desktop을 설치하지 않은 경우라도 터미널에서 한국어로 출력되는 시스템 메시지를 볼 수 있게 된다.
한글 폰트를 설치한다.
sudo apt-get install fonts-nanum*
한국어 로케일을 생성한다.
sudo dpkg-reconfigure locales
위 명령을 실행하면 로케일 목록이 나오는데 이 목록에서 ko_KR.UTF-8을 선택하고 다음 화면에서 이를 기본 로케일로 선택해 완료하면 한국어 로케일이 생성된다.
위 프로그램의 GUI에서 언어 설치 / 제거… 로 들어가 한국어를 선택하고 설치한다. 키보드 입력기: 부분은 Fcitx 4가 선택된 것을 확인한다. 선택되어 있지 않으면 선택한다.
WSL을 리부팅한다.
리부팅이 완료되면 fcitx-config-gtk3를 실행하여 한국어 키보드를 추가한다. 명령을 실행하면 나오는 화면 왼쪽 아래에 + 버튼을 누르면 추가할 입력기를 선택할 수 있는 화면이 나온다. 이 화면에서 Keyboard - 한국어를 선택해 추가한다. 이렇게 하면 Hangul이 첫 화면에 추가될 것이다.
한글 입력을 위한 설정이 모두 완료되었다.
6. nVidia GPU Driver
아래 명령을 이용해 설치 가능한 드라이버를 찾아본다.
apt search nvidia-driver
설치 가능한 드라이버들 중 최신 버전을 설치한다. 이 문서를 작성할 당시의 최신 버전은 570 버전이었다.
Docker의 컨테이너 내부에서 GPU를 잘 사용하고 있는지 확인하려면 아래와 같이 실행해본다. --runtime=nvidia 옵션을 주면 GPU를 사용하게 된다.
docker run --rm --runtime=nvidia nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04 nvidia-smi
잘 사용하고 있다면 아래와 비슷한 출력을 볼 수 있다.
==========
== CUDA ==
==========
CUDA Version 11.8.0
Container image Copyright (c) 2016-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
This container image and its contents are governed by the NVIDIA Deep Learning Container License.
By pulling and using the container, you accept the terms and conditions of this license:
https://developer.nvidia.com/ngc/nvidia-deep-learning-container-license
A copy of this license is made available in this container at /NGC-DL-CONTAINER-LICENSE for your convenience.
Sun Apr 20 02:59:36 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 575.51.02 Driver Version: 576.02 CUDA Version: 12.9 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 4060 ... On | 00000000:01:00.0 On | N/A |
| N/A 33C P8 1W / 115W | 216MiB / 8188MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
혹시 WSL에서 실행되는 GUI 자체 속도가 느린 것 같다면 외장 GPU를 사용하고 있는지 확인하고 변경할 수 있다.
현재 WSL이 사용하고 있는 GPU는 아래 명령으로 확인한다.
glxinfo | grep "OpenGL renderer"
혹시 Intel GPU를 사용하고 있다면 아래 내용을 실행하면 외장 GPU를 사용하게 할 수 있다.