Dockerfile
什麼是 Dockerfile
Dockerfile 是一個文本文件,用來定義 Docker 映像檔的內容和配置。它包含了一系列指令,每個指令對應一個步驟,用來構建映像檔。使用 Dockerfile,你可以告訴 Docker 引擎該如何構建你的應用程式所需的環境。
常用指令
FROM
FROM 指令用於指定基礎映像,也就是你的映像檔將基於哪個映像檔構建。
# 這個指令指定了基礎映像為最新版的 Ubuntu 映像。
FROM ubuntu:latest
COPY
COPY 指令用於將文件從主機系統複製到映像檔內。
# 這個指令將當前目錄下的所有文件和目錄複製到映像檔中的 /app 目錄。
COPY . /app
RUN
RUN 指令通常用於執行建立映像檔所需的命令,通常用於安裝軟體、更新軟體包等。一個 Dockerfile 可以有多個 RUN
# 這個指令將在映像檔中執行命令,更新 apt 資源列表並安裝 Nginx 服務。
RUN apt-get update && apt-get install -y nginx
WORKDIR
WORKDIR 指令用於設置工作目錄,後續指令將在這個目錄下執行。如果該目錄在映像檔中不存在,Docker 將會自動創建該目錄
# 這個指令將設置工作目錄為 /app,後續的指令將在這個目錄下執行。
WORKDIR /app
CMD
CMD 指令用於設置容器啟動時執行的預設命令。一個 Dockerfile 只能有一個 CMD
# 這個指令設置容器啟動時預設執行的命令是啟動 Nginx 服務,並以非守護模式運行。
CMD ["nginx", "-g", "daemon off;"]
ARG 和 ENV
ARG 和 ENV 是 Dockerfile 中兩個用於定義變數的指令,
- ARG 用於建立映像檔時的參數傳遞,只在建立時可讀取
- ENV 用於容器運行時的環境配置,只在運行時可讀取
下面範例,示範如何設定一個 NODE_VERSION 參數,在 build image 階段指定版本,和一個 APP_ENV 在 run container 階段指定參數
# 定義一個 ARG 變數,用於指定 Node.js 的版本,預設為 latest
ARG NODE_VERSION=latest
# 指定 Node.js 的基礎映像
FROM node:$NODE_VERSION
# 將 NODE_VERSION 變數設置為環境變數
ENV NODE_VERSION=$NODE_VERSION
# 定義一個 ENV 變數,用於指定應用程式的環境,預設為 development
ENV APP_ENV=development
# 將應用程式文件複製到容器中
COPY . /app
# 設置工作目錄
WORKDIR /app
# 安裝應用程式依賴
RUN npm install
# 定義容器啟動時執行的預設命令
CMD ["npm", "start"]