Docker + Node.js
最近開始接觸容器化技術後,開始覺得這是未來的趨勢,於是開始參加與報名了許多課程,而上完課後就是要來實作,所以這邊來紀錄如何將 Node.js 專案建置成 Docker Image。
Install
這邊假設你已經安裝並設定好 Docker ,專案我使用 express-generator 來建置 express 做一個簡單的範例:
1 | $ yarn global add express-generator |
接著打開瀏覽器輸入 http://localhost:3000
,就可以 看到我們的專案正常啟動了。
建立 DockerFile
測試沒問題後,我們就可以了來建立 Dockerfile 了,在專案根目錄中新增 Dockerfile
檔案並貼上以下內容
1 | # 使用 Node 的版本 |
這邊使用
node:8.9-alpine
是因為這個版本是官方基於 Alpine Linux 來建置的專案,整個容器大小不會超過 5MB(完整版本大約有 600MB)
建立 image
當我們 Dockerfile 建立好後,就可以來建立 image,開啟你的 terminal 並切換到專案的根目錄下,然後執行:
1 | $ docker build -t jeremy/express-docker:1.0.0 . |
通常在建立是我們會用 -t 這個參數來設定 container 的名稱以及標籤來 簡單的做辨識,而用法是 [名稱]:[標籤]
。
而從上面的輸出結果我們可以看到,dockr 在建置的時候會按照 Dockerfile
裡面的設定順序來執行,每一行執行成功才會往下執行,最後結果出現編譯成功,再來我們在 terminal 內輸入 docker image ls
來查看剛剛建立的 image。
1 | $ docker image ls |
Run
接下來我們要來將剛剛建立好的 image 執行起來, 所以執行一下指令:
1 | $ docker run -d -p 3000:3000 jeremy/express-docker:1.0.0 |
因為正式在操作時可能會遇到不同版本的 image , 所以要指定執行哪一個 tag 比較好
-d 讓 container 在背景執行,如果拿掉這個參數就會立即在 terminal 上執行
-p 指定要使用那個 port , 第一個是指定 container 對外的 port,第二個是指定對內要到哪一個 port
其他設定可以使用docker run --help
來查看更多設定
最後,我們打開瀏覽器, 網址輸入 http://localhost:3000
,就可以看到 express 正常執行了!
結語
像這樣的作法算是比較簡單的方式,不過在設定上可能需要下達許多指令,今天先初步了解 Dockerfile 的功能,之後會再介紹如何使用 docker compose
,來對 container 做更細部的設定,讓我們可以針對 port, memory, cpu 等做調整。