---
# System prepended metadata

title: 配置 IO.NET Windows Worker 教程
tags: [IO.NET]

---

---
tags: IO.NET
---

# 配置 IO.NET Windows Worker 教程

:::info
- 標題：配置 IO.NET Windows Worker 教程
- 作者：[CWANG](https://github.com/t106362512)
:::

---

:::spoiler 目錄
[TOC]
:::

---

## 安裝教程

### 一步步設置 WSL 與 Docker 以及 NVDIA CUDA

1. 以管理員身分開啟終端機後，輸入以下指令以啟開虛擬化，這樣不用進 BIOS 調整
  ![image](https://hackmd.io/_uploads/ryWCu9NAa.png)

  ```bat
  bcdedit /set hypervisorlaunchtype auto  # 編輯開機設定，以開啟虛擬化功能
  ```
2. 然後再終端機後輸入以下指令，即可自動化安裝 CUDA，接著重啟系統(因配置虛擬化與CUDA，故要重啟)
  ```bat
  Add-AppxPackage -RegisterByFamilyName -MainPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe  # 加載 Windows 套件管理工具 - winget
  winget install Nvidia.CUDA -h --accept-package-agreements --accept-source-agreements --custom "-s nvcc_12.4"  # 使用 winget 簡化安裝過程。這裡用無聲的方式安裝 cuda 中的 nvcc 就好
  ```
2. 再用管理員身分開啟終端機並輸入以下
  ```bat
  wsl --install --no-distribution  # 該指令會幫你開啟 wsl 功能
  wsl --set-default-version 2  # 如果系統版本較舊，會需要額外使用這個指令以設定預設版本
 ``` 
3. 開啟終端機後輸入以下指令，即可下載 Docker 並自動化安裝。
  ```powershell
  winget install Docker.DockerDesktop -h --accept-package-agreements --accept-source-agreements --custom "install --accept-license --always-run-service"
  ### 可以依據情況，在 --custom 後面再設置以下參數
  # --wsl-default-data-root=D:\\Docker\\wsl\\data  # 如果你C盤不夠，可以在安裝時就指定容器與鏡像的安裝位置
  # --backend=hyper-v # 如果是 WinServer 且有設置 hyper-v，可選 hyper-v。而目前 io.net 並未製作 Windows 版本的容器，故不可使用 windows 作為 backend
  & $($env:ProgramFiles | Join-Path -ChildPath 'Docker\Docker\Docker Desktop.exe')  # 初始化 Docker-Desktop
  ```

## 其他維運指令

### 限制 Docker 與 WSL 的系統資源使用量

- 以管理員身分開啟終端機(Powershell)後，輸入以下指令即可
  ```powershell
  Add-Content "$env:USERPROFILE/.wslconfig" @"
  [wsl2]
  memory=4GB    # 限制 wsl2 只能使用 4G 內存
  processors=2  # 限制 wsl2 只能使用兩個單位的 cpu
  swap=6GB      # 限制 wsl2 的虛擬內存為 6G，設置為內存的 1.5 到 2 倍就好。會佔用硬碟使用空間
  "@
  Restart-Service LxssManager # 重啟服務
  ```
- 如果之後要改的話，以管理員身分開啟終端機(Powershell)並使用以下指令後，開啟文本編輯器編輯後再重啟 wsl 服務即可
  ```powershell
  notepad "$env:USERPROFILE/.wslconfig"  # 編輯 wsl 設定
  Restart-Service LxssManager  # 編輯並儲存以後，再重啟服務
  ```

### 更改 Docker 容器與 WSL 位置的方法

1. 假設要將位置改為 D:\Docker\wsl\data\ 的話，開啟終端機輸入以下指令
  ```bat
  wsl  --shutdown
  mkdir D:\Docker\wsl\data\
  wsl --export docker-desktop-data "D:\Docker\wsl\data\docker-desktop-data.tar"
  wsl --unregister docker-desktop-data
  wsl --import docker-desktop-data "D:\Docker\wsl\data" "D:\Docker\wsl\data\docker-desktop-data.tar" --version 2
 ```
2. 重啟 docker
  ```bat
  docker-machine restart
  ```

### 操作 IO NET 容器 (避免操作到其他容器)

- 暫停 IO.NET 容器。開啟終端機(Powershell)後，輸入以下指令即可
  ```powershell
  docker ps -aqf volume=/var/run/docker.sock | ForEach-Object { docker pause $ }
  ```
- 回復 IO.NET 容器。開啟終端機(Powershell)後，輸入以下指令即可
  ```powershell
  docker ps -aqf volume=/var/run/docker.sock -f status=paused | ForEach-Object { unpause $}
  ```
- 關閉 IO.NET 容器。開啟終端機(Powershell)後，輸入以下指令即可
  ```powershell
  docker ps -aqf volume=/var/run/docker.sock | ForEach-Object { docker stop $ ;docker rm $ }
  ```
### Docker daemon

- 一般情況不需要設置它，除非有特殊的配置需求
  ```powershell 
   & 'C:\Program Files\Docker\Docker\resources\dockerd.exe' --register-service
   Restart-Service *docker*
   & 'C:\Program Files\Docker\Docker\DockerCli.exe' -SwitchLinuxEngine
  ```

## 半自動安裝腳本

1. 以管理員身分開啟終端機(Powershell)後，輸入以下指令，他會先強制重啟系統一次
  ```powershell
  Set-ExecutionPolicy RemoteSigned
  bcdedit /set hypervisorlaunchtype auto
  Add-AppxPackage -RegisterByFamilyName -MainPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe
  winget install Nvidia.CUDA -h --accept-package-agreements --accept-source-agreements --custom "-s nvcc_12.4"
  wsl --install --no-distribution
  Restart-Computer -Force
  ```
2. 以管理員身分開啟終端機(Powershell)後，輸入以下指令，即完成環境配置
  ```powershell
  winget install Docker.DockerDesktop -h --accept-package-agreements --accept-source-agreements --custom "install --accept-license --always-run-service"
  & $($env:ProgramFiles | Join-Path -ChildPath 'Docker\Docker\Docker Desktop.exe')
  ```
