想把 api server
搬到容器化的第一步是撰寫專屬於你的 Dockerfile
,但要怎麼寫呢,就讓我娓娓道來。
什麼是 Dockerfile?
Dockerfile 是一個純文字的設定檔,我們可以透過 Dockerfile 快速建立自訂的映像檔。
我們以一個最單純的 node api server 為範例來說明。
在 Dockerfile 的第一行的宣告一定要是 FROM
,FROM 的用途是指定一個要繼承的映像檔,例如 FROM ubuntu
,因為這個範例是要啟動一個需要在 node 環境執行的 api server,所以我們這裡就直接繼承了 node 官方提供的映像檔。
FROM node:10.16.0-slim
第二行 MAINTAINER
的用途是設定維護者資訊
MAINTAINER alin.code@gmail.com
第三行 ENV
的用途是設定環境變數
ENV NODE_ENV=production
第四行 WORKDIR
是指定的工作目錄位置
WORKDIR /app
第五行 COPY
如同字面上的意思一樣,就是複製資料夾或檔案到容器中。
COPY . .
RUN
build dockerfile 時,會執行的命令。
第六行的意思是,執行 ls
指令,通常我在複製檔案後都會執行 ls
指令來查看複製的結果是否如預期。
RUN ls
第七行,透過 npm install 指令,安裝 api server 需要用到的模組。
第八行 EXPOSE
的意思是,宣告映像檔內所監聽的 port
EXPOSE 3000
CMD
的意思是,啟動容器時預設執行的命令,每個 Dockerfile 只能有一個 CMD 指令,如果有多個 CMD
指令,只會執行最後一個,其他會自動忽略。
第九行的意思是啟動 api server
CMD npm start
完整 dockerfile 範例
FROM node:10.16.0-slim
MAINTAINER alin.code@gmail.com
ENV NODE_ENV=production
WORKDIR /app
COPY . .
RUN ls
RUN npm install
EXPOSE 3000
CMD npm start
# 我是註解
補充:註解可以使用
#
我們只講了最基本的 Dockerfile
範例,除此之外還有很多語法沒有介紹到,例如 ADD
、VOLUME
、LABEL
、USER
、STOPSIGNAL
可以使用,如果有需要的話,可以至 https://docs.docker.com/engine/reference/builder/ 查詢用法。