1. 程式人生 > >docker——埠對映與容器互聯

docker——埠對映與容器互聯

在生產環境中,單個服務往往是獨立的,但是服務與服務之間往往是相互依賴的,
這樣對於容器來說,容器之間就需要相互訪問。
除了網路訪問之外,docker還提供了另外兩種方式來滿足服務的訪問。
  一:允許對映容器內應用的服務埠到本地宿主機;
  二:網際網路機制實現多個容器間通過容器名來快速訪問;

 

1.埠對映實現訪問容器

(1)從外部訪問容器應用:隨機分配本機埠

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

但是你知道怎樣通過公網來訪問這個程式嗎?你不知道,也沒人知道。

可能你會說我可以給這個程式繫結一個IP,確實可以,但是如果你沒有可用的IP呢?
我們可以通過-P來指定埠對映,docker會隨機對映一個主機埠到容器上

將本機的32770埠對映到容器的80埠,也就是nginx預設的埠,這樣就可以通過32770這個埠去訪問nginx服務。

 

 (2)一對一指定

使用HostPort:ContainerPort格式將本地的某個埠繫結到容器的某個埠之上

將本機的80埠對映到容器的80埠之上。一次可以使用多個-p,這樣可以實現多組繫結。

 

 (3)對映到指定地址和埠到容器指定埠

使用IP:HostPort:ContainerPort指定一個特定地址和埠。

 

 (4)對映到指定地址到隨機埠

使用IP::ContainerPort指定本機的任意埠到容器的指定埠。

 

(5)檢視對映埠配置

使用docker port檢視當前對映的埠位置。

  注意:每個容器都會有一個隨機分配的內網地址,通過docker inspect可以檢視。類似於虛擬機器的橋接模式。

 

 

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

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

使用--link引數可以讓容器之間安全的進行互動。
建立一個數據庫:

建立一個web容器,將其連線到db容器。

 

命令解釋:

docker run -d -P --name web --link db:db docker.io/nginx
--link引數的格式為--link name:alias,name是要連線的容器名稱,alias是這個連線的別名。

 

Docker相當於在兩個互聯的容器之間建立了一個虛擬通道,而且不用對映它們的埠到宿主主機上。

在啟動db容器的時候並沒有使用-p和-P標記,從而避免了暴露資料庫服務埠到外部網路上。