使用 docker 構建優雅的開發環境

做開發的第一步就是環境的搭建,安裝 SDK IDE 配置環境變量 等繁瑣且重複的無聊工作一直在折磨我們。本喵很早就開始研究要如何解決這些問題。直到最近找到了答案,經過了半年多的實踐我發現這次的答案很完美,故決定寫篇文章記錄下走過的崎路和論述下本喵目前的方案,先在此直接貼出最終方案就是 docker+code server+v2ray web+iptables

要解決的問題

先來看看我們需要解決的主要問題:

  1. 基本環境的搭建,安裝 SDK IDE,配置環境變量
  2. 安裝必備的第三方庫以及測試用的各種工具
  3. 遠程開發
  4. 在所有環境都重複上述步驟

問題 1 2 3 其實可以先看成一個問題黑盒,依據不同的語言開發平臺都需要單獨解決,我們先稱爲環境問題,在解決環境問題之後的問題 4 我們稱爲重複問題。這裏的不優雅之處就在於我們需要不斷的做步驟 4 即不斷的重複環境問題,可能是安裝了新的操作系統例如 windows 換成 linux,也可能是換了新的工作需要在新的工作地點再解決一次環境問題,也可能因爲邪惡的病毒你不得不在家辦公所以要在家安裝上開發環境。

優雅的準則告訴我們應該只解決一次環境問題,在需要新的開發環境時能夠快速簡單的自動解決環境問題,即我們應該如何解決重複問題。本喵最早想到的方案是虛擬機,但經過一段時間實踐放棄了,先看看當時本喵當時的方案,因爲 virtualbox 是跨平臺的所以創建一個 virtualbox 鏡像在裏面解決了環境問題即可,在面對重複問題時把鏡像複製一份即可。

但堅持了不到一個月就放棄了虛擬機的方案,原因如下:

  • 虛擬機性能太差,IDE運行慢影響開發心情,因爲性能差編譯慢很浪費人生
  • 虛擬機太吃資源,比如開一個 go 開發的虛擬機可能把計算機資源吃光了,這時沒辦法再開一個 typescript 開發的虛擬機去調試前端代碼
  • 虛擬機需要完整的系統,所以鏡像很大
  • 鏡像大且不好分享,當時只能用硬盤拷貝好鏡像在需要時從硬盤拷貝出來,但隨身攜帶硬盤很不方便

虛擬機可以解決重複問題,但它解決的很爛,所以只是理論上可行實踐上價值有限。

docker 帶來的改變

當 docker 流行起來並進入本喵視線之時,本喵立刻就想到了可以用 docker 來替代虛擬機,在 docker 中解決環境問題,在遇到重複問題時就可以直接複製一個 docker 鏡像即可,但 docker 並不支持圖形界面所以圖形化的 IDE 無法支持,而有些開發環境 文字IDE 支持的很爛。如果你做的開發環境沒有文字 IDE 或 你不習慣 文字IDE 就會很尷尬。

docker 相對虛擬機提供的優勢在於:

  • 鏡像小,性能高
  • 佔用主機資源少,可以同時開啓多個不同的開發環境毫無壓力
  • docker hub 提供了鏡像上傳下載服務,方便鏡像安裝再也不用帶硬盤了

docker 唯一的缺點在於:

  • 沒有圖形界面的 IDE,所以你需要使用 vim 之類的做開發
  • 不支持 windows 鏡像,不過好在我們可以交叉編譯所以問題不大,但交叉編譯可能會增加一些複製度
  • docker 在 windows 需要 win10後的版本,且性能比linux上差

在本喵實踐過一段時間後也放棄了此方案,主要是 vim,雖然習慣後 vim 也可以開發,但本喵始終覺得還是 vscode 比較習慣,並且 vim 很多插件都是愛好者憑興趣提供的開源產品,所以很多功能沒有一些流行的圖形IDE提供的功能好用,本喵始終無法使 vim 的開發效率達到 vscode 所以最終只能放棄。但 vim 可以方便的遠程開發是一大優點。

vscode + ssh 開發

大概一兩年前發現 vscode 突然支持了 ssh 協議的遠程開發,於是當時想到可以使用 docker 方案在裏面安裝上 ssh 服務器再使用 vscode 進行遠程開發,事實證明這個方案可行,並且本喵也這麼做了一段時間,但使用中依然遇到了幾個麻煩的問題:

  • vscode 的ssh 不支持 免密登入,所以每次都要輸入鏡像裏的用戶名和密碼,很麻煩
  • 多個開發環境要讓 docker 映射不同端口到主機,佔用主機太多端口且要規劃這些端口感覺費神

但現在可以使用本喵喜歡的 vscode 做開發了,並且解決了重複問題這個主要問題,還算不錯

code-server

一次google新聞給本喵推了篇 code-server 項目的文章,簡單來說 code-server 就是在瀏覽器上運行一個 vscode 並且支持大部分 vscode 的插件。哇!於是本喵覺得可以把開發環境變得更加優雅了,如果在 docker 方案中不使用 vscode 遠程開發和ssh 而是使用 code-server 簡直完美。想象一下現在你買了新的筆記本打算做你最愛的 go 開發,你只需要兩步:

  1. 輸入 docker run 啓動一個你此前解決環境問題建好的 docker 鏡像
  2. 打開瀏覽器輸入網站,在 code-server 中得到和 vscode 一樣的開發體驗

而且此方案適合遠程開發,如果你還有域名和獨立ip可以爲不同的開發環境分配不同的域名,再把它們保存到瀏覽器書籤中,我保證你不會再羨慕 vim 方便的遠程開發。注意一點如果你真這麼幹了本喵推薦你修改下 /etc/hosts 檔案將當前計算機上 docker+code-server 對應的域名解析到 127.0.0.1 這樣,你可以在任何地方通過瀏覽器書籤打開你的開發環境,但在當前計算機會通過 127.0.0.1 的本地網路得到更快的訪問速度。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *