4.1 發布端口的基本概念
發布端口 是讓 Docker 容器內運行的服務可以從外部網絡或主機訪問的一種方式。這是配置多容器應用的重要部分,因為它允許訪問像 Web 服務器、數據庫和其他網絡應用這樣的服務。在這節課中,我們會講解如何發布容器的端口以及設置服務的訪問方式。
發布端口的基本概念
- 端口映射 (port mapping): 將主機端口對應到容器端口。
- 參數
-p/--publish
: 在啟動容器時指定端口映射的參數。 - 參數
-P/--publish-all
: 自動為所有容器暴露的端口分配主機端口。
參數 -p
的使用示例
啟動容器時,你可以使用選項 -p
將主機端口映射到容器端口。命令格式如下:
docker run -d -p <host_port>:<container_port> <image>
示例 1: 發布 Nginx 網頁服務器的端口
啟動一個帶有 Nginx 的容器,並將容器的 80 端口發布到主機的 8080 端口。
現在 Nginx 可以通過 http://localhost:8080 訪問。
docker run -d -p 8080:80 --name mynginx nginx
示例 2: 發布多個端口
你可以通過指定多個 -p
選項來發布多個端口。
在這個示例中,Nginx 可以通過 HTTP 的 8080 端口和 HTTPS 的 8443 端口訪問。
docker run -d -p 8080:80 -p 8443:443 --name mynginx nginx
參數 -P
的使用示例
參數 -P
會自動將 Dockerfile 或容器設置中指定的所有端口分配到 隨機的主機端口。
示例:
docker run -d -P --name mynginx nginx
要查看哪些端口被分配,可以使用命令 docker port
:
docker port mynginx
輸出會類似於這樣:
80/tcp -> 0.0.0.0:32768
443/tcp -> 0.0.0.0:32769
4.2 在 Docker Compose 中發布埠
要在 Docker Compose 中設定埠,請使用文件 docker-compose.yml
裡的 ports
指令。
docker-compose.yml
文件範例
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
- "8443:443"
啟動 Docker Compose:
docker compose up -d
現在 Nginx 可以通過 http://localhost:8080 和 https://localhost:8443 訪問。
4.3 發布埠的其他參數
1. 限制 IP 地址
你可以透過指定主機的 IP 地址來限制對容器埠的訪問。
範例:
在這個例子中,Nginx 只會在本地主機上透過地址 http://127.0.0.1:8080 被訪問。
docker run -d -p 127.0.0.1:8080:80 --name mynginx nginx
2. 使用埠範圍
你可以指定一個埠範圍來發布。
範例:
docker run -d -p 8080-8081:80-81 --name mynginx nginx
實用建議:
- 只發布必要的埠:只發布那些真正需要用來訪問服務的埠,以減少潛在的漏洞。
- 使用防火牆:設定防火牆以限制對已發布埠的訪問,僅允許受信任的 IP 地址。
- 監控和記錄:使用監控和記錄工具來跟蹤對已發布埠的訪問並識別可疑活動。
GO TO FULL VERSION