# Docker安裝教學
## :memo: Where do I start?
- 聯絡窗口 Email us : 2303117@narlabs.org.tw 王小姐
## 安裝 Docker
### Linux
1. 更新及安裝相關套件
```
sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y install ca-certificates curl gnupg lsb-release joe rsync zip unzip tmux
```
2. 安裝 Docker
> 安裝程式, 請先 `sudo ls` 一次, 在執行下方指令, 並免再次問密碼
```
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
```
```
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
```
```
sudo apt-get update -y
sudo apt-get -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin
```
3. ubuntu 加入 Docker 群組
```
sudo usermod -aG docker $USER
sudo systemctl enable docker # 啟動 Docker 服務
docker --version
```
4. 切換兩次身分, 或重新登入測試安裝結果
```
sudo su
su ubuntu
docker run hello-world
```
5. 下載ANYTHINGLLM及Ollama
- 下載anythingllm
```
docker pull mintplexlabs/anythingllm
```
- 下載ollama
```
docker pull ollama/ollama
```
- 確認已經下載Image
```
docker images
```
- 影片教學
{%youtube ZnT3fj72XXA %}
### Windows
0. 確認是否有內建WSL
- 打開powershell
```
wsl -l
```
- 安裝wsl
```
wsl --install
```
2. 原廠說明網站
https://docs.docker.com/desktop/install/windows-install/
3. 下載 Docker
建議由上面 (1) 原廠說明連結下載
[[Download]](https://desktop.docker.com/win/main/amd64/139021/Docker%20Desktop%20Installer.exe?_gl=1*fsgutp*_ga*MTU5NTI2NjcyLjE2NjUxMzI3NTY.*_ga_XJWPQMJYHQ*MTcxMDY0MzIzNy40NDkuMS4xNzEwNjQzNjE5LjU4LjAuMA..)
4. 安裝 Docker選項

5. 安裝 Docker過程

6. 完工

7. 開啟 DOCKER Desktop, 並搜尋映像檔下載
- 搜尋ANYTHINGLLM, 選擇第一個並按下PULL 下載

- 搜尋Ollama, 選擇第一個並按下PULL 下載

- 點選Docker Desktop, 左側Image 按鈕, 檢視下載狀況

- 影片教學 (外部網站教學, 略與本次教學稍微不同)
{%youtube LgHEl070z0k %}
### Mac osX
1. 原廠說明網站
https://docs.docker.com/desktop/install/mac-install/
2. 下載 Docker
建議由上面 (1) 原廠說明連結下載
[[Download]](https://desktop.docker.com/mac/main/amd64/Docker.dmg?utm_source=docker&utm_medium=webreferral&utm_campaign=docs-driven-download-mac-amd64&_gl=1*195o2ib*_ga*MTU5NTI2NjcyLjE2NjUxMzI3NTY.*_ga_XJWPQMJYHQ*MTcxMDY0MzIzNy40NDkuMS4xNzEwNjQ0NjQzLjYwLjAuMA..)
3. 安裝 Docker選項
- 將下載好的 Docker.dmg 點下去安裝, 安裝完後將 Docker.app 拖到 Applications, 應用程式裡就有圖像介面軟體可以使用

4. Docker Desktop 不使用的時候需要在狀態列右上角 Quit

5. 打開終端機 (Terminal) 輸入以下指令
- 下載anythingllm
```
docker pull mintplexlabs/anythingllm
```
- 下載ollama
```
docker pull ollama/ollama
```
- 確認已經下載Image
```
docker images ls
```
- 影片教學
{%youtube Q2eeLVEVaaM %}
## 安裝 NVIDIA DRIVER FOR LINUX
```
sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get install build-essential -y
sudo apt-get install ubuntu-drivers-common -y
sudo apt-get -y upgrade
sudo ubuntu-drivers list --gpgpu
sudo ubuntu-drivers install nvidia:535-server
# 重開機
# reboot
```
## 安裝 NVIDIA Container Toolkit
nvidia-container-toolkit 是一個更新的工具,適用於支援NVIDIA GPU 的容器管理系統(如Docker 和Kubernetes)。它提供了一個簡單的方法來將NVIDIA GPU 暴露給容器,並且可以輕鬆管理GPU 裝置上下文和NVIDIA 驅動。
### Install with Apt
1. Configure the repository
```
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
| sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
| sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
| sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
```
2. Install the NVIDIA Container Toolkit packages
```
sudo apt-get install -y nvidia-container-toolkit
```
### Configure Docker to use Nvidia driver (請參考最上方教學, 先安裝 DOCKER)
```
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
```
### REMOVE NVIDIA Container Toolkit
Ubuntu and Debian
```
#To remove CUDA Toolkit:
sudo apt-get --purge remove "*cuda*" "*cublas*" "*cufft*" "*cufile*" "*curand*" \
"*cusolver*" "*cusparse*" "*gds-tools*" "*npp*" "*nvjpeg*" "nsight*" "*nvvm*"
#To remove NVIDIA Drivers:
sudo apt-get --purge remove "*nvidia*" "libxnvctrl*"
#To clean up the uninstall:
sudo apt-get autoremove
```
## Ollam 範例GPU測試
### NVIDIA GPU eample: Start the container
```
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
```
### AMD GPU eample: Start the container
To run Ollama using Docker with AMD GPUs, use the rocm tag and the following command:
```
docker run -d --device /dev/kfd --device /dev/dri -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama:rocm
```
### Run model locally
- Now you can run a model:
```
#docker exec -it ollama ollama run llama2
docker exec -it ollama ollama pull gemma
docker exec -it ollama ollamap pull ycchen/breeze-7b-instruct-v1_0
docker exec -it ollama ollama pull nomic-embed-text
docker exec -it ollama ollama list
#docker exec -it ollama ollama rm llama2
```
- api ("stream": false or "stream": true )
```
curl http://localhost:11434/api/generate -d '{
"model": "ycchen/breeze-7b-instruct-v1_0",
"prompt": "請列出五樣台灣美食",
"stream": true,
"options": {
"seed": 123,
"top_k": 20,
"top_p": 0.9,
"temperature": 0
}
}'
```

## DOCKER CONTAINER間網路關聯設定
- 在container内,可以直接请求host.docker.internal:PORT,
```
# docker run
--add-host=host.docker.internal:host-gateway
# docker-compose
extra_hosts:
"host.docker.internal:host-gateway"
# VECTOR_DB="chroma"
CHROMA_ENDPOINT='http://host.docker.internal:8000'
```