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.rhkb.cn/news/36257.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nvidia 官方CUDA课程学习笔记

之前心血来潮学习了一下Nvidia CUDA,外行,文章有理解不当的地方,望指正。 主要根据以下Nvidia官方课程学习: https://www.bilibili.com/video/BV1JJ4m1P7xW/?spm_id_from333.337.search-card.all.click&vd_sourcec256dbf86b…

Harmony 配置环境,创建,运行项目

Harmony 配置环境,创建,运行项目 1 .安装IDE 鸿蒙应用开发需要使用配套的IDE——HUAWEI DevEco Studio 获取DevEco Studio安装包,官方下载地址为:https://developer.huawei.com/consumer/cn/deveco-studio/ 解压之后双击deveco-s…

基于java的ssm+JSP+MYSQL的九宫格日志网站(含LW+PPT+源码+系统演示视频+安装说明)

系统功能 管理员功能模块: 个人中心 用户管理 日记信息管理 美食信息管理 景点信息管理 新闻推荐管理 日志展示管理 论坛管理 我的收藏管理 管理员管理 留言板管理 系统管理 用户功能模块: 个人中心 日记信息管理 美食信息管理 景点信息…

R语言软件配置(自用)

①输入R: The R Project for Statistical Computing ②点击进入Cran镜像网页,选择清华大学镜像,选择自己合适的版本下载即可(以我电脑windows为例)。 ③点击base或者install R for the first time,然后选择Download R-4.4.3 for windows&…

【数据结构】数据结构,算法 概念

0.本篇问题: 数据、数据元素、数据对象、数据项之间的基本关系?ADT是什么?数据结构的三要素?数据的逻辑结构有哪些?数据的存储结构有哪些?算法的五个特征?O(1) O(logn) O(n^n) O(n) O(n^2…

Doris单价和集群的部署

1 服务器环境准备 我们这里以3台服务器为列 1.1 硬件配置 Centos7.1及以上Ubuntu16.04及以上java1.8及以上GCC4.8.2及以上 每台服务器磁盘大小最小50G及时间相差不超或5秒 1.2 环境配置 1.2.1 修改limits.conf文件 vim /etc/security/limit.conf #在文件最后添加,*号也要添…

Linux上的`i2c-tools`工具集的编译构建和安装

源码复制到Ubuntu系统中并解压 的i2c-tools工具集的源码百度网盘下载链接: https://pan.baidu.com/s/1XNuMuT1auT1dMzYo3LAFmw?pwdi6xe 终端进入源码目录 cd /home/book/mybuild/i2c-tools-4.2执行编译构建命令 运行下面的命令进行编译构建 make CC${CROSS_COM…

织梦DedeCMS优化文章模版里的“顶一下”与“踩一下”样式

测试的版本5.7.1UTF-8 一、插入<head>Js代码 将下面代码插入到文章模版里的<head>标签里 <script language"javascript" type"text/javascript" src"{dede:global.cfg_cmsurl/}/include/dedeajax2.js"></script> <…

基于javaweb的SpringBoot食品溯源系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

数据采集技术之python网络爬虫(中国天气网的爬取)

一、爬取中国天气网所有地区当天的天气数据&#xff08;PyCharm&#xff09;&#xff1a; 网址&#xff1a;https://www.weather.com.cn/ 下面爬取数据&#xff1a; 因为现在已经到了夜间&#xff0c;所以白天的数据已经不见了&#xff0c;但原理是一样的。 二、代码以及详情…

实验四 文件管理

实验四 文件管理 实验目的 &#xff08;一&#xff09;实验1 1&#xff0e;加深对文件&#xff0c;目录&#xff0c;文件系统等概念的理解。 2&#xff0e;掌握Linux文件系统的目录结构。 3&#xff0e;掌握有关Linux文件系统操作的常用命令。 4&#xff0e;了解有关文件…

一文了解ThreadLocal

什么是ThreadLocal&#xff1f; ThreadLocal是每个线程私有的&#xff0c;线程可以把自己的私有数据放到ThreadLocal里面&#xff0c;不用担心其他线程访问到自己ThreadLocal。 通过set()方法将值存入ThreadLocal或者修改值&#xff0c;get()方法取出值&#xff0c;remove()方…

河南大学数据库实验5

由于版本问题图片无法正常上传&#xff0c;如果word版本需要请私信 1.现有读者购书数据库&#xff0c;该数据库中包含三个表&#xff1a;读者相关信息表R&#xff0c;图书信息表B&#xff0c;读者订购图书表OD&#xff0c;具体情况如下表&#xff1a; 表1 R表 表2 B表 表3 …

利用通义灵码AI在VS Code中快速开发扫雷游戏:Qwen2.5-Max模型的应用实例

引言 随着人工智能技术的不断进步&#xff0c;开发过程中的自动化程度也在逐步提高。阿里云推出的通义灵码AI程序员&#xff0c;作为一款创新型的智能编程助手&#xff0c;现已全面上线并兼容VS Code、JetBrains IDEs等多种开发环境。本文将介绍如何利用最新的Qwen2.5-Max模型…

Java多线程与高并发专题——在 Thread 中多个 ThreadLocal 是怎么存储的?

Thread、 ThreadLocal 及 ThreadLocalMap 三者之间的关系 在解答本文的标题问题之前&#xff0c;先要搞清楚 Thread、 ThreadLocal 及 ThreadLocalMap 三者之间的关系。 首先我们梳理下它们的定义与作用&#xff1a; Thread&#xff08;线程&#xff09; 定义&#xff1a;Th…

git tag常用操作

git tag是干嘛用的&#xff0c;相当于一个轻量级的分支。在一个分支上&#xff0c;创建一个tag&#xff0c;就是标记某一次的提交。然后方便checkout到 这个标签上。用tag的意思就是不用专门再创建一个新分支来修改后续的改动。分支不变&#xff0c;继续在上面改动&#xff0c;…

大模型开发(六):LoRA项目——新媒体评论智能分类与信息抽取系统

LoRA项目——新媒体评论智能分类与信息抽取系统 0 前言1 项目介绍1.1 项目功能1.2 技术原理1.3 软硬件环境1.4 项目结构 2 数据介绍与处理2.1 数据集介绍2.2 数据处理2.3 数据导入器 3 模型训练3.1 配置文件3.2 工具函数3.3 模型训练3.4 模型评估 4 模型推理 0 前言 微调里面&…

简单几步完成dify的本地搭建

简单几步完成dify的本地搭建

网络爬虫【爬虫库request】

我叫不三不四&#xff0c;很高兴见到大家&#xff0c;欢迎一起学习交流和进步 今天来讲一讲爬虫 Requests是Python的一个很实用的HTTP客户端库&#xff0c;完全满足如今网络爬虫的需求。与Urllib对比&#xff0c;Requests不仅具备Urllib的全部功能&#xff1b;在开发使用上&…

深度学习:从零开始的DeepSeek-R1-Distill有监督微调训练实战(SFT)

原文链接&#xff1a;从零开始的DeepSeek微调训练实战&#xff08;SFT&#xff09; 微调参考示例&#xff1a;由unsloth官方提供https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen2.5_(7B)-Alpaca.ipynbhttps://colab.research.google.com/git…