方式 1: 正確
方式 2: 錯誤
這要來講講 build code 到底在做什麼
build code > 產生在目標環境能執行的 code
產生的過程會跟 hardware architecture 還有 OS 產生一定的 dependencies
比如說 ARM/x86
OS 使用的 libssl version
你在 host 進行好 build 的動作再 copy 進 docker image > 實際上 hardware architecture 跟 OS 可能就不同了
以此為例 https://hub.docker.com/_/python
python 就分 windows/linux
linux 又細分 alpine/bullseye(debian)
採用方式 2 必須確保環境跟 image 內一致 才能確保 build 完的結果能正確
在開發團隊中要確保所有人環境一致是有困難的
方式 2 會產生極大的混亂
方式 1 也帶來一些好處
比如 docker 有 cache 能加速 build 流程
不論在何處執行 docker build 都不太須顧慮 host 是什麼 (當然還是得看 dockerfile 怎麼寫法)
不需要 build N 種 code 就必須準備 N 種環境