Docker 內部通信(網絡)

1. 創建自定義橋接網絡

首先,創建一個自定義的Docker網絡。這可以通過docker network create命令完成。例如,我們可以創建一個名為my_custom_network的網絡:

docker network create --driver bridge my_custom_network

2. 啟動容器并連接到自定義網絡

接下來,啟動Docker容器并將它們連接到這個新創建的網絡。同時,為每個容器分配一個別名(即主機名),這樣其他容器就可以通過這個別名來訪問它了。例如:

# 啟動第一個容器
docker run -d --name web1 --network my_custom_network --hostname web1 nginx# 啟動第二個容器
docker run -d --name web2 --network my_custom_network --hostname web2 nginx

3. 容器間的通信

現在,web1web2都可以直接通過對方的名字進行訪問。例如,在web1內,你可以嘗試ping web2:

docker exec -it web1 ping web2

如果一切正常配置,你應該能看到成功的ping響應。

4. 使用IP地址通信

你也可以通過IP地址來訪問容器。首先,獲取容器的IP地址:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web1
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web2

假設web1的IP地址是172.18.0.2web2的IP地址是172.18.0.3,那么在web1中可以使用以下命令來訪問web2

docker exec -it web1 curl http://172.18.0.3

5. 自定義DNS方式

為了實現更復雜的域名解析,可以使用自定義DNS服務器。這里我們使用dnsmasq作為DNS服務器。

5.1 安裝和配置dnsmasq

首先,安裝dnsmasq

sudo apt-get update
sudo apt-get install -y dnsmasq

編輯/etc/dnsmasq.conf文件,添加以下內容:

address=/web1/172.18.0.2
address=/web2/172.18.0.3

重啟dnsmasq服務:

sudo systemctl restart dnsmasq

5.2 配置Docker使用自定義DNS

編輯Docker的配置文件/etc/docker/daemon.json,添加自定義DNS服務器的IP地址(通常是127.0.0.1):

{"dns": ["127.0.0.1"]
}

重啟Docker服務:

sudo systemctl restart docker

5.3 測試自定義DNS

重新啟動容器以應用新的DNS配置:

docker rm -f web1 web2
docker run -d --name web1 --network my_custom_network --hostname web1 nginx
docker run -d --name web2 --network my_custom_network --hostname web2 nginx

web1中測試是否可以通過自定義域名訪問web2

docker exec -it web1 sh -c 'echo "nameserver 127.0.0.1" > /etc/resolv.conf'
docker exec -it web1 apt-get update && apt-get install -y dnsutils
docker exec -it web1 nslookup web2

如果一切正常,你應該能看到web2的IP地址。

實驗論證

簡單實驗

為了進一步驗證這一點,讓我們在兩個容器中運行一些基本的服務,并確保它們能夠互相訪問。

  • web1容器中安裝curl:

    docker exec -it web1 apt-get update && apt-get install -y curl
    
  • 使用curl從web1訪問web2

    docker exec -it web1 curl http://web2
    

如果配置正確,你應該能看到web2返回的Nginx歡迎頁面。

通過以上步驟,你已經成功地配置了Docker容器之間的通信,并且實現了通過自定義DNS服務器進行域名解析。這樣,你可以在更復雜的環境中靈活地管理容器之間的網絡通信。

好的,下面我將詳細介紹如何在單機和集群機器上使用Docker配置Redis主從架構。我們將涵蓋實驗步驟、可能遇到的問題以及需要注意的細節。

好的,下面我將詳細介紹如何在單機和集群機器上使用Docker配置Redis主從架構。我們將涵蓋實驗步驟、具體的配置文件修改、可能遇到的問題以及需要注意的細節。

單機環境下的Redis主從架構配置

步驟1: 創建自定義網絡

創建一個自定義的Docker網絡,以便容器之間可以相互通信:

docker network create redis-net
步驟2: 啟動Redis主節點

啟動一個Redis主節點容器,并將其連接到自定義網絡。我們使用Docker Compose來簡化配置。

創建一個docker-compose.yml文件:

version: '3.8'services:redis-master:image: redis:latestcontainer_name: redis-masternetworks:- redis-netports:- "6379:6379"command: ["redis-server", "--requirepass", "yourpassword"]volumes:- ./redis-master.conf:/usr/local/etc/redis/redis.conf- ./data/redis-master:/datanetworks:redis-net:driver: bridge

創建redis-master.conf文件:

requirepass yourpassword

運行Docker Compose:

docker-compose up -d
步驟3: 啟動Redis從節點

啟動一個或多個Redis從節點容器,并將其連接到同一個自定義網絡。同樣使用Docker Compose。

編輯docker-compose.yml文件,添加從節點配置:

version: '3.8'services:redis-master:image: redis:latestcontainer_name: redis-masternetworks:- redis-netports:- "6379:6379"command: ["redis-server", "--requirepass", "yourpassword"]volumes:- ./redis-master.conf:/usr/local/etc/redis/redis.conf- ./data/redis-master:/dataredis-slave1:image: redis:latestcontainer_name: redis-slave1networks:- redis-netports:- "6380:6379"command: ["redis-server", "--slaveof", "redis-master", "6379", "--masterauth", "yourpassword", "--requirepass", "yourpassword"]volumes:- ./redis-slave1.conf:/usr/local/etc/redis/redis.conf- ./data/redis-slave1:/dataredis-slave2:image: redis:latestcontainer_name: redis-slave2networks:- redis-netports:- "6381:6379"command: ["redis-server", "--slaveof", "redis-master", "6379", "--masterauth", "yourpassword", "--requirepass", "yourpassword"]volumes:- ./redis-slave2.conf:/usr/local/etc/redis/redis.conf- ./data/redis-slave2:/datanetworks:redis-net:driver: bridge

創建redis-slave1.confredis-slave2.conf文件(內容相同):

requirepass yourpassword

運行Docker Compose:

docker-compose up -d
步驟4: 驗證主從架構

進入主節點容器并執行一些命令,然后檢查從節點是否同步了數據:

# 進入主節點容器
docker exec -it redis-master redis-cli -a yourpassword# 在主節點中設置一個鍵值對
set testkey testvalue# 查看鍵值對
get testkey

接著,進入從節點容器并檢查數據是否同步:

# 進入從節點容器
docker exec -it redis-slave1 redis-cli -a yourpassword# 查看鍵值對
get testkey# 進入另一個從節點容器
docker exec -it redis-slave2 redis-cli -a yourpassword# 查看鍵值對
get testkey

如果一切正常,你應該能看到相同的鍵值對。

集群環境下的Redis主從架構配置

假設你有三臺主機:host1, host2, host3,并且每臺主機上都安裝了Docker。

步驟1: 創建自定義網絡

在每臺主機上創建一個自定義的Docker網絡,名稱保持一致:

# 在 host1, host2, host3 上分別執行
docker network create redis-net
步驟2: 啟動Redis主節點

host1上啟動Redis主節點。創建一個docker-compose.yml文件:

version: '3.8'services:redis-master:image: redis:latestcontainer_name: redis-masternetworks:- redis-netports:- "6379:6379"command: ["redis-server", "--requirepass", "yourpassword"]volumes:- ./redis-master.conf:/usr/local/etc/redis/redis.conf- ./data/redis-master:/datanetworks:redis-net:driver: bridge

創建redis-master.conf文件:

requirepass yourpassword

運行Docker Compose:

docker-compose up -d
步驟3: 獲取主節點的IP地址

獲取主節點的IP地址,可以通過以下命令:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-master

假設主節點的IP地址是172.18.0.2

步驟4: 啟動Redis從節點

host2host3上啟動Redis從節點,并指定主節點的IP地址和端口。創建一個docker-compose.yml文件:

version: '3.8'services:redis-slave1:image: redis:latestcontainer_name: redis-slave1networks:- redis-netports:- "6380:6379"command: ["redis-server", "--slaveof", "172.18.0.2", "6379", "--masterauth", "yourpassword", "--requirepass", "yourpassword"]volumes:- ./redis-slave1.conf:/usr/local/etc/redis/redis.conf- ./data/redis-slave1:/datanetworks:redis-net:driver: bridge

創建redis-slave1.conf文件:

requirepass yourpassword

host2上運行Docker Compose:

docker-compose up -d

host3上創建類似的docker-compose.yml文件:

version: '3.8'services:redis-slave2:image: redis:latestcontainer_name: redis-slave2networks:- redis-netports:- "6381:6379"command: ["redis-server", "--slaveof", "172.18.0.2", "6379", "--masterauth", "yourpassword", "--requirepass", "yourpassword"]volumes:- ./redis-slave2.conf:/usr/local/etc/redis/redis.conf- ./data/redis-slave2:/datanetworks:redis-net:driver: bridge

創建redis-slave2.conf文件:

requirepass yourpassword

host3上運行Docker Compose:

docker-compose up -d
步驟5: 驗證主從架構

host1上進入主節點容器并執行一些命令,然后在host2host3上檢查從節點是否同步了數據:

# 在 host1 上進入主節點容器
docker exec -it redis-master redis-cli -a yourpassword# 在主節點中設置一個鍵值對
set testkey testvalue# 查看鍵值對
get testkey

接著,在host2host3上進入從節點容器并檢查數據是否同步:

# 在 host2 上進入從節點容器
docker exec -it redis-slave1 redis-cli -a yourpassword# 查看鍵值對
get testkey# 在 host3 上進入從節點容器
docker exec -it redis-slave2 redis-cli -a yourpassword# 查看鍵值對
get testkey

如果一切正常,你應該能看到相同的鍵值對。

可能出現的問題和注意事項

  1. 網絡問題:

    • 確保所有主機之間的網絡是連通的。
    • 如果使用的是云服務提供商(如AWS、GCP等),請確保安全組規則允許相應的端口通信。
  2. 防火墻和安全組:

    • 檢查防火墻和安全組規則,確保允許6379端口和其他相關端口的通信。
  3. DNS解析:

    • 如果使用域名而不是IP地址,確保DNS解析正確。
  4. 密碼一致性:

    • 確保主節點和從節點的密碼一致,否則從節點無法連接到主節點。
  5. 時間同步:

    • 確保所有主機的時間同步,以避免由于時間差異導致的問題。
  6. 持久化存儲:

    • 使用Docker卷來保存Redis的數據文件,確保數據不會因為容器重啟而丟失。

通過以上步驟,你可以在單機和集群環境中成功配置Redis主從架構。希望這些步驟對你有所幫助!

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

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

相關文章

單片機開發資源分析的實戰——以STM32F103C8T6為例子的單片機資源分析

目錄 第一點:為什么叫STM32F103C8T6 從資源手冊拿到我們的對STM32F103C8T6的資源描述 第二件事情,關心我們的GPIO引腳輸出 第三件事情:去找對應外設的說明部分 前言 本文章隸屬于項目: Charliechen114514/BetterATK: This is…

貪心算法(9)(java)最優除法

題目: 給定一正整數數組 nums,nums中的相鄰整數將進行浮點除法。例如,[2,3.4]->2/3/4. 例如,nums [2,3,4],我們將求表達式的值“2/3/4"。 但是,你可以在任意位置添加任意數目的括號,來改變算…

騰訊云MySQL數據庫架構分析與使用場景

TDSQL-C for MySQL TDSQL-C MySQL 版(TDSQL-C for MySQL)是騰訊云自研的新一代云原生關系型數據庫。融合了傳統數據庫、云計算與新硬件技術的優勢,為用戶提供具備高彈性、高性能、海量存儲、安全可靠的數據庫服務。TDSQL-C MySQL 版100%兼容…

榮耀手機卸載應用商店、快應用中心等系統自帶的

1.下載abd ADB Download - Get the latest version of ADB and fastboot 2.手機打開開發者選項 3.手機接電腦打開USB調試 4.下載MT管理器查看系統包名 D:\1.LFD\ADB\platform-tools-latest-windows\platform-tools>adb shell adb.exe: no devices/emulators found 這邊是…

星型拓撲網絡發生網絡風暴

在星型拓撲網絡中,所有的設備(如計算機、打印機等)通過一個中心設備(通常是交換機或集線器)連接在一起。 星型拓撲網絡中發生網絡風暴時的情況: 網絡風暴的表現 1.廣播風暴:在星型拓撲中&…

網絡流基本概念及實現算法

基本概念 流網絡 對于一個有向圖, 抽象成水管里的水的模型, 每根管子有容量限制, 計為 G ( V , E ) G (V, E) G(V,E), 首先不考慮反向邊 對于任意無向圖, 都可以將反向邊轉化為上述形式 如果一條邊不存在, 定義為容量為 0 0 0, 形式上來說就是 c ( u , v ) 0 c(u, v) 0 c(…

【css酷炫效果】純CSS實現球形陰影效果

【css酷炫效果】純CSS實現球形陰影效果 緣創作背景html結構css樣式完整代碼基礎版進階版(動態版) 效果圖 想直接拿走的老板,鏈接放在這里:上傳后更新 緣 創作隨緣,不定時更新。 創作背景 剛看到csdn出活動了,趕時間&#xff0…

Linux如何在設備樹中表示和引用設備信息

DTS基本知識 dts 硬件的相應信息都會寫在.dts為后綴的文件中,每一款硬件可以單獨寫一份xxxx.dts,一般在Linux源碼中存在大量的dts文件,對于arm架構可以在arch/arm/boot/dts找到相應的dts,一個dts文件對應一個ARM的machie。 dtsi 值…

【數學建模】模糊綜合評價模型詳解、模糊集合論簡介

模糊綜合評價模型詳解 文章目錄 模糊綜合評價模型詳解1. 模糊綜合評價模型概述2. 模糊綜合評價的基本原理2.1 基本概念2.2 評價步驟 3. 模糊綜合評價的數學模型3.1 數學表達3.2 模糊合成運算 4. 模糊綜合評價的應用領域5. 模糊綜合評價的優缺點5.1 優點5.2 缺點 6. 模糊綜合評價…

C++20 中的同步輸出流:`std::basic_osyncstream` 深入解析與應用實踐

文章目錄 一、std::basic_osyncstream 的背景與動機二、std::basic_osyncstream 的基本原理三、std::basic_osyncstream 的使用方法(一)基本用法(二)多線程環境下的使用(三)與文件流的結合 四、std::basic_…

C/C++藍橋杯算法真題打卡(Day8)

一、P8780 [藍橋杯 2022 省 B] 刷題統計 - 洛谷 算法代碼&#xff1a; #include<bits/stdc.h> // 包含標準庫中的所有頭文件&#xff0c;方便使用各種數據結構和算法 using namespace std; // 使用標準命名空間&#xff0c;避免每次調用標準庫函數時都要加 std::in…

JavaScript 編程:從基礎到高級應用的全面探索

引言 JavaScript 作為一種廣泛應用于 Web 開發的腳本語言&#xff0c;已經成為現代互聯網不可或缺的一部分。它不僅可以為網頁增添交互性和動態效果&#xff0c;還能在服務器端&#xff08;如 Node.js&#xff09;進行后端開發。本文將從 JavaScript 的基礎語法開始&#xff0…

第十三次CCF-CSP認證(含C++源碼)

第十三次CCF-CSP認證 跳一跳滿分題解 碰撞的小球滿分題解遇到的問題 棋局評估滿分題解 跳一跳 題目鏈接 滿分題解 沒什么好說的 基本思路就是如何用代碼翻譯題目所給的一些限制&#xff0c;以及變量應該如何更新&#xff0c;沒像往常一樣給一個n&#xff0c;怎么讀入數據&…

Pytorch使用手冊—自定義函數的雙重反向傳播與自定義函數融合卷積和批歸一化(專題五十二)

1. 使用自定義函數的雙重反向傳播 有時候,在反向計算圖中運行兩次反向傳播是有用的,例如計算高階梯度。然而,支持雙重反向傳播需要對自動求導(autograd)有一定的理解,并且需要小心處理。支持單次反向傳播的函數不一定能夠支持雙重反向傳播。在本教程中,我們將展示如何編…

MySQL:數據庫基礎

數據庫基礎 1.什么是數據庫&#xff1f;2.為什么要學習數據庫&#xff1f;3.主流的數據庫&#xff08;了解&#xff09;4.服務器&#xff0c;數據庫&#xff0c;表之間的關系5.數據的邏輯存儲6.MYSQL架構7.存儲引擎 1.什么是數據庫&#xff1f; 數據庫(Database,簡稱DB)&#x…

Web Component 教程(五):從 Lit-html 到 LitElement,簡化組件開發

前言 在現代前端開發中&#xff0c;Web 組件是一種非常流行的技術&#xff0c;它允許我們創建可重用的、自包含的 UI 元素。而 Lit-html 是一個簡潔高效庫&#xff0c;用于在 Web 組件中進行渲染。在這篇教程中&#xff0c;我們一步步學習如何 Lit-html 來創建 Web Component。…

【C++】二叉樹和堆的鏈式結構(上)

本篇博客給大家帶來的是用C語言來實現堆鏈式結構和二叉樹的實現&#xff01; &#x1f41f;&#x1f41f;文章專欄&#xff1a;數據結構 &#x1f680;&#x1f680;若有問題評論區下討論&#xff0c;我會及時回答 ??歡迎大家點贊、收藏、分享&#xff01; 今日思想&#xff…

Devops之AWS:如何安裝AWS CLI

AWS 命令行界面&#xff08;AWS CLI&#xff09;是一種開源工具&#xff0c;讓我們能夠使用命令行 Shell 中的命令與 AWS 服務進行交互。 安裝步驟&#xff1a; 下載并運行AWS CLI的MSI安裝程序&#xff1a; 點擊如下的鏈接&#xff0c;即可下載MSI安裝程序&#xff1a; htt…

PH2D數據集: 用人類演示數據提升人形機器人操作能力,助力跨實體學習

2025-03-18, 由加州大學圣地亞哥分校, 卡內基梅隆大學, 華盛頓大學, 麻省理工學院等機構聯合收集了PH2D數據集。該數據集包含26824個任務導向的人類演示&#xff0c;采用消費者級VR設備收集&#xff0c;提供了準確的3D手部關鍵點姿態和語言注釋。數據集覆蓋了多種操作任務、不同…

python 數據可視化matplotib庫安裝與使用

要使用 matplotlib 庫進行數據可視化&#xff0c;首先你需要確保已經安裝了該庫。如果你還沒有安裝&#xff0c;可以通過 Python 的包管理器 pip 來安裝它。在你的命令行工具中運行以下命令來安裝 matplotlib&#xff1a; pip install matplotlib安裝完成后&#xff0c;你就可以…