發佈與開放連接埠

說明

如果您一直跟著本指南操作,您應該已經瞭解容器為應用程式的每個元件提供了隔離的處理程序。每個元件(React 前端、Python API 以及 Postgres 資料庫)都在其自己的沙盒環境中執行,與主機上的其他所有內容完全隔離。這種隔離對於安全性和管理依賴關係非常有益,但也意味著您無法直接存取它們。例如,您無法在瀏覽器中存取網頁應用程式。

這就是連接埠發佈(port publishing)的用途。

發佈連接埠

發佈連接埠可以透過建立轉發規則,突破少部分的網路隔離。例如,您可以指定主機連接埠 8080 的請求應轉發至容器的連接埠 80。發佈連接埠是在容器建立時透過 docker run 指令搭配 -p(或 --publish)旗標來完成的。語法如下:

$ docker run -d -p HOST_PORT:CONTAINER_PORT nginx
  • HOST_PORT:您想要接收流量的主機機器連接埠號
  • CONTAINER_PORT:容器內正在監聽連線的連接埠號

例如,若要將容器的連接埠 80 發佈到主機連接埠 8080

$ docker run -d -p 8080:80 nginx

現在,任何傳送到主機機器連接埠 8080 的流量都將轉發至容器內的連接埠 80

重要

當連接埠被發佈時,預設會發佈到所有網路介面。這意味著任何到達您機器的流量都可以存取已發佈的應用程式。請務必注意不要隨意發佈資料庫或任何敏感資訊。在此處瞭解更多關於已發佈連接埠的資訊

發佈到臨時連接埠

有時,您可能只想發佈連接埠,而不介意使用哪個主機連接埠。在這些情況下,您可以讓 Docker 為您選擇連接埠。若要這樣做,只需省略 HOST_PORT 設定即可。

例如,以下指令會將容器的連接埠 80 發佈到主機的一個臨時連接埠上:

$ docker run -p 80 nginx

一旦容器正在執行,使用 docker ps 指令即可檢視所選的連接埠:

docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS          PORTS                    NAMES
a527355c9c53   nginx         "/docker-entrypoint.…"   4 seconds ago    Up 3 seconds    0.0.0.0:54772->80/tcp    romantic_williamson

在此範例中,該應用程式在主機的連接埠 54772 上公開。

發佈所有連接埠

建立容器映像檔時,EXPOSE 指令用於表示封裝的應用程式將使用指定的連接埠。這些連接埠預設不會被發佈。

使用 -P--publish-all 旗標,您可以自動將所有公開的連接埠發佈到臨時連接埠。這在開發或測試環境中試圖避免連接埠衝突時非常有用。

例如,以下指令將發佈由映像檔設定的所有公開連接埠:

$ docker run -P nginx

試試看

在本實作指南中,您將學習如何使用 CLI 和 Docker Compose 來發佈容器連接埠,以部署一個網頁應用程式。

使用 Docker CLI

在此步驟中,您將執行一個容器,並使用 Docker CLI 發佈其連接埠。

  1. 下載並安裝 Docker Desktop。

  2. 在終端機中,執行以下指令來啟動一個新容器:

    $ docker run -d -p 8080:80 docker/welcome-to-docker
    

    第一個 8080 指的是主機連接埠。這是您本機上用於存取容器內執行應用程式的連接埠。第二個 80 指的是容器連接埠。這是容器內應用程式監聽傳入連線的連接埠。因此,該指令將主機的連接埠 8080 繫結到容器系統的連接埠 80

  3. 透過前往 Docker Desktop Dashboard 的容器 (Containers) 檢視畫面,驗證已發佈的連接埠。

    A screenshot of Docker Desktop Dashboard showing the published port
  4. 您可以透過選取容器 連接埠 (Port(s)) 欄位中的連結,或在瀏覽器中造訪 https://:8080 來開啟網站。

    A screenshot of the landing page of the Nginx web server running in a container

使用 Docker Compose

此範例將使用 Docker Compose 啟動相同的應用程式:

  1. 建立一個新目錄,並在該目錄內建立一個內容如下的 compose.yaml 檔案:

    services:
      app:
        image: docker/welcome-to-docker
        ports:
          - 8080:80

    ports 設定接受幾種不同的連接埠定義語法。在本例中,您使用的是與 docker run 指令中相同的 HOST_PORT:CONTAINER_PORT 格式。

  2. 開啟終端機並導航至您在前一個步驟中建立的目錄。

  3. 使用 docker compose up 指令啟動應用程式。

  4. 在瀏覽器中開啟 https://:8080

其他資源

如果您想深入瞭解此主題,請務必查看以下資源:

下一步

現在您已經瞭解如何發佈與公開連接埠,您已準備好學習如何使用 docker run 指令來覆寫容器的預設設定。

覆寫容器預設值
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.