期望可以解決不同電腦造成的複雜的安裝環境,且可以在任何瀏覽器中運行 VS Code
感謝 works-on-my-machine,讓我有個好的 base image 可以做修改
Dockerfile 包含下列套件:
- CUDA 11.6.2
- CUDNN 8
- Python 2.7.18
- Python 3.8.10
- PyTorch 1.13.0+cu116
- torchdata==0.6.1, torchtext==0.15.2, ...
- Tensorflow-gpu 2.10.1
- Code Server 4.19.0 (VS Code v1.84.2)
- 等等等等等
- CUDA 裝置且有計算能力 (compute capability) 高於 3.5
- 根據自身主機規格,安裝下列驅動和應用程式
- 可使用
nvidia-smi檢查 Nvidia 顯示卡驅動是否成功安裝和辨識 - Docker 安裝完成後,可使用 Powershell/Ubuntu 測試
docker info是否有成功顯示 Docker 資訊 - 要有 CUDA 支援要有 NVIDIA 顯示卡阿~
- CUDA 裝置且有計算能力 (compute capability) 高於 3.5,可至 NVIDIA-CUDA-GPUS 參考
- NVIDIA Docker Toolkit
- Linux 環境下須安裝 NVIDIA Container Toolkit,確保 Docker 可以調用 GPU 資源。
在 Windows 環境下,進入 Powershell/Ubuntu 後,切換路徑到欲連接的 Volume
Windows
docker run --privileged --rm -it --init `
--gpus=all `
--ipc=host `
--user="1000:1000" `
--volume="${PWD}:/projects" `
-p 8888:8443 `
adsfaaron/vscode-server-gpu:11.6.2Linux
docker run --privileged --rm -it --init \
--gpus=all \
--ipc=host \
--user="$(id -u):$(id -g)" \
--volume="$PWD:/projects" \
-p 8888:8443 \
adsfaaron/vscode-server-gpu:11.6.2執行完上述的指令,且沒有錯誤時,即可從 http://localhost:8888 連入網頁中的 VS Code (~ ̄▽ ̄)~
Windows
docker run --privileged -d --init `
--gpus=all `
--restart always `
--cpus="4" `
--dns 8.8.8.8 `
--ipc=host `
--user="1000:1000" `
--volume="${PWD}:/projects" `
-p 8888:8443 `
-e PASSWORD='password' `
-e EXTENSIONS="ms-python.vscode-pylance,tushortz.python-extended-snippets,andyyaldoo.vscode-json,vscode-icons-team.vscode-icons" `
adsfaaron/vscode-server-gpu:11.6.2Linux
docker run --privileged --rm -it --init \
--gpus=all \
--restart always \
--cpus=4 \
--dns 8.8.8.8 \
--ipc=host \
--user="$(id -u):$(id -g)" \
--volume="$PWD:/projects" \
-p 8888:8443 \
-e PASSWORD='password' \
-e EXTENSIONS="ms-python.vscode-pylance,tushortz.python-extended-snippets,andyyaldoo.vscode-json,vscode-icons-team.vscode-icons" \
adsfaaron/vscode-server-gpu:11.6.2您可以自行選擇是否要加入這些參數
--restart always: Container 意外中斷後,會持續進行重新啟動--cpus="4": 設定最多可調用 4 個邏輯處理器核心到 Container--dns 8.8.8.8: 設定 Container 的 DNS,是因為小弟我的主機預設的 DNS 有時很不穩,沒有一定要加拉 〒▽〒-p 8888:8443: 表示建立的 container 目前 8443 port 將與主機的 8888 port 連接。- 舉例來說,目前主機想要一個對外的 port 是 1234,則需修改為
-p 1234:8443 ⚠️ 在 Windows Server 中,須至防火牆設定對外連接阜,否則在 wsl 設定的 port 在外也連不到,可參考 Bridge-WslPorts 解決此問題
- 舉例來說,目前主機想要一個對外的 port 是 1234,則需修改為
-e PASSWORD: 設定 VSCode 進入頁面前的密碼,建議設定較高難度的密碼。若沒有設定,需另開一個 Container 的 Terminal 進入~/.config/code-server/config.yaml中尋找密碼-e EXTENSIONS: 預先安裝 Code-server 中的套件,方便使用者進入後即可快速使用。更多的使用者套件,請至 Open-vsx 查詢,並且記錄套件頁面的 Bundled Extensions。多個套件使用,進行分隔
docker exec -it <your_container_name> /bin/bash
cat ~/.config/code-server/config.yaml也可以使用 Docker Container ID ( docker ps -a ) 進入
docker attach <your_container_id> /bin/bash
cat ~/.config/code-server/config.yaml若要跳出 Container,可以使用 CTRL-p CTRL-q,詳細指令請參考 DockerAttach
-
--volume,-v: Container 與本機資料夾連線,可傳輸檔案本機路徑 : Container 路徑- 可套用多個路徑連接 e.g. 連接 vscode config 檔案
${PWD}: 表示為目前路徑
-v ${PWD}/config:/home/coder/.config
-
--ipc: 可參考 philipzheng 所撰寫的詳細內容 -
--user: 使用者的權限,僅在 linux 上才有,可參考 askubuntu,預設使用者是 1000,因此 Windows 上直接指定值,避免出錯 -
--gpus=all: 表示 Container 可以調用到所有的顯示卡,若要指定特定的顯卡,可以使用下方指令尋找nvidia-smi --query-gpu=uuid --format=csv
查詢後,在 docker run GPU 欄位修改如下
--gpus "device=GPU-<uuid>"或是使用 (在我的 WSL2 環境下,底下這個指令沒有作用)
--gpus device=0
由於在 http 中的 VSCode Server 圖片顯示上會無法顯示,為了解決此方法,您有兩種選擇
- 使用 Reverse Proxy
- 修改
Dockerfile,在檔案的最後ENTRYPOINT需加上"--cert",並且在entrypoint.sh中增加 volume 連接,
因為我的 Code server 主要是多人使用,因此選擇 Reverse Proxy 來實作
這方法不會是最快、耗最少資源的方式,但比較簡易操作
- 至 DockerHub 下載 nginx-proxy-manager
- 啟用 Nginx Proxy Manager,若要使用 dockerfile 啟動,可參考 [NginxProxyManager]
- 進入
localhost:81或是127.0.0.1:81登入帳號密碼 - 在 Menu 選單中,點擊
SSL Certificates,點擊Add SSL Certificate,並選擇 Let's Encrypt - Domain Names 填寫申請的網址位置,可透過 Godaddy、Cloudflare 等多種營運商購買,或使用免費的 Duckdns、Freenom ,可自行選擇其一,設定好 domain name 轉 ip address,接著點擊 Save
- 經過一段時間後,驗證完成,即可以使用憑證
- 在 Menu 選單中,進入
Host>Proxy Hosts,點擊Add Proxy Host Domain Names填入剛剛申請的網址Scheme選擇 httpForward Hostname / IP填入自己電腦的 ip,或是在雲端運算的 ip 位置 (e.g. 127.0.0.1,localhost 填入會無法解析)Forward Port選擇電腦送出的 portWeb Socket Supports在 VS Code Server 需開啟,否則登入畫面會呈現空白
- 選擇
SSL,SSL Certificate,選擇在 6. 取得的網頁憑證,Force SSLHTTP/2 Support需開啟 - 點擊 Save,透過網址輸入即可看到 VS Code 登入畫面
- 切換路徑至目前 Folder 下
docker build -t vscode-server-gpu:11.6.2 .
🔣 指令說明
-t(--tag) vscode-server-gpu:11.6.2: 標籤 image 名字.: 表示為根據目前的目錄建置,若有特別的路徑 可在此設置- 更多詳細內容,可參考 Docker build
- 在 vscode-server 中無法再使用 ssh 連線至其他主機
- 在 reversed proxy 時,HTTPS 僅可在輸入網址時可使用,若要在 ip 上使用 HTTPS (如 https://192.168.0.1),會使用 http 連入
- 完善 dockerfile 配置使用說明
- 使用指令預設安裝 VSCode 套件
- 增加 readme 圖片
- 說明 dockerfile / entrypoint.sh