Larry Lu
Feb 7, 2018

--

嗯嗯對,用 slim 或是 alpine 確實可以省下很多空間,但同時他們也少裝了很多東西,可能會導致一些問題

slim

完整的 node image 是建立在 buildpack-deps:jessie 上,而 slim 版本是建立在 buildpack-deps:jessie-curl 上,後者比前者少裝了很多東西像是 g++gccpython 等等,這會導致 node:slim 沒辦法編譯 C++ 寫成的函式庫

舉個常見的例子像是 idle-gc,他幾乎是用 C++ 寫成的,所以 npm install 時需要編譯,不能沒有 g++

可以嘗試看看跑 docker run node:slim npm install idle-gc 會噴錯誤而 docker run node npm install idle-gc 可以順利完成安裝

alpine

alpine 的問題其實跟 slim 滿像的,他是建立在 alpine linux 上再自己安裝 node,然後也少裝了很多東西,所以也是沒辦法 idle-gc 這個函式庫

另外他跟其他 linux 發行版很大的不同是他使用的是 musl libc 而不是 glibc,可以參考一下他們的差別

總結

其實大部分 node library 在 slim 跟 alpine 上都還是可以正常安裝、運作,但因為一個專案可能會用到很多函式庫,每個函式庫下又有各自的依賴,只要其中一個依賴沒辦法正確運作那就有可能有 bug,所以除非你很確定那深不見底的 node_modules 裡面的函式庫都能正常運作 XD,不然我還是比較推薦完整的 node image

--

--

Larry Lu
Larry Lu

Written by Larry Lu

我是 Larry 盧承億,傳說中的 0.1 倍工程師。我熱愛技術、喜歡與人分享,專長是 JS 跟 Go,平常會寫寫技術文章還有參加各種技術活動,歡迎大家來找我聊聊~

Responses (1)