500行程式碼手寫docker開篇-goland遠端編譯環境設定

2023-05-18 15:00:49

(1)500行程式碼手寫docker開篇-goland遠端編譯環境設定

本系列教學主要是為了弄清楚容器化的原理,紙上得來終覺淺,絕知此事要躬行,理論始終不及動手實踐來的深刻,所以這個系列會用go語言實現一個類似docker的容器化功能,最終能夠容器化的執行一個程序。

程式碼最終執行效果

本系列原始碼已經上傳到githuhub,地址如下:

https://github.com/HobbyBear/tinydocker

在開始寫程式碼之前,先介紹下我的實驗環境,本地開發環境是arm64 mac m1,為了能方便的在linux上進行偵錯,我買了一個amd64的雲linux 伺服器,其實也可以本地搭建一個linux虛擬機器器代。 程式碼編輯器選擇了goland,並在goland設定了遠端編譯,這樣便能在本地編寫偵錯 適合amd64 linux環境的程式碼了。

下面是我設定的詳細步驟。

goland 設定

我建立了一個名為tidydocker的專案,然後用goland開啟,進入到goland設定介面設定sftp


設定遠端的部署路徑,注意我已經在linux伺服器上提前建立好了projects和tinydocker 目錄了。到時候goland在尋找部署目錄時會根據上一個截圖的root path 和下面截圖的Deployment path 結合起來尋找部署目錄。

接著設定go remote,這樣到時候我們便能夠遠端偵錯程式碼。


在接著設定goland之前,還需要在遠端linux機器上部署偵錯工具。

首先肯定要有golang環境

root@ecs-295280:~# go version
go version go1.20.3 linux/amd64
root@ecs-295280:~# 

接著安裝dlv偵錯工具

 go install github.com/go-delve/delve/cmd/dlv@latest

寫一個簡單hello world程式

設定遠端編譯,編譯的選項選擇run on 在我們遠端linux主機上。


注意編譯時候設定-o引數這樣能讓我們編譯後的檔名稱為tinydocker,不然就是goland為我們自動生成的一串很長的檔名。

點選manager targets 設定編譯後的檔案輸出目錄

執行效果

這下設定就算全部完成了,點選編譯,goland便會將程式碼自動上傳到遠端,然後執行編譯過程。

上一步完成後,登入到遠端看看,可以發現已經生成了tinydocker的可執行檔案

root@ecs-295280:~/projects/tinydocker# ls
go.mod  main.go  ReadMe.md  tinydocker
root@ecs-295280:~/projects/tinydocker# pwd
/root/projects/tinydocker
root@ecs-295280:~/projects/tinydocker# 

接著遠端執行偵錯命令

root@ecs-295280:~/projects/tinydocker#  dlv exec  tinydocker  --headless --listen=:2345 --api-version=2 --accept-multiclient 
API server listening at: [::]:2345
2023-05-02T01:27:04+08:00 warning layer=rpc Listening for remote connections (connections are not authenticated nor encrypted)

然後本地goland 給hellow world 程式打上斷點 執行remote

可以看到斷點已經生效了,這樣便設定完成了goland的遠端編譯偵錯環境。