雲端與容器基礎

在從某映像檔啟動的容器內,修改了映像檔中所含的設定檔 /etc/app.conf。在 Docker 一般的儲存機制(overlay2 等)下發生的事,下列何者正確?

  1. A檔案會先複製到容器的可寫入層再修改,不影響映像檔與其他容器
  2. B直接修改映像檔層中的檔案,從同一映像檔啟動的其他容器也會看到變更後的內容
  3. C映像檔層是唯讀的,因此映像檔中所含的檔案無法修改,寫入會發生錯誤
查看答案與解析

正確答案:A. 檔案會先複製到容器的可寫入層再修改,不影響映像檔與其他容器

容器的檔案系統,是在唯讀的映像檔層之上疊加每個容器的可寫入層,並呈現為一個整體。第一次修改位於下層的檔案時,該檔案會被複製到可寫入層,之後就使用複本(寫入時複製)。因此映像檔層不會改變,也不影響共用同一映像檔的其他容器。大型檔案的第一次複製需要時間,所以像資料庫資料這類頻繁寫入的內容要放在磁碟區(volume)中。

  • A. 正確。第一次寫入時會複製到可寫入層。
  • B. 映像檔層是唯讀的,並由多個容器共用,因此不會被直接修改。
  • C. 寫入不會發生錯誤,而是在複製到可寫入層之後進行。
練習這個領域 前往領域頁面

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

  1. 為了解開500 MB的封存檔 data.tar.gz,以上面的 Dockerfile 建置映像檔。雖然解開後在同一個 RUN 中刪除了封存檔,映像檔仍然大了一個封存檔的大小。原因與對策的組合,下列何者最適當?
  2. 有5個映像檔,都在同一個基礎映像檔(120 MB)之上各疊加30 MB的專屬層。不考慮層的壓縮與中繼資料的容量。把這5個映像檔全部拉取(pull)到1台伺服器時,映像檔使用的磁碟容量為下列何者?
  3. 在上面的 Dockerfile 中,以 docker build 建置映像檔時執行的指令,與以 docker run 啟動容器時執行的指令,其組合下列何者正確?
  4. 以 docker run pinger example.com 啟動由上面的 Dockerfile 建置的映像檔 pinger。在容器內執行的指令為下列何者?
  5. 以上面的指令,從在連接埠80等待連線的 Web 伺服器映像檔 nginx 啟動容器。主機的IP位址為 192.0.2.10,且沒有防火牆等限制。從同一網路中另一台PC的瀏覽器連線到這個 Web 伺服器的URL,下列何者正確?