今天用的node.js應用程式為nest.js
git clone下來,在該目錄下新增Dockerfile。
要把node.js應用程式包成image,流程跟前兩天手動安裝redis一樣,修改Dockerfile:
#安裝base image
FROM alpine
#安裝node.js套件
RUN npm install
#啟動應用程式
CMD ["npm", "start"]
Guess what....
找不到npm可執行檔,因為alpine是只有最compact的linux kernel,並沒有包含node.js runtime及npm應用程式,我們可以像手動安裝node.js,或是直接到Docker Hub找offical node.js的image來用
有不同的node version stable images可以下載:
# 安裝v10
FROM node:alpine
# 安裝v8
FROM node:8-alpine
如果點10/alpine/Dockerfile連結可以知道怎麼從alpine開始,安裝node.js,另外node alpine image已經一併安裝好yarn套件管理員
修改Dockerfile
#安裝base image
FROM alpine
#安裝node.js套件
RUN npm install
#啟動應用程式
CMD ["npm", "start"]
找不到package.json,雖然有看到Sending build context to Docker daemon 44.03kB,但沒有下COPY instruction,並不會把檔案copy進container。
新增COPY instruction
# 選擇node:alpine
FROM node:alpine
# copy 指定檔案及資料夾進container
# copy 根目錄
COPY ./ ./
# copy src資料夾
COPY src src
# copy test資料夾
COPY test test
# 安裝dependencies
RUN npm install
# 指定啟動container後執行命令
CMD ["npm", "start"]
docker run 45832312edcf
可以看到nest.js應用程式已啟動
打開瀏覽器輸入localhost:3000
找不到伺服器,是因為還沒作port mapping
明天繼續。