docker基礎之端口映射與容器互聯

端口映射實現容器訪問

從外部訪問容器應用

在啓動容器的時候,如果不指定對應參數,在容器外部是無法通過網絡來訪問容器內的網絡應用和服務的。

當容器中運行一些網絡應用,要讓外部訪問這些應用時,可以通過-P或者-p參數來指定端口映射。

當使用-P標記時,Docker會隨機映射一個49000~49900的端口到內部容器開發的網絡端口。

當使用-p標記時,可以指定要映射的端口,並且,在一個指定端口上只可以綁定一個容器。至此那個的格式有:IP:HostPort:ContainerPort 或者IP::ContainerPort或者HostPort:ContainerPort。

映射所有接口地址

使用HostPort:ContainerPort格式將本地的5000端口映射到容器的5000端口,可以執行如下命令:

docker run -d -p 5000:5000 training/webapp python app.py

此時默認會綁定本地所有接口上的所有地址。多次使用-p標記可以綁定多個端口。例如:

docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py

映射到指定地址的指定端口

可以使用IP:HostPort:ContainerPort格式指定映射使用一個特定地址。

例如指定ip是127.0.0.1,映射到5000端口:

docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py

映射到指定地址的任意端口

使用IP::ContainerPort綁定localhost的任意端口到容器的5000端口,本地主機會自動分配一個端口:

docker run -d -p 127.0.0.1::5000 training/webapp python app.py

還可以使用udp標記來指定udp端口:

docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

查看映射端口配置

使用docker port來查看當前映射的端口配置,也可以查看到綁定的地址:

image-20200218163604515

注意:容器有自己的內部網絡和IP地址,使用docker inspect + 容器id可以獲取容器的具體信息。

容器之間的互聯

容器的互聯是一種讓多個容器中的應用進行快速交互的方式。它會在源容器和接收容器之間創建連接關係,接收容器可以通過容器名快速訪問源容器,而不用指定具體的IP地址。

自定義容器命名

連接系統依據容器的名稱來執行。因此非常有必要自定義一個好記的容器命名,使用–name標記可以爲容器自定義命名。注意:容器的名稱是唯一的。

容器互聯

使用–link參數可以讓容器之間安全地進行交互。

下面先創建一個新的數據庫容器:

docker run -d --name db training/postgres

創建一個新的web容器,並將它連接到db容器:

docker run -d -P --name web --link db:db training/webapp python app.py

–link參數的語法格式解析:–link name:alias,其中name是要連接的容器的名稱,alias是別名。

此時,db容器和web容器建立互聯關係,相當於在兩個互聯的容器之間創建了一個虛擬機通道,而且不用映射它們的端口到宿主主機上。在啓動db容器的時候並沒有使用-p或者-P標記,從而避免了暴露數據庫服務端口到外部網絡上。

可以在web容器中安裝ping命令來測試跟db容器的連通,此時ping db就能成功。

發佈了47 篇原創文章 · 獲贊 17 · 訪問量 4584
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章