雲端與容器基礎

$ 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

如上所示,不把資料庫的連線目標寫進映像檔,而是在啟動容器時以環境變數傳入。這個設計的主要優點,下列何者最適當?

  1. A放入環境變數的值會自動加密,因此即使放入密碼,也不會被其他人讀取
  2. B不必重新建置,就能把同一個映像檔只改設定用於預備環境與正式環境,因此可把測試過的東西直接發布到正式環境
  3. C連線目標的資訊不會進入映像檔的層,因此映像檔的層減少,容器的啟動大幅加快
查看答案與解析

正確答案:B. 不必重新建置,就能把同一個映像檔只改設定用於預備環境與正式環境,因此可把測試過的東西直接發布到正式環境

以環境變數傳遞設定,也是名為 The Twelve-Factor App 的方法論所建議的想法,能把程式碼與映像檔,和執行它們的環境分開。同一個映像檔可用於預備環境與正式環境,因此發布到正式環境的就是測試過的同一個東西,每次變更連線目標也不需要重新建置映像檔。不過,環境變數不會加密,能查看容器設定或行程資訊的人都能讀取。密碼等機密值,要透過 Kubernetes 的 Secret 等機制,限縮可讀取的人再傳入。

  • A. 環境變數不會加密。能檢視容器設定的人就能讀到值。
  • B. 正確。把各環境的差異分到設定中,就能重複使用同一個映像檔。
  • C. 幾十位元組的設定有無,對層的數量與啟動時間幾乎沒有影響。主要優點是能把映像檔與環境分開。
練習這個領域 前往領域頁面

雲端與容器基礎的其他題目

  1. 在多個服務協同運作的系統中,想調查使用者的1個要求依什麼順序經過了哪些服務、在各服務分別花了多少時間。在用於可觀測性的資料中,最適合的是下列何者?
  2. 在實現 Linux 容器技術的核心功能中,命名空間(namespaces)與 cgroups(控制群組)的角色組合,下列何者正確?
  3. 在 Linux 主機上使用 Docker,從以與主機不同的發行版為基礎的映像檔啟動容器,並在其中執行 uname -r(顯示核心版次的指令)與 cat /etc/os-release(顯示發行版資訊的指令)。關於結果的說明,下列何者正確?
  4. 關於容器映像檔與容器的關係,下列何者正確?
  5. 在從某映像檔啟動的容器內,修改了映像檔中所含的設定檔 /etc/app.conf。在 Docker 一般的儲存機制(overlay2 等)下發生的事,下列何者正確?