Skip to content
所有文章 ‹ Part 05 of 09 · 從筆電連上遠端資料庫
工程 · 1 min read

build 期 COPY 把檔案烤進映像,volume 是即時掛載

檔案進容器的兩條路:build 期的 COPY 把它烤進映像(改了要 rebuild),run 期的 volume 掛的是即時的本地路徑。把管線烤進去,把狀態掛上來。

一個檔案要進容器有兩條路,發生在不同階段、行為也不同:

COPY (Dockerfile) build 期 烤進映像 改了要 rebuild 才生效 volumes: (compose) run 期 即時的本地路徑 改了立刻生效 把管線烤進去,把狀態掛上來
build 期的 COPY 把檔案烤進映像。run 期的 volume 掛的是即時的本地路徑。
階段持久性改動何時生效
COPY(Dockerfile)build烤進映像只有 rebuild 之後
volumes:(compose)run即時的本地路徑立刻

口訣:把管線烤進去,把狀態掛上來。 定義映像的東西(程式碼/工具,要自足、可重現)用烤的。必須留在 host 上或會即時變動的東西(憑證、config、資料)用掛的。

這次的實例: ClickHouse 容器用 COPY 把 entrypoint.sh 烤進去,但把 ~/.config/gcloud + ~/.kube 當 volume 掛載,這樣憑證不會漏進映像、還能即時更新。改 entrypoint.sh 就得 rebuild。同理,它會先把掛進來的 kubeconfig 複製到 /tmp 再 sed,就是為了不去改到 host 上那份活的檔案。

把管線烤進映像、把會變動的狀態(憑證/config/資料)掛成 volume。


參考來源

Related: 回到遠端資料庫連線總覽。搭配 docker-compose image vs build 一起看。

↑↓ 移動 ↵ 開啟 esc 關閉