隨著容器技術的普及和發展,Docker 已經成為了容器化技術中的一個領導者,是不少開發者和維運人員必不可少的工具。在實際應用中,我們常常需要將 Docker 中的服務暴露出去給外網進行訪問,這時就需要用到 Docker 的網絡配置和端口映射。
一、Docker 網路配置
Docker 網路有四種類型:橋接網絡,主機網絡,none 網路和自訂網路。在使用 Docker 進行服務的開發和部署時,我們通常使用自訂網路類型,這樣可以更好地控制容器之間的通訊。
Docker 的自訂網路配置通常包括網路名稱、網路驅動、子網路 IP 和網關等。其中,網路驅動有 bridge、overlay、macvlan 等多種類型可供選擇。如果需要多個容器之間互相訪問,則必須在同一自訂網路中,以便容器之間可以透過容器名稱或容器 ID 進行互通。
接下來,我們將介紹如何在 Docker 中建立自訂網絡,以及如何將服務容器加入指定網路。
我們可以透過 Docker 命令列工具,在建立容器時指定網路名稱來建立自訂網路。具體指令為:
docker network create --driver bridge <network_name>
其中,<network_name>
為需要建立的網路名稱。
如果需要將容器加入指定網路中,可以使用 docker run 指令的 --network 選項。具體指令為:
docker run --name <container_name> --network <network_name> <image_name>
其中,<container_name>
為容器名稱,<network_name>
為所需加入的網路名稱,< image_name>
為容器映像名稱。
二、Docker 連接埠對映
Docker 容器中的服務預設只能在容器內部進行訪問,如果需要讓外部網路可以透過IP 位址和連接埠號碼存取該服務,則需要進行連接埠映射。 Docker 的連接埠對映通常有兩種方式:靜態連接埠對映和動態連接埠對映。
靜態連接埠對映通常在啟動容器時進行設定。我們可以使用代表主機上連接埠號碼的
docker run -p <host_port>:<container_port> <image_name>
例如,將主機的8080 連接埠對應到容器中的80 連接埠:
docker run -p 8080:80 nginx
在這種情況下,我們可以透過瀏覽器存取http: //localhost:8080
來存取容器內的服務。
動態連接埠對映通常是透過自動指派一個主機上未被佔用的連接埠來進行的。我們可以使用 -P 或 -p
docker run -P <image_name>
或:
docker run -p <container_port> <image_name>
例如,使用-P 選項啟動一個Tomcat 容器,Docker 會自動指派主機上未被佔用的連接埠進行對應:
docker run -d -P tomcat
在這種情況下,我們可以使用docker ps -a
指令來查看已對應的連接埠號,然後透過瀏覽器存取主機IP 位址和指派的連接埠號碼來存取服務。
三、結論
透過網路配置和連接埠映射,我們就可以讓 Docker 容器中的服務暴露給外網進行存取。需要注意的是,在進行 Docker 網路配置和連接埠對映時一定要注意安全,避免將容器中的服務暴漏在外網環境下面,從而避免安全風險的產生。
以上是外網如何存取docker裡的服務的詳細內容。更多資訊請關注PHP中文網其他相關文章!