python Docker容器之間通訊

2022-06-30 10:33:10 字數 2901 閱讀 8866

docker會為每個建立的容器自動分配乙個虛擬ip,這個虛擬ip無法從容器外側進行訪問,只是docker環境內部容器間彼此通訊的標識,容器間的網路是互通互聯的。

但是通過這種虛擬ip方式,進行容器間的通訊,有一些侷限性。因為在docker中建立乙個容器非常容易,比如說新建立的mysql容器可能會替代之前建立的mysql容器,而此時tomcat伺服器中配置的是之前的mysql容器的ip位址,因此隨著新容器的建立,之前tomcat配置的ip位址需要不斷的變更,並重啟服務。當有很多tomcat伺服器同時連線mysql資料庫時,這個修改工作就是乙個很大的工作量。

那這個問題如何解決呢?

容器建立時進行命名,配置連線時不在配置ip位址,而是配置容器的名字,這樣以後再建立容器時,只要名字不變,就可以自動連線到新建立的容器。

舉例說明:

(1)建立web服務

123

45

# 建立容器 執行tomcat服務 --name 為容器命名

docker run -d --name webserver tomcat

(2)建立資料庫服務(模擬)

1

docker run -d --name database -it centos /bin/bash

注:命令新增中的-d -it 和/bin/bash 是因為centos容器建立完成後,預設就進入退出狀態。如果想讓其保持執行狀態,後台必須保持乙個程序在執行,/bin/bash表示啟動容器後啟動bash。

(3)檢視正在執行的容器

(4)檢視連個容器的虛擬ip位址

通過docker inspect [options] name|id 命令檢視

docker inspect : 獲取容器/映象的元資料。

(5)進入webserver容器內容,測試網路

但是直接ping database卻是不通的,因為我們並沒有進行相應的網路設定,docker並不知道database和哪個ip是對應的,因此我們可以在建立webserver容器時指定webserver到database的單向通訊。

移除上面建立的web容器,並重新建立

123

4567

# 強制移除webserver容器

docker rm -f webserver

# 重新建立webserver容器 --link 要鏈結的容器名稱 (--link 可以使新生成的容器鏈結到已在執行的容器)

tomcat中的資料庫連線配置檔案中的url中的ip位址即可換成database

圖中的網橋充當了docker容器和外界宿主機之間的通訊源,使得容器內部也可以訪問網際網路

網橋也可以用於容器內部,實現容器間的雙向通訊。不僅如此網橋還有另乙個重要作用,就是對容器從網路層面進行分組

(1)通過【docker network ls 】列出當前網路狀況明細

上圖中列出的bridge即為容器和外界通訊的橋梁,如果我們想實現容器內部的雙向通訊也可以建立乙個網橋,具體操作過程如下:

(2)建立網橋

123

4567

# 建立網橋

docker network create -d bridge my-bridge

# 執行命令進行檢視

(3)將需要通訊的容器新增到網橋中

123

docker network connect my-bridge webserver

docker network connect my-bridge database

(4)進入容器進行驗證是否能夠互相通訊

stl容器之順序容器

stl容器分為順序容器和關聯容器 其中順序容器最常用的由vector,list,queue 1.vector vector 向量容器,可以看作變長陣列,長度可根據需要自行變化。使用的標頭檔案 include 定義方式 vector陣列名 vectorar 訪問容器內資料的方式和普通陣列相同,可以用a...

c STL容器之map容器

1.map中所有的元素都是pair 2.pair元素中第乙個元素為key,第二個元素為value 3.所有元素都會根據鍵值自動排序 4.map中不允許有重複的鍵,multimap中允許有重複的鍵 優點 可以根據key快速的找到value 一 建構函式 mapmp map const map mp 二...

c STL容器之deque容器

deque是雙端陣列。deque和vector的區別 deque內部工作原理 deque內部有個中控器,維護每段緩衝區中的內容,緩衝區中存放著真實資料。中控器維護的是每個緩衝區的位址,使得使用每個deque時像一塊連續的記憶體空間。deque容器的迭代器是支援隨機訪問的。一 deque建構函式 de...