iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 7
1
DevOps

誤入 DevOps 叢林的後端工程師系列 第 7

Day07 - 撰寫 Dockerfile (1/2)

想把 api server 搬到容器化的第一步是撰寫專屬於你的 Dockerfile,但要怎麼寫呢,就讓我娓娓道來。

什麼是 Dockerfile?

Dockerfile 是一個純文字的設定檔,我們可以透過 Dockerfile 快速建立自訂的映像檔。

建立你的第一個 Dockerfile

我們以一個最單純的 node api server 為範例來說明。

FROM

在 Dockerfile 的第一行的宣告一定要是 FROM,FROM 的用途是指定一個要繼承的映像檔,例如 FROM ubuntu,因為這個範例是要啟動一個需要在 node 環境執行的 api server,所以我們這裡就直接繼承了 node 官方提供的映像檔。

FROM node:10.16.0-slim

MAINTAINER

第二行 MAINTAINER 的用途是設定維護者資訊

MAINTAINER alin.code@gmail.com

ENV

第三行 ENV 的用途是設定環境變數

ENV NODE_ENV=production

WORKDIR

第四行 WORKDIR 是指定的工作目錄位置

WORKDIR /app

COPY

第五行 COPY 如同字面上的意思一樣,就是複製資料夾或檔案到容器中。

COPY . .

RUN

RUN build dockerfile 時,會執行的命令。

第六行的意思是,執行 ls 指令,通常我在複製檔案後都會執行 ls 指令來查看複製的結果是否如預期。

RUN ls

第七行,透過 npm install 指令,安裝 api server 需要用到的模組。

EXPOSE

第八行 EXPOSE 的意思是,宣告映像檔內所監聽的 port

EXPOSE 3000

CMD

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 範例,除此之外還有很多語法沒有介紹到,例如 ADDVOLUMELABELUSERSTOPSIGNAL 可以使用,如果有需要的話,可以至 https://docs.docker.com/engine/reference/builder/ 查詢用法。


上一篇
Day06 - Immutable
下一篇
Day08 - 撰寫 Dockerfile (2/2)
系列文
誤入 DevOps 叢林的後端工程師30

尚未有邦友留言

立即登入留言