雲端與容器基礎
$ docker run -d -e DB_HOST=db.staging.example.com web:1.4.2
$ docker run -d -e DB_HOST=db.prod.example.com web:1.4.2如上所示,不把資料庫的連線目標寫進映像檔,而是在啟動容器時以環境變數傳入。這個設計的主要優點,下列何者最適當?
- A放入環境變數的值會自動加密,因此即使放入密碼,也不會被其他人讀取
- B不必重新建置,就能把同一個映像檔只改設定用於預備環境與正式環境,因此可把測試過的東西直接發布到正式環境
- C連線目標的資訊不會進入映像檔的層,因此映像檔的層減少,容器的啟動大幅加快
查看答案與解析
正確答案:B. 不必重新建置,就能把同一個映像檔只改設定用於預備環境與正式環境,因此可把測試過的東西直接發布到正式環境
以環境變數傳遞設定,也是名為 The Twelve-Factor App 的方法論所建議的想法,能把程式碼與映像檔,和執行它們的環境分開。同一個映像檔可用於預備環境與正式環境,因此發布到正式環境的就是測試過的同一個東西,每次變更連線目標也不需要重新建置映像檔。不過,環境變數不會加密,能查看容器設定或行程資訊的人都能讀取。密碼等機密值,要透過 Kubernetes 的 Secret 等機制,限縮可讀取的人再傳入。
- A. 環境變數不會加密。能檢視容器設定的人就能讀到值。
- B. 正確。把各環境的差異分到設定中,就能重複使用同一個映像檔。
- C. 幾十位元組的設定有無,對層的數量與啟動時間幾乎沒有影響。主要優點是能把映像檔與環境分開。