docker系列教程之容器互聯

2021-10-10 00:20:45 字數 2817 閱讀 6716

一、docker互聯場景

docker搭建開發環境用的非常多,通常開發機器上既有容器形式的應用,又有本機跑著或者除錯的程式,它們之間互相依賴,如何讓它們之間通訊順暢,有時候是乙個挺困難的事情。容器應用和容器外應用互相訪問分為三種情況:

1、容器內應用和容器內應用

2、容器內應用訪問容器外應用

3、容器外應用訪問容器內應用

而根據兩個互相通訊的容器或應用在不在一台伺服器上,我們又多出乙個維度的情況:

1、容器或應用在一台伺服器

2、容器或應用不在一台伺服器

要想徹底搞清楚互相訪問的問題,就需要先弄清楚docker的網路是怎麼一回事。

常用的docker網路模式有三種:bridge、host 和 overlay三種模式各有適用場景:

bridge,應用都是容器形式,且都在乙個宿主機上,各個容器需要互相通訊的場景;

host,容器和本機應用混雜且需要相互訪問的情況;

overlay,在不同宿主機的容器之間需要互相通訊的情景。

bridge網路

分為「default bridge」和「user-defined bridge」(自定義bridge),docker安裝好後會預設建立乙個bridge網路(docker0),也就是「default bridge」,未指定網路的容器會預設使用這個網路。一般使用自定義bridge較多,我們定義乙個私有網路,可以將我們的應用與其他應用相隔離,這在乙個共享的開發伺服器上非常有用,此外,自定義網路也有下面兩個優點:

只有使用者定義的bridge網路才有dns功能,可通過容器名稱互相訪問,否則只能使用ip進行容器間訪問,而ip一是會變,二是不好記;

容器可以在不停的情況下,更換自定義的bridge。

host網路

host網路比較容易理解,如果指定容器使用host網路模式,容器會使用宿主機的網路,不會相隔離。也就是說,容器暴露的埠會直接對映到宿主機的相同埠。如果容器沒有暴露埠,那麼指定不指定host是沒啥效果的。

overlay網路

overlay網路用於docker自帶的集群模式(docker swarm),如果沒有使用swarm,建立overlay網路會報錯

相較於docker swarm,使用kubernetes的較多,工作中也是使用kubernetes,overlay網路相當於kubernetes中flannel建立的聯通各個node的網路,這裡就不多介紹overlay網路了。

如果不想那麼複雜,但又想不同機器上容器或應用互相訪問,可以使用extra_hosts來解決,下面我們會談到

二、不同情況互相訪問的方法

1、容器或應用在一台宿主機上

1.1 容器a訪問容器b

這種情況最好使用自定義到bridge網路,上面也提到了,自定義到bridge網路自帶「容器名 =>

容器ip」的解析能力,因此在容器a要想訪問容器b,直接使用容器名稱即可。

新建網路

引數說明:

-d:引數指定 docker 網路型別,有 bridge、overlay。

其中 overlay 網路型別用於 swarm mode,在本小節中你可以忽略它。

執行兩個容器並連線到新建的 test-net 網路

docker run -itd --name test1 --network test-net ubuntu /bin/bash

docker run -itd --name test2 --network test-net ubuntu /bin/bash

下面通過 ping 來證明 test1 容器和 test2 容器建立了互聯關係。

如果 test1、test2 容器內中無 ping 命令,則在容器內執行以下命令安裝 ping(即學即用:可以在乙個容器裡安裝好,提交容器到映象,在以新的映象重新執行以上倆個容器)。

apt-get update

apt install iputils-ping

1.2 容器內訪問容器外應用如何從容器內訪問宿主機應用呢?我們上面提到docker預設啟動乙個bridge網路(docker0),如果啟動的容器沒有指定自定義的網路,docker會在docker0中選取乙個未被使用的ip賦給容器。既然是bridge,所以我們可以通過docker0的gateway訪問到宿主機。檢視一下docker0的gateway,在容器中使用gateway的ip就可以訪問到宿主機。

1.3 容器外應用訪問容器a

將埠對映到宿主機的埠

2、容器或應用不在一台宿主機上

2.1 機器a容器訪問機器b本地應用

機器a容器中訪問機器b的ip位址和應用的埠即可。

2.2 機器a本地應用訪問機器b容器

和1.3類似,只要機器b中的容器使用host網路或者將埠對映到宿主機(機器b)埠,就可以通過宿主機ip加埠訪問。

2.3 機器a容器訪問機器b容器

機器a的容器無需特殊配置,機器b中的容器使用host網路或者將埠對映到宿主機(機器b)埠,就可以通過宿主機ip加埠訪問。

docker系列教程之docker安裝

2013年發布至今,docker 一直廣受矚目,被認為可能會改變軟體行業。一 環境配置的難題 軟體開發最大的麻煩事之一,就是環境配置。使用者計算機的環境都不相同,你怎麼知道自家的軟體,能在那些機器跑起來?使用者必須保證兩件事 作業系統的設定,各種庫和元件的安裝。只有它們都正確,軟體才能執行。舉例來說...

Docker教程系列三 Docker容器操作

l 檢視正在執行容器 docker ps l 檢視所有的容器 啟動過的歷史容器 docker ps a l 檢視最後一次執行的容器 docker ps l l 檢視停止的容器 docker ps f status exited l 建立容器常用的引數說明 l 建立容器命令 docker run l ...

docker 容器互聯

docker容器之間,預設是可以互相連線的 當啟動兩個容器contain1,contain2 contain1 ping contain2 ip contain2 ping contain1 ip 兩個是相互能ping通的 即使能夠互聯,但是,當我們重啟容器,或者重啟docker服務時 容器的ip就...