docker自定義網絡實現容器之間的通信

Background

  • docker原理
  • docker是一個Client-Server結構的系統,Docker的守護進程運行在主機上。通過Socket從客戶端訪問。
  • docker核心三大組件:image–鏡像、container-容器、 repository-倉庫。
  • docker使用的cpu、內存以及系統內核等資源都是直接使用宿主物理機的硬件,所以docker的性能比虛擬機高。
  • docker容器的本質是宿主機上的一個進程。通過namespace實現了資源隔離,通過cgroups實現了資源限制,通過寫時復制機制(copy-on-write)實現了高效的文件操作。
  • docker可以對哪些資源進行隔離:1、文件系統;2、網絡(network);3、進程間的通信;4、針對權限的用戶和用戶組;5、進程內的pid和宿主機的pid;6、主機名與域名等。
  • docker網絡

Docker是一種輕量級容器化技術,允許通過隔離OS級的虛擬化方式在一個操作系統上運行多個應用。網絡是Docker中的一個非常重要的組件,它允許容器之間進行通信和聯網訪問。本文主要介紹Docker網絡的基礎知識以及在容器化部署java程序時的應用

1、docker網絡類型

docker網絡有三個基本要素:網絡類型、網絡驅動和網絡配置。

  • bridge
    這個是默認的網絡類型,建立在宿主機的網絡接口之上。
  • host
    這種網絡類型,直接使用宿主機的網絡棧,容器和宿主機共享網絡棧。
  • overlay
    這種網絡類型可以跨越多個Docker守護進程,通過內置的DNS服務,允許容器之間跨主機進行通信。
  • macvlan
    這種方式可以讓容器擁有自己的MAC地址,從而可以直接與物理網絡中的設備進行通信。
    適用環境:希望容器能夠直接與物理網絡接口進行通信,或希望每個容器具有獨立的 IP 地址的場景。
    創建方法:使用 docker network create 命令并選擇 --driver macvlan 參數來創建 Macvlan 網絡。

Macvlan是一個新的嘗試,是真正的網絡虛擬化技術的轉折點。Linux實現非常輕量級,因為與傳統的Linux Bridge隔離相比,它們只是簡單地與一個Linux以太網接口或子接口相關聯,以實現網絡之間的分離和與物理網絡的連接。

Macvlan提供了許多獨特的功能,并有充足的空間進一步創新與各種模式。這些方法的兩個高級優點是繞過Linux網橋的正面性能以及移動部件少的簡單性。刪除傳統上駐留在Docker主機NIC和容器接口之間的網橋留下了一個非常簡單的設置,包括容器接口,直接連接到Docker主機接口。由于在這些情況下沒有端口映射,因此可以輕松訪問外部服務。

  • 創建MACVLAN網絡:
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 my-macvlan-network
  • 在MACVLAN網絡上啟動容器:
docker run -d --name my-container --network my-macvlan-network my-image

2、docker網絡驅動

docker支持多種網絡驅動程序,每種網絡驅動的實現方式都不同。下面列出了docker支持的網絡驅動程序。

1、bridge驅動:此驅動為docker的默認設置,docker安裝時會創建一個名為 docker0 的Linux bridge,新建的容器會自動橋接到這個接口。但與外界通信使用NAT,增加了通信的復雜性,在復雜場景下使用會有諸多限制。每個容器啟動后會通過DHCP自動獲取一個IP地址,容器間可以通過 IP 地址相互通信,但是容器重啟IP會發生變化。

2、host驅動:使用這種驅動的時候,Docker容器和宿主機共用同一個network namespace,使用宿主機的網卡、IP和端口等信息。但是,容器其他方面,如文件系統、進程列表等還是和宿主機隔離的。host模式不存在虛擬化網絡帶來的額外性能負擔。但是host驅動也降低了容器與容器之間、容器與宿主機之間網絡層面的隔離性,引起網絡資源的競爭與沖突。容器的網絡配置與宿主機相同,可以通過宿主機的 IP 地址直接訪問容器

3、overlay驅動:此驅動采用IETF標準的VXLAN方式,并且是VXLAN中被普遍認為最適合大規模的云計算虛擬化環境的SDN controller模式。在使用的過程中,需要一個額外的配置存儲服務, 還需要在啟動docker daemon的的時候額外添加參數來指定所使用的配置存儲服務地址。overlay指的就是在物理網絡層上再搭建一層網絡,通過某種技術再構建一張相同的邏輯網絡。需要互相通信的容器鏈接到相同的邏輯網絡就可以通過容器名稱互相通信

4、remote驅動:這個驅動實際上并未做真正的網絡服務實現,而是調用了用戶自行實現的網絡驅動插件,使libnetwork實現了驅動的可插件化。

5、null驅動:使用這種驅動的時候,Docker容器擁有自己的network namespace,但是并不為Docker容器進行任何網絡配置。也就是說,這個Docker容器除了network namespace自帶的loopback網卡外,沒有其他任何網卡、IP、路由等信息,需要用戶為Docker容器添加網卡、配置IP等。這種模式如果不進行特定的配置是無法正常使用的,但是優點也非常明顯,它給了用戶最大的自由度來自定義容器的網絡環境。

每個網絡類型都具有自己的特點和適用場景,根據實際需求選擇合適的網絡創建方法非常重要。此外,還有其他網絡驅動和網絡插件可供選擇,以滿足不同環境的需求,例如 Calico、Weave 等。

3、docker網絡配置

docker網絡配置官方文檔:https://docs.docker.com/reference/cli/docker/network

  • docker安裝后會自動創建3種網絡:bridge、host、none
# 查看命令
docker network ls

在這里插入圖片描述

  • 創建一個自定義的Docker網絡
docker network create yunlu

在這里插入圖片描述

  • 將容器連接到一個已存在的Docker網絡
# 第一種方式,my-container容器已經啟動了
docker network connect yunlu my-container
# 第二種方式,my-container容器啟動時通過 `--network yunlu` 或 `--net=yunlu`連接自定義網絡
docker run -d --restart=always --name my-container --network yunlu -p 8080:8080 -v $(pwd):/app -w /app yunlu/openjdk:1.8-alpine java -Duser.timezone=GMT+08 -Dfile.encoding=utf-8 -Dspring.config.location=/app/application.yml -jar /app/app.jar
  • 查看一個Docker網絡的詳細信息
docker network inspect yunlu
  • 查看一個Docker網絡下的所有容器
docker network inspect --format='{{.Containers}}' yunlu
  • 刪除一個已存在的Docker網絡
docker network rm yunlu

4、docker容器網絡配置

我們可以在容器啟動時通過 --network yunlu--net=yunlu連接自定義網絡。bridge 網絡是 docker 默認的網絡類型,當創建容器時,如果不指定網絡類型,則會自動創建一個橋接網絡并將容器連接到該網絡上。

在這里插入圖片描述

  1. 查看某個容器的網絡信息
# 第一種方式
docker inspect my-container | grep "NetworkMode"
# 第二種方式
docker inspect --format='{{.HostConfig.NetworkMode}}' my-container

5、容器化部署java程序

實現目標

容器化部署一個java程序huhang-server,該程序用到mysql、redis等服務,這些服務也是采用容器化部署。

兩種實現思路
  1. huhang-server部署時網絡使用host模式,mysql、redis等服務容器化部署時把所需端口映射出來供huhang-server使用;
  2. 使用自定義網絡模式,先創建一個自定義網絡yunlu,然后mysql、redis等服務所有容器都加入自定義網絡yunlu,huhang-server也加入自定義網絡yunlu,然后通過容器名稱去訪問mysql、redis等服務。
容器化部署java程序的兩種方式:
  1. 對于一些簡單的單體項目,可以使用 docker run 命令可以直接在命令行中運行容器,無需事先構建鏡像;
  2. 如果項目較為復雜,涉及多個組件和配置,或者需要在不同環境中部署,建議使用 Dockerfile 構建自定義鏡像。這樣可以更好地管理和復用代碼,并確保在不同環境中的一致性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697537.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697537.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697537.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python 函數-04-參數收集-帶1個或2個星號

一個函數,至多可以帶一個一星參數(收集位置參數),加上一個二星參數(收集關鍵字參數)。 01 一個星號參數 入參為不定參數(參數個數不確定),此時在定義參數時&#xff0c…

最簡單方式把jar打包成Windows服務

廢話 😢 將JAR文件轉化為Windows服務是一種高效且常見的Java應用部署策略。這種轉變賦予了Java應用程序在Windows操作系統上以無界面后臺服務模式運行的能力,從而實現了持續、穩定且可靠的功能提供。這種部署方式不僅提升了應用的可用性&#xff0c…

Python學習筆記——類(編程風格)

編寫的應用比較復雜時,特別是大型項目,團隊分工協同,尤其要注意編程風格。 (1)類名應采用駝峰命名法,即將類名中的每個單詞的首字母都大寫(類名的首字母是大寫的),并且不…

導入excel某些數值是0

目錄 導入excel某些數值是0數據全部都是0原因解決 部分數據是0原因解決 導入excel某些數值是0 數據全部都是0 有一列“工單本月入庫重量”全部的數據都是0 原因 展示的時候,展示的字段和內表需要展示的字段不一致,導致顯示的是0。 解決 修改展示的字…

kubernetes面試題及核心知識點

無狀態負載deployment有狀態管理 : config配置文件 secret密碼文件 內置volumn插件 1、emptyDir宿主機的存儲為容器分配資源。臨時儲存,隨著pod的刪除而消失, 2、hostPath宿主機的存儲為容器分配資源。不會隨著pod的刪除而消失&#xf…

Video generation models as world simulators-視頻生成模型作為世界模擬器

原文地址:Video generation models as world simulators 我們探索在視頻數據上進行大規模生成模型的訓練。具體來說,我們聯合訓練文本條件擴散模型,同時處理不同持續時間、分辨率和長寬比的視頻和圖像。我們利用一個在視頻和圖像潛在編碼的時…

AGI|AI到底如何生成視頻?Sora究竟為何能引爆科技圈?

目錄 一、AI生成視頻引發新浪潮 二、生成方法及難點 三、Sora的突破進展 (一)可生成不同尺寸視頻 (二)可生成1分鐘時長視頻 (三)圖片生成視頻 (四)場景一致性 (五…

Window部署Exceptionless

Exceptionless Elasticsearch 版本: Exceptionless:8.1.0 Elasticsearch:7.17.5 JDK:11.0.10 目錄 一、Elasticsearch運行 二、 Exceptionless 一、Elasticsearch運行 bin目錄下elasticsearch.bat 直接運行 訪問 http://lo…

使用gstreamer和opencv實時識別LED數碼管數字的測試demo(QT)

效果演示: 效果1:靜態識別 效果2:動態實時識別 可以看到,雖然不太穩定,但是好歹還是識別出來了的,就是需要調參,然鵝我不是專業的,目前還沒有調好。。。 T_T 先這樣吧。以后再說。 覺得文章質量可以的,請點個贊哦,謝謝。 前言 最近需要完成使用op…

yum方式快速安裝mysql

問題描述 使用yum的方式簡單安裝了一下mysql,對過程進行簡單記錄。 步驟 ①安裝wget和vim sudo yum -y install wget vim②下載mysql的rpm包 sudo wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm③升級和更新rpm包 sudo rpm -Uv…

ElementUI組件的安裝和使用

Element UI 是一款基于 Vue 2.0 的桌面端組件庫,主要用于快速構建網站的前端部分。它提供了豐富的組件,如按鈕、輸入框、表格、標簽頁等,以及一些布局元素,如布局容器、分割線等。Element UI 的設計風格簡潔,易于上手&…

【前端素材】推薦優質后臺管理系統Airmin平臺模板(附源碼)

一、需求分析 系統定義 后臺管理系統是一種用于管理和監控網站、應用程序或系統的在線工具。它通常是通過網頁界面進行訪問和操作,用于管理網站內容、用戶權限、數據分析等。后臺管理系統是網站或應用程序的控制中心,管理員可以通過后臺系統進行各種管…

第四十二回 假李逵翦徑劫單身 黑旋風沂嶺殺四虎-python讀寫csv和json數據

李逵答應了宋江三件事:不可吃酒,獨自前行,不帶板斧。李逵痛快答應了,挎一口腰刀,提著樸刀,帶了一錠大銀子,三五個小銀子就下山去了。 宋江放心不下,于是請同鄉朱貴也回家一趟&#…

arcgisPro制圖輸出

1、設置地圖底圖 2、導入數據 3、 設置圖形顏色,如下:右鍵“浙江省”數據層,選擇符號系統 4、在右側可看到打開的符號系統欄,進行如下設置: 5、移除“其他所有值”項,如下: 6、設置圖形輪廓,如下…

【MATLAB】CEEMD_ MFE_SVM_LSTM 神經網絡時序預測算法

有意向獲取代碼,請轉文末觀看代碼獲取方式~也可轉原文鏈接獲取~ 1 基本定義 CEEMD_MFE_SVM_LSTM神經網絡時序預測算法是一種結合了多種先進技術的復雜預測方法,旨在提高時序預測的準確性和穩定性。下面是對該算法的詳細介紹: CEEMD&#xff…

ES項目應用

配置: ES存儲了2-3億條,幾百GB ES集群有5 個節點 2主2副 ES返回數據量窗口大小設置 index.max_result_window 深度翻頁 1.from size 方式 2.scroll相當于維護了一份當前索引段的快照信息,這個快照信息是你執行這個scroll查詢時的快照。在這個查詢后的任…

kali虛擬機橋接模式快速設置

第一步:選擇 虛擬機 > 設置 > 虛擬機設置,設置橋接模式 不選擇復制物理網絡連接狀態選項: 如果采用DHCP的方式來分配IP地址,當電腦網絡從有線或無線網絡之間進行移動時,DHCP會重新分配ip地址,即虛擬機…

泰迪智能科技大模型數據智能實驗室

自2022年11月ChatGPT問世以來,大模型開始備受關注,科技巨頭們紛紛推出大模型實驗室解決方案。大模型的價值不知在于互聯網場景,而在于大模型能力垂直化,能夠與具體的業務需求深度融合。 大模型實驗室是在學校現有的實驗室建設基礎…

leetcode hot100 買賣股票的最佳時機1

本題之前采用貪心算法來解決,現在可以采用動態規劃來解決,通過dp數組記錄每次的狀態從而獲取到最大的利潤。 這里dp數組定義為二維數組 dp[price.length][2],其中price.length表示第i天,[2]其中有0/1兩種狀態,[0]表示…

六、回歸與聚類算法 - 欠擬合和過擬合

目錄 1、定義 2、原因及解決方法 2.1 正則化 線性回歸欠擬合與過擬合線性回歸的改進 - 嶺回歸分類算法:邏輯回歸模型保存與加載無監督學習:K-means算法 1、定義 2、原因及解決方法 2.1 正則化