內容目錄
前言
有時候我們進行開發會在遠端的 container 進行程式的修改,
但如果純靠 vim 在 terminal 中使用,
有時候不習慣 vim 的使用者,也許開發效率就會大打折扣。
這邊提供的是可以透過 VScode,透過建立 ssh tunnel 的方式,
將遠端的 Docker container 拉到本地端進行編輯。
主要兩大步驟概略說明
要完成利用 VScode 透過 ssh tunnel,
直接連線到遠端 Docker 的 container 中進行開發。
主要有兩大步驟,
- (step 1) Host terminal 建立遠端 ssh tunnel 連線:建立連線
- (step 2) VScode 設定的部分:存取資料夾顯示用的介面
(step 1) Host terminal 建立遠端 ssh tunnel 連線
建立一個 ssh tunnel,使我們可以在 local 直接存取遠端 container 內的資料
ssh -nNTL localhost:23750:/var/run/docker.sock ubuntu@192.168.2.XXX
username, ip 請自行修改
- 示意圖:
輸入完密碼後,「應該會像是卡住一樣,這才是正常的」,
表示現在這個 terminal 已經與遠端建立了連結,
到工作結束前「請勿關閉這個 terminal」,(等於關閉連結)
並繼續執行以下修改 VScode 設定檔的動作。
指令說明
我們透過本地的 localhost:23750 建立 ssh 連線至遠端的 docker daemon (docker.sock)
docker daemon,是一個 service,用來管理 docker image、啟動與停止 container 的 service
建立 ssh tunnel (Local Port Forwarding)
ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER
翻譯成上述的指令就是:
- “LOCAL_IP:” LOCAL_PORT : localhost:23750
- “DESTINATION” : DESTINATION_PORT : /var/run/docker.sock
- “USER@”SSH_SERVER : 很好理解,就是遠端的服務
於是我們就可以把 local 的 23750 port 連接上遠端的 docker daemon service
之後再去 VScode 修改監聽的 “docker.host” 位置,
即可達到在 VScode 直接修改遠端 container 的內容。
這邊分析有點不太確定,有錯請再麻煩通知我更正。
- 上面說明圖示如下:
更詳細的說明
想更了解這個指令在幹嘛的,這邊推薦一個網站:https://explainshell.com/
個人認為是學習 linux 指令的神器,相關的說明都非常清楚,
只要把指令貼上去給他解析,他就會有詳細說明了。
而且網頁也是可以互動的,是個人學習 linux 指令的神器。
- 如下圖:
(step 2) VScode 設定的部分
基本的 docker 擴充功能必須先安裝好,
而且 local 也需要具備有 docker 的功能,
如果不知道如何在 windows 中啟用 docker 功能可以參考這篇:
【Docker】在 windows 上使用安裝並使用 Docker (全圖文說明) windows 安裝 WSL (Windows Subsystem for Linux)
step 2.1 打開「設定」,我們準備進行修改
我們打開並修改設定「settings.json」,
點選「檔案」->「喜好設定」中的「設定」。
step 2.2 在上方搜尋「settings.json」(不用全輸入),打開「settings.json」,我們準備進行修改
或者也可以點擊右上角的符號,也可以叫出 「settings.json」
step 2.3 在「settings.json」中加入遠端 container port 的設定
在「settings.json」中加入這行
"docker.host": "tcp://localhost:23750"
- 示意圖:
只需要確保有加入紅框那行即可,
其他行代表的是其他設定,可以不用管。
完成結果
我們可以在 local 自己的 VScode,
可以透過「Docker extension」直接看到遠端 container 內的資料。
(注意:不需要再另外經由 VScode 的 ssh 至遠端)
- 會顯示遠端的 container
Reference
- VS Code: connect a docker container in a remote server
- How to Set up SSH Tunneling (Port Forwarding)
- Day2:認識 Docker 基本概念
- SSH Tunneling (Port Forwarding) 詳解
[…] […]
[…] […]