發佈和公開連接埠

說明

如果您一直按照指南操作到目前為止,您應該瞭解容器會為應用程式的每個組件提供隔離的行程。每個組件(React 前端、Python API 和 Postgres 資料庫)都在其沙盒環境中執行,與主機上的所有其他內容完全隔離。這種隔離對於安全性和管理依賴關係非常重要,但這也意味著您無法直接存取它們。例如,您無法在瀏覽器中存取網路應用程式。

這就是連接埠發佈的用途所在。

發佈連接埠

發佈連接埠可透過設定轉發規則來突破一些網路隔離。例如,您可以指示主機的連接埠 8080 上的請求應轉發到容器的連接埠 80。連接埠發佈在使用 -p(或 --publish)旗標搭配 docker run 建立容器期間進行。語法為

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

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

$ docker run -d -p 8080:80 nginx

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

重要

發佈連接埠時,預設會將其發佈到所有網路介面。這表示到達您機器的任何流量都可以存取已發佈的應用程式。請注意發佈資料庫或任何敏感資訊。 在此進一步瞭解已發佈的連接埠

發佈到臨時連接埠

有時,您可能只想發佈連接埠,但不關心使用哪個主機連接埠。在這些情況下,您可以讓 Docker 為您選擇連接埠。為此,只需省略 主機連接埠 設定即可。

例如,下列命令會將容器的連接埠 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 的容器視圖來驗證已發佈的埠。

    A screenshot of Docker Desktop Dashboard showing the published port
  4. 您可以透過選擇容器欄位中的連結,或是在瀏覽器中瀏覽 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 指令中相同的 主機埠:容器埠 格式。

  2. 開啟終端機,並導覽到您在上一個步驟中建立的目錄。

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

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

其他資源

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

後續步驟

現在您已了解如何發佈和公開埠,您可以學習如何使用 docker run 指令覆寫容器預設值。