Docker build的多階段構(gòu)建允許你在一個Dockerfile中使用多個FROM
指令,每個指令可以定義一個不同的基礎(chǔ)鏡像。這樣,你可以在一個階段安裝和配置所有必要的軟件,然后在另一個階段僅復(fù)制必要的文件到最終的鏡像中。這有助于減小最終鏡像的大小,提高構(gòu)建速度和運行效率。
以下是一個簡單的多階段構(gòu)建示例:
# 第一階段:基于Node.js構(gòu)建開發(fā)環(huán)境
FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# 第二階段:基于Python構(gòu)建生產(chǎn)環(huán)境
FROM python:3.8-slim
WORKDIR /app
COPY --from=builder /app/dist /app/dist
COPY --from=builder /app/node_modules /app/node_modules
CMD ["python", "app.py"]
在這個示例中,我們使用了兩個不同的基礎(chǔ)鏡像:node:14
和python:3.8-slim
。在第一階段,我們安裝了Node.js依賴項并構(gòu)建了應(yīng)用程序。在第二階段,我們僅復(fù)制了構(gòu)建好的文件(dist
目錄)和Node.js模塊到基于Python的鏡像中,并設(shè)置了運行命令。
要構(gòu)建這個多階段構(gòu)建的Docker鏡像,請在包含Dockerfile的目錄中運行以下命令:
docker build -t my-app .
這將創(chuàng)建一個名為my-app
的Docker鏡像,其中包含了優(yōu)化后的生產(chǎn)環(huán)境。