雲端與容器基礎

FROM python:slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]

在上面的 Dockerfile 中,以 docker build 建置映像檔時執行的指令,與以 docker run 啟動容器時執行的指令,其組合下列何者正確?

  1. Abuild 時:pip install,run 時:python app.py
  2. Bbuild 時:pip install 與 python app.py,run 時:python app.py
  3. Cbuild 時:無,run 時:pip install 與 python app.py
查看答案與解析

正確答案:A. build 時:pip install,run 時:python app.py

RUN 在建置映像檔時執行指令,並把結果(這裡是安裝好的函式庫)作為新的層存入映像檔。CMD 只是把啟動容器時要執行的預設指令記錄為映像檔的設定,建置時不會執行。因此函式庫只在建置時安裝1次,每次啟動容器都會執行 python app.py。若在 docker run 的映像檔名稱後面寫上指令,CMD 的內容就會被該指令取代。

  • A. 正確。RUN 在建置時執行,CMD 在啟動時執行。
  • B. CMD 在建置時不會執行,只是記錄啟動時的預設指令。
  • C. RUN 在建置時執行,結果存入映像檔。不會在每次啟動時重新安裝。
練習這個領域 前往領域頁面

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

  1. 以 docker run pinger example.com 啟動由上面的 Dockerfile 建置的映像檔 pinger。在容器內執行的指令為下列何者?
  2. 以上面的指令,從在連接埠80等待連線的 Web 伺服器映像檔 nginx 啟動容器。主機的IP位址為 192.0.2.10,且沒有防火牆等限制。從同一網路中另一台PC的瀏覽器連線到這個 Web 伺服器的URL,下列何者正確?
  3. 上面的 Dockerfile(B),是把在 COPY . . 之後放 RUN npm ci 的 Dockerfile(A),改成只先複製相依套件檔案的順序。npm ci 需要120秒、npm run build 需要30秒、COPY . . 需要2秒,其他指令的時間可忽略。每天20次只修改 src 底下的原始碼(不修改 package.json 與 package-lock.json)後重新建置映像檔。在可使用上次建置的快取時,以每天建置時間的合計來看,B 比 A 少的時間為下列何者?
  4. 在 Docker 中,關於為了保留容器寫入的資料而使用的具名磁碟區(named volume)與繫結掛載(bind mount),下列何者正確?
  5. 指定 registry.example.com/team/web:1.4 來拉取(pull)映像檔。這個指定中各部分意義的組合,下列何者正確?