7.1 基礎映像檔
基礎映像檔在建立 Docker 映像檔中扮演著重要角色,因為它們提供了構建的起點並定義了您的應用程式將執行的環境。正確選擇和配置基礎映像檔可以顯著影響最終映像檔的效能、大小和安全性。在這次講座中,我們將探討如何選擇和配置 Docker 的基礎映像檔。
基礎映像檔(或基礎映像) 是指用於作為新 Docker 映像檔初始層的 Docker 映像檔。它可以包含一個最小的作業系統、必要的工具和庫,甚至可以是空的 (scratch 映像檔)。基礎映像檔的選擇決定了您的容器中預設可用的資源和套件。
選擇基礎映像檔
在選擇基礎映像檔時需要考慮幾個因素:
- 映像檔大小: 較小的映像檔下載速度更快,占用的磁碟空間更少,並能加速應用程式的部署。
- 支援與更新: 使用具有定期更新的官方映像檔,可確保更高的安全性、漏洞修復和穩定運行。
- 相容性: 基礎映像檔應包含您的應用程式正確運行所需的庫和依賴項。
常見的基礎映像檔
1. Alpine Linux
這是一個非常輕量級的映像檔,僅佔約 5 MB 空間。它非常適合需要最小作業系統的應用程式。然而,開發者需要注意的是,Alpine 缺少許多標準庫,因此某些應用程式可能需要額外的配置。
FROM alpine:3.12
2. Debian/Ubuntu
這些是更多功能齊全的映像檔,包含廣泛的工具和庫。它們適合需要更加完整環境或熟悉的 Linux 標準庫的複雜應用程式。
FROM ubuntu:20.04
3. 官方語言映像檔
為程式語言(例如 Node.js、Python、Ruby 等)提供的官方映像檔。這些映像檔已內建相應語言的開發和運行環境,簡化了配置工作。
FROM node:14
7.2 配置基礎映像檔
選擇基礎映像檔之後,需要根據你的應用需求進行配置。配置包括安裝必要的套件、複製應用程式文件以及設置環境。
範例: 基於 Alpine Linux 的基礎映像檔配置
# 使用基礎映像檔 Alpine Linux
FROM alpine:3.12
# 安裝必要的套件
RUN apk add --no-cache python3 py3-pip
# 設置工作目錄
WORKDIR /app
# 複製應用程式文件
COPY . .
# 安裝依賴項
RUN pip3 install -r requirements.txt
# 指定啟動應用程式的指令
CMD ["python3", "app.py"]
在這個範例中,使用了基礎映像檔 alpine:3.12,安裝了必要的套件,複製了應用程式文件並安裝了依賴項。最終指令 alpine:3.12
指定了如何啟動應用程式。
範例: 基於 Ubuntu 的基礎映像檔配置
# 使用基礎映像檔 Ubuntu
FROM ubuntu:20.04
# 更新並安裝必要的套件
RUN apt-get update && apt-get install -y \
python3 \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
# 設置工作目錄
WORKDIR /app
# 複製應用程式文件
COPY . .
# 安裝依賴項
RUN pip3 install -r requirements.txt
# 指定啟動應用程式的指令
CMD ["python3", "app.py"]
這個 Dockerfile 使用映像檔 ubuntu:20.04 並安裝了 Python 和 pip。然後它複製了應用程式文件並安裝了依賴項,與上一個範例類似。
7.3 最佳實踐
如何正確選擇和設定基礎映像檔:
1. 選擇最小的映像檔:從最小的映像檔開始,這些映像檔應能滿足你的應用需求。這樣可以減少最終映像檔的大小並提高安全性。
2. 不要安裝多餘的套件:只安裝應用真正需要的依賴項。這樣可以減小映像檔的大小並降低潛在的漏洞數量。
3. 清理套件管理器的快取:安裝套件後刪除臨時檔案和快取,以減小映像檔的大小。
RUN apt-get update && apt-get install -y python3 python3-pip && rm -rf /var/lib/apt/lists/*
4. 使用多階段構建:它可以將構建階段和執行階段分開,幫助創建更輕量化且安全的映像檔。
# 構建階段
FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# 最終階段
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
5. 定期更新映像檔:使用最新版本的基礎映像檔,以包含最新的安全修復和更新。
GO TO FULL VERSION