Docker 除了通過網絡訪問外,還提供了兩個很方便的功能來滿足服務訪問的基本需求:一個是允許映射容器內應用的服務端口到本地宿主機;另一個是互聯機制實現多個容器間通過容器名來快速訪問。
1. 端口映射實現容器訪問
端口映射有五種方式:映射所有 IP 的任意端口、映射所有 IP 的指定端口、映射指定 IP 的任意端口、映射指定 IP 的指定端口、映射 UDP 端口。
1.1 映射所有 IP 的任意端口
在創建或者啟動容器時使用 -P (大寫) 標記,Docker 會隨機映射一個端口到容器內開放的網絡端口:
docker run -d -P training/webapp python app.py
1.2 映射所有 IP 的指定端口、映射指定 IP 的任意端口、映射指定 IP 的指定端口、映射 UDP 端口
使用 -p (小寫) 標記來指定端口,格式為
HostPort:ContainerPort[/udp] | IP::ContainerPort[/udp] | IP:HostPort:ContainerPort[/udp]
例如 docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
2. 互聯機制便捷互訪
容器的互聯是指用一個容器名來訪問到源容器,而不用指定具體的 IP 地址。
具體步驟是:
- 源容器啟動時通過 --name 指定一個名字
- 新容器啟動時通過 --link name:alias 連接源容器,其中 name 是要鏈接的容器的名稱,alias 是別名。
例如:
docker run -d --name=db training/postgress
docker run -d -P --name=web --link db:db training/webapp python app.py
然后在 web 中就可以通過 db 來訪問到 db 容器了