Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Docker 自訂映像檔建立完整教學:Tar 打包基礎映像與 Scratch 空白映像兩大方法實戰

編輯:關於 Linux

Docker 映像檔採用分層唯讀檔案系統 (Union FS),所有寫入操作僅發生在最上層可寫層。建立自訂基礎映像 (Base Image) 能讓團隊擁有標準化、無外部依賴的運行環境。本文詳細介紹兩種主流建立方式:Tar 打包現有 Linux 發行版 與 從 Scratch 空白映像構建。

Docker 映像分層架構圖

Tar 匯入映像流程圖

Scratch 映像構建圖

方法一:使用 Tar 打包現有 Linux 發行版 (以 Ubuntu 14.04 Trusty 為例)

前置需求

  • 安裝 debootstrap (Debian/Ubuntu 內建)
  • 具備 sudo 權限

操作步驟

# 1. 建立最小化 Ubuntu Trusty 根目錄
sudo debootstrap trusty trusty > /dev/null

# 2. 打包並匯入 Docker (映像名稱為 trusty)
sudo tar -C trusty -c . | sudo docker import - trusty

# 3. 驗證映像
docker run trusty cat /etc/lsb-release
# 預期輸出:
# DISTRIB_ID=Ubuntu
# DISTRIB_RELEASE=14.04
# DISTRIB_CODENAME=trusty
# DISTRIB_DESCRIPTION="Ubuntu 14.04 LTS"

原理解析

  • tar -C trusty -c .:將 trusty/ 目錄內容打包輸出到 STDOUT
  • docker import - trusty:從 STDIN 讀取 tar 流並建立名為 trusty 的映像
  • 此映像無父層,屬於基礎映像

方法二:使用 Scratch 空白映像構建極簡容器

建立 Scratch 映像 (通常 Docker Hub 已內建,無需手動建立)

# 手動建立空白映像 (教學用)
tar cv --files-from /dev/null | docker import - scratch

編寫 Dockerfile

FROM scratch
ADD script.sh /usr/local/bin/run.sh
CMD ["/usr/local/bin/run.sh"]

構建與執行

docker build -t my-minimal-app .
docker run my-minimal-app
# 容器啟動即執行 /usr/local/bin/run.sh,無任何 OS 基礎設施

兩種方式比較與選擇建議

維度Tar + 發行版Scratch + 靜態二進位
映像大小 ~100-200 MB < 5 MB (僅二進位大小)
內含工具 完整套件管理、Shell、核心工具 無 Shell、無 ldd、無 ca-certificates
適用場景 需互動除錯、安裝套件、動態連結程式 Go/Rust 靜態編譯微服務、極致壓縮部署
維護成本 需定期更新基礎映像修補 CVE 極低,但缺乏標準工具鏈

進階技巧:多階段建置

# 建置階段
FROM golang:1.21 AS builder
WORKDIR /src
COPY . .
RUN CGO_ENABLED=0 go build -o /app

# 運行階段
FROM scratch
COPY --from=builder /app /app
ENTRYPOINT ["/app"]

結合 scratch 與多階段建置,可同時享有完整建置環境與極簡運行映像的優勢。

參考資源

  • Docker 官方 GitHub:contrib/mkimage.sh 系列腳本 (支援 Debian、Ubuntu、CentOS、BusyBox 等)
  • Docker Hub 官方 scratch 映像說明

掌握這兩種建立基礎映像的方法,即可根據專案需求靈活選擇:完整 OS 環境或極簡靜態部署。

Copyright © Windows教程網 All Rights Reserved