Engineering · 1 min read
build 期 COPY 把檔案烤進映像,volume 是即時掛載
檔案進容器的兩條路:build 期的 COPY 把它烤進映像(改了要 rebuild),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。
參考來源
- Docker Compose build reference — https://docs.docker.com/reference/compose-file/build/
Related: 回到遠端資料庫連線總覽;搭配 docker-compose image vs build 一起看。