Docker實戰 五 之埠對映與容器互聯

2021-09-20 02:34:31 字數 2930 閱讀 4385

除了網路訪問外,docker還提供了兩個很方便的功能來滿足服務訪問的基本需求:乙個是允許對映容器內應用的服務埠到本地宿主主機;另乙個是互聯機制實現多個容器間通過容器名來快速訪問。

1.埠對映實現訪問容器

(1)從外部訪問容器應用

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

當容器中執行一些網路應用,要讓外部訪問這些應用時,可以通過-p或-p引數來指定埠對映。當使用-p(大寫的)標記時,docker會隨機對映乙個49000~49900的埠到內部容器開放的網路埠。

docker ps -l

此時可以使用docker ps看到,本地主機的49155被對映到了容器的5000埠。訪問宿主主機的49155埠即可訪問容器內web應用提供的介面。

同樣,可以通過docker logs命令檢視應用的資訊:

docker logs -f nostalgic_proskuriakova

-p(小寫的)可以指定要對映的埠,並且,在乙個指定埠上只可以繫結乙個容器。支援的格式有ip:hostport:containerport | ip:containerport | hostport:containerport

(2)對映所有介面位址

使用hostport:containerport格式將本地的5000埠對映到容器的5000埠,可以執行:

(3)對映到指定位址的指定埠

可以使用ip:hostport:containerport格式指定對映使用乙個特定位址,比如localhost位址127.0.0.1:

(4)對映到指定位址的任意埠

使用ip::containerport繫結localhost的任意埠到容器的5000埠,本地主機會自動分配乙個埠:

還可以使用udp來指定udp埠

(5)檢視對映埠配置

docker port nostalgic_proskuriakova

docker port nostalgic_proskuriakova 5000

注意:容器有自己的內部網路和ip位址,使用docker inspect+容器id可以獲取容器的具體資訊

2.互聯機制實現便捷互訪

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

(1)自定義容器別名

連線系統依據容器的名稱來執行。因此,首先需要定義乙個好記的容器名字。

雖然當建立容器的時候,系統缺省會分配乙個名字,但自定義容器名字有兩個好處:

a.自定義名字比較好記,比如乙個web應用容器,我們可以給它起名叫web,一目了然;

b.當要連線其他容器時,即便重啟,也可以使用容器名而不用改變,比如連線web容器到db容器;

使用--name標記可以為容器自定義命名:

注意:容器的名稱是唯一的。如果已經命名乙個叫web的容器,當你要再次使用web這個名稱的時候,需要先用docker rm來刪除只有建立的同名容器。

在執行docker run的時候如果新增--rm標記,則容器在終止後會立刻刪除。注意,--rm和-d引數不能同時使用。

(2)容器互聯

使用--link引數可以讓容器之間安全地進行互動。

下面建立乙個新的資料庫容器:

docker run -d --name db training/postgres

刪除之前的web容器

docker rm -f web

然後建立乙個新的web容器,並將它連線到db容器:

此時,db容器和web容器建立互聯關係:

--link引數的格式為--link name:alias,其中name是要連線的容器名稱,alias是這個連線的別名。

使用docker ps 來檢視容器的連線,如下所示:

可以看到自定義命名的容器,db和web,db容器的names列有db也有web/db。這個表示web容器連線到db容器,這允許web容器訪問db容器的資訊。

docker相當於在這兩個互聯的容器之間建立乙個虛機通道,而且不用對映它們的埠到宿主主機上。在啟動db容器的時候並沒有使用-p和-p標記,從而避免了暴露資料庫服務埠到外部網路上。

docker通過兩種方式為容器公開連線資訊:

a.更新環境變數;

b.更新 /etc/hosts檔案

使用env命令來檢視web容器的環境變數:

其中db_開頭的環境變數是供web容器連線db容器使用的,字首採用大寫的連線別名。

除了環境變數之外,docker還新增host資訊到父容器的/etc/host檔案。下面是父容器web的hosts檔案:

這裡有兩個hosts資訊,第乙個是web容器,web容器用自己的id作為預設主機名,第二個是db容器的ip和主機名。可以在web容器中安裝ping命令來測試與db容器的連通:

用ping來測試db容器,它會解析成172.17.0.8。使用者可以連線多個子容器到父容器,比如可以連線多個web到同乙個db容器上。

在生產環境中,網路方面的需求更加複雜多變,包括跨主機甚至跨資料中心的通訊,這時候往往就需要引入額外的機制,例如sdn(軟體定義網路),nfv(網路功能虛擬化)的相關技術。

docker 埠對映與容器互聯

在啟動容器時,如果不指定引數,外部網路無法訪問容器。當容器執行一些網路應用,需要用外部網路訪問,可以使用 p或 p引數指定對映埠。使用docker port來檢視埠情況。互聯系統基於容器名字,所以要合理定義容器的名字。建立容器的時候使用 name來指定名字。注意 容器名字唯一 docker run ...

Docker 埠對映與容器互聯

在實踐中,經常會碰到需要多個服務元件容器共同協作的情況,這往往需要多個容器之間能夠互相訪問到對方的服務。docker 除了通過網路訪間外,還提供了兩個很方便的功能來滿足服務訪問的基本需求 乙個是允許對映容器內應用的服務埠到本地宿主主機 另 乙個是互聯機制實現多個容器間通過容器名來快速訪問。在啟動容器...

Docker 埠對映與容器互聯

埠對映實現容器訪問 1.從外部訪問容器應用 在啟動容器的時候,如果不指定對應引數,在容器外部是無法通過網路來訪問容器內的網路應用和服務的。當容器中執行一些網路應用,要讓外部訪問這些應用時,可以通過 p或 p引數來指定埠對映。當使用 p 大寫的 標記時,docker會隨機對映乙個49000 49900...