雲端與容器基礎

FROM alpine
ENTRYPOINT ["ping", "-c", "3"]
CMD ["localhost"]

以 docker run pinger example.com 啟動由上面的 Dockerfile 建置的映像檔 pinger。在容器內執行的指令為下列何者?

  1. Aping -c 3 localhost
  2. Bping -c 3 example.com
  3. Cexample.com(嘗試當作指令執行而發生錯誤)
查看答案與解析

正確答案:B. ping -c 3 example.com

以 exec 形式(JSON 陣列)撰寫的 ENTRYPOINT,是容器一定會執行的指令,CMD 則成為它的預設引數。寫在 docker run 映像檔名稱後面的引數會取代 CMD,並附加在 ENTRYPOINT 之後,因此執行的是 ping -c 3 example.com。若不帶引數以 docker run pinger 啟動,就會使用 CMD 的 localhost,成為 ping -c 3 localhost。要變更 ENTRYPOINT 本身時,使用 docker run 的 --entrypoint 選項。

  • A. 這是不帶引數啟動時的動作。docker run 的引數會取代 CMD。
  • B. 正確。引數 example.com 取代 CMD 的 localhost,並附加在 ENTRYPOINT 之後。
  • C. 若映像檔沒有 ENTRYPOINT 只有 CMD,引數會取代整個指令而變成這樣。這裡有 ENTRYPOINT,因此會作為引數傳入。
練習這個領域 前往領域頁面

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

  1. 以上面的指令,從在連接埠80等待連線的 Web 伺服器映像檔 nginx 啟動容器。主機的IP位址為 192.0.2.10,且沒有防火牆等限制。從同一網路中另一台PC的瀏覽器連線到這個 Web 伺服器的URL,下列何者正確?
  2. 上面的 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 少的時間為下列何者?
  3. 在 Docker 中,關於為了保留容器寫入的資料而使用的具名磁碟區(named volume)與繫結掛載(bind mount),下列何者正確?
  4. 指定 registry.example.com/team/web:1.4 來拉取(pull)映像檔。這個指定中各部分意義的組合,下列何者正確?
  5. scratch 是不含任何檔案的空映像檔。以上面的多階段建置 Dockerfile 建置的最終映像檔所包含的內容,下列何者正確?