雲端與容器基礎

$ docker run -d -p 8080:80 nginx

以上面的指令,從在連接埠80等待連線的 Web 伺服器映像檔 nginx 啟動容器。主機的IP位址為 192.0.2.10,且沒有防火牆等限制。從同一網路中另一台PC的瀏覽器連線到這個 Web 伺服器的URL,下列何者正確?

  1. Ahttp://192.0.2.10:80/
  2. Bhttp://(容器的IP位址):8080/
  3. Chttp://192.0.2.10:8080/
查看答案與解析

正確答案:C. http://192.0.2.10:8080/

寫法是 -p 主機的連接埠:容器的連接埠,因此 -p 8080:80 是把到達主機連接埠8080的通訊,轉送到容器連接埠80的設定。從另一台PC要連到主機IP位址的連接埠8080。容器的IP位址一般屬於主機內部的虛擬網路,從外部的PC無法直接到達。Dockerfile 的 EXPOSE 80 只是表示容器使用的連接埠的紀錄,單憑它不會公開主機的連接埠,因此需要 -p 的設定。

  • A. 主機的連接埠80沒有被分配任何東西。80是容器那一側的連接埠。
  • B. 容器的IP位址屬於主機內部的虛擬網路,一般無法從外部的PC到達。而且容器等待連線的是80,不是8080。
  • C. 正確。前面是主機的連接埠,後面是容器的連接埠。
練習這個領域 前往領域頁面

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

  1. 上面的 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 少的時間為下列何者?
  2. 在 Docker 中,關於為了保留容器寫入的資料而使用的具名磁碟區(named volume)與繫結掛載(bind mount),下列何者正確?
  3. 指定 registry.example.com/team/web:1.4 來拉取(pull)映像檔。這個指定中各部分意義的組合,下列何者正確?
  4. scratch 是不含任何檔案的空映像檔。以上面的多階段建置 Dockerfile 建置的最終映像檔所包含的內容,下列何者正確?
  5. 在 Kubernetes 中,作為部署與管理的最小單位,把1個以上的容器組合在一起並讓它們共用同一IP位址與磁碟區的是下列何者?