最近在玩 Docker 來記錄一下製作 NodeJS Image 的過程…
不囉嗦直接看 Dockerfile
FROM docker pull dockerfile/nodejs |
我們會發現 Baseimage 搜尋 nodejs 會看到
- dockerfile/nodejs
- node Offical
一開始沒注意到直接用了 dockerfile/nodejs
沒啥大問題,執行起來一切正常唯一有問題的是 image 大小居然高達 8xx MB…
dockerfile/nodejs
底下是他的 Dockerfile,就是去 Node 網站下載最新原始碼並且編譯 (所以需要 based on dockerfile/python
),不過這樣的後果是整個 image 無比肥大啊啊啊啊~
# |
Offical Node
後來改試了 Offical Node 這個 image …只剩下 38x MB
其實他有分很多等級的 tag
- 0.10.33, 0.10, 0, latest (0.10/Dockerfile)
- 0.10.33-onbuild, 0.10-onbuild, 0-onbuild, onbuild (0.10/onbuild/Dockerfile)
- 0.10.33-slim, 0.10-slim, 0-slim, slim (0.10/slim/Dockerfile)
- 0.11.14, 0.11 (0.11/Dockerfile)
- 0.11.14-onbuild, 0.11-onbuild (0.11/onbuild/Dockerfile)
- 0.11.14-slim, 0.11-slim (0.11/slim/Dockerfile)
- 0.8.28, 0.8 (0.8/Dockerfile)
- 0.8.28-onbuild, 0.8-onbuild (0.8/onbuild/Dockerfile)
- 0.8.28-slim, 0.8-slim (0.8/slim/Dockerfile)
我這邊是直接使用 node:slim 因為我的 Application 沒有其他相依性問題要處理
但是!如果你的 npm install
需要一些 build-essential 以外的東西千萬要注意 docker build
的過程中有沒有噴錯,如果有錯的話…那還是要看你預先編譯好或是用空間來換了…
這部分不知道有沒有更好的解法?
下面是 slim 的 Dockerfile,可以看得出來他是直接下載 Binary 然後安裝…
FROM debian:wheezy |
Dockerfile (simple web application)
最後看一下我的 Dockerfile,主要是啟動 mosca 搭配 static folder 掛載 Sanji MQTT Inspector
FROM node:slim |
把當前資料夾加入 /data
然後執行指令 npm install
,並把 8080 port 暴露出去供其他 Container Linking 使用
CMD 則直接執行預先寫好的 npm start
如下
|
其中環境變數 $BROKER_PORT_1883_TCP_PORT
與 $BROKER_PORT_1883_TCP_ADDR
,是透過 fig.sh 建立起的連結將此 Container 跟 MQTT Broker 連接所產生的環境變數。這部分下篇文章再來介紹一下。
Stay tuned…