7.1 埠轉發基礎 (Port forvarding)
埠轉發是 Docker 的一個很重要的功能,這讓容器內的應用程式可以從外部訪問。這功能是為了從宿主機或其他網路中連接運行在容器中的 Web 伺服器、資料庫或其他服務。
預設情況下,容器在隔離的網路中運行。為了讓容器中的服務可訪問,Docker 將容器埠轉發到宿主機的埠。
要執行埠轉發,可以使用 -p 或 --publish 參數搭配 docker run 命令。
語法
docker run -p [HOST_PORT]:[CONTAINER_PORT] [OPTIONS] IMAGE [COMMAND] [ARG...]
其中:
- HOST_PORT: 宿主機上的埠,流量會通過它進入。
- CONTAINER_PORT: 容器內的埠,流量會被轉發到這裡。
- OPTIONS: 設置容器的其他參數。
- IMAGE: 用於創建容器的映像。
- COMMAND: 在容器內執行的命令。
- ARG...: 命令的參數。
基本使用範例
這例子將執行 Web 伺服器 Nginx 的容器埠 80 轉發到宿主機的埠 8080。之後你可以在瀏覽器中通過 http://localhost:8080 訪問 Web 伺服器。
docker run -d -p 8080:80 nginx
7.2 其他端口轉發方式
1. 多重端口轉發
Docker 支援同時轉發多個端口喔!可以用多個選項 -p 一起設置。
範例
在這個範例裡,容器的 80 端口被轉發到主機的 8080 端口,容器的 443 端口被轉發到主機的 8443 端口。
docker run -d -p 8080:80 -p 8443:443 nginx
2. 指定 IP 地址的端口轉發
可以指定特定的 IP 地址來綁定轉發的端口哦!如果主機有多個網絡介面,這個功能特別方便,而且可以限制對容器的訪問權限。
範例:
在這個範例中,容器的 80 端口只被轉發到主機介面 127.0.0.1 的 8080 端口。所以服務只能從主機內部訪問。
docker run -d -p 127.0.0.1:8080:80 nginx
3. 範圍端口轉發
要一次轉發多個端口的話,Docker 支援處理範圍設置。
範例:
在這個範例中,容器的 7000 到 8000 端口範圍被轉發到主機對應的端口範圍。
docker run -d -p 7000-8000:7000-8000 someimage
7.3 實際使用場景
1. 訪問網頁伺服器
端口轉發最常用於確保訪問運行於容器內的網頁伺服器。
docker run -d -p 8080:80 nginx
執行這條指令後,運行在容器80端口上的 Nginx 網頁伺服器將可以通過主機機器的8080端口訪問。
2. 訪問資料庫
端口轉發對於訪問運行於容器中的資料庫也非常方便。
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=mysecretpassword postgres
在這個例子中,運行於容器5432端口的 PostgreSQL 將可以通過主機機器的5432端口訪問。
3. 測試與開發
Docker 容器經常被用來生成隔離的測試環境。端口轉發允許開發者運行並測試應用程序,就像它們在真實環境中運行一樣。
docker run -d -p 8080:80 -p 8443:443 myapp
在這個例子中,應用程式在8080和8443端口上進行測試,這和工作環境中使用的標準端口一致。
7.4 其他建議
1. 端口保護
當你在轉發端口時,別忘了安全性。開放的端口可能成為攻擊目標。只轉發真的需要的端口,並使用防火牆來限制訪問。
2. 防火牆和NAT
為了加強保護以及管理流量,使用防火牆和Network Address Translation (NAT)。這樣可限制對你服務的訪問和控制網絡連接。
3. 監控和日誌
設置監控和收集日誌,來追蹤轉發端口上的流量。這會幫助你更快發現並應對可疑的活動。
GO TO FULL VERSION