【Docker】自定义网络:实现容器之间通过域名相互通讯

server/2025/2/12 17:45:27/

文章目录

    • 一. 默认网络docker0网络的问题
    • 二. 自定义网络
    • 三. nginx容器指之间通过主机名进行内部通讯
    • 四. redis集群容器(跳过宿主机)内部网络通讯
      • 1. 集群描述
      • 2. 基于bitnami镜像的环境变量快速构建redis集群

docker0_5">一. 默认网络docker0网络的问题

容器启动时,docker0会给容器分配一个ip,同一宿主机下其他容器可以通过此< ip:容器内部端口>,来访问此容器

但是当容器重启时,ip就变化了,因为docker0不支持通过容器主机名来访问,所以再次访问时还需要手动查找,维护性很差,生产环境不可用。

相关知识:

  • Docker0 网卡是 Docker 默认的桥接网络模式的一部分。在这种模式下,容器可以相互通信,并且可以通过 Docker0 网卡与外部网络通信。
  • 当一个新的 Docker 容器被创建时,Docker 会自动为该容器创建一对虚拟网络接口(veth pair),并将其中一个连接到 Docker0 网卡上,另一个分配给容器内部的网络命名空间。
  • 在默认情况下,Docker 容器会连接到一个名为 docker0 的虚拟以太网桥容器通过这个桥接网络接口访问外部网络容器网络命名空间中的虚拟网络接口(veth pair)的一端连接到 docker0 ,另一端连接到容器内部。当容器尝试访问外部网络时,数据包会通过 docker0 被转发到宿主机的网络接口,然后发送到外部网络
  • 桥接模式是如何访问接口的:ing

 

二. 自定义网络

通过自定义网络
创建自定义网络容器名就是稳定域名。

# 创建自定义网络
docker network create gao--network gao

 

三. nginx容器指之间通过主机名进行内部通讯

# 创建两个容器
docker run -d -p 8819:80 --name app-nginx-1 --network gao nginx 
docker run -d -p 8820:80 --name app-nginx-2 --network gao nginx # 进入到app-nginx-2 访问app-nginx-1的ngnix
docker exec -it app-nginx-2 bash root@9580927c07a8:/# curl http://app-nginx-1:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
。。。

 

四. redis集群容器(跳过宿主机)内部网络通讯

1. 集群描述

![[Pasted image 20241104151525.png]]

 

2. 基于bitnami镜像的环境变量快速构建redis集群

  1. 基于bitnami 的redis搭建集群:https://hub.docker.com/r/bitnami/redis

  2. 利用bitnami创建的redis集群,不需要写配置文件,只需要根据文档设置好环境变量就行
    ![[Pasted image 20241108171353.png]]

创建网络,以及redis主从集群

docker network create redis-netdocker run -d -p 6379:6379 \
-v /Users/lianggao/MyWorkSpace/001-360/002-docker-demo/redis/redis01:/bitnami/redis/data \
-e REDIS_REPLICATION_MODE=master \
-e REDIS_PASSWORD=123456 \
--network redis-net --name redis01 \
bitnami/redis# slave配置master的信息,看到master主机名就是容器
docker run -d -p 6380:6379 \
-v /Users/lianggao/MyWorkSpace/001-360/002-docker-demo/redis/redis02:/bitnami/redis/data \
-e REDIS_REPLICATION_MODE=slave \
-e REDIS_MASTER_HOST=redis01 \
-e REDIS_MASTER_PORT_NUMBER=6379 \
-e REDIS_MASTER_PASSWORD=123456 \
-e REDIS_PASSWORD=123456 \
--network redis-net --name redis02 \
bitnami/redis

 

客户端连接:

客户端下载地址:https://github.com/qishibo/AnotherRedisDesktopManager

ip和地址配置宿主机的

![[Pasted image 20241108170859.png]]

测试:

![[Pasted image 20241108170136.png]]
看到master添加了key,slave也同步了。

 


http://www.ppmy.cn/server/141361.html

相关文章

【QML 与 C++ 之间的通讯机制】QML 与 Qt 通讯:讲解如何在QML 中使用C++类,以及如何在C++ 中获取QML的内容

> 【QML 与 C 之间的通讯机制】QML 与 Qt 通讯:讲解如何在QML 中使用C类&#xff0c;以及如何在C 中获取QML的内容-阿里云开发者社区 在同一可执行文件中&#xff0c;C和QML共享同一个进程,但是它们运行在不同的线程上。 在Qt中&#xff0c;C和QML都是在同一个进程中运行的&…

MyBatis操作--进阶

博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:MySQL数据库 JavaEE专栏:JavaEE 软件测试专栏:软件测试 关注博主带你了解更多知识 1. 动态SQL 动态SQL是Mybatis的强⼤特性之⼀&#xff0c;能够完成不同条件下不同的sql拼接 1.1 <if>标签 比如说注册…

工位管理现代化:Spring Boot企业级框架

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

爬虫学习5

selenium用法详解【从入门到实战】【Python爬虫】【4万字】_selenium用法详解4万字csdn-CSDN博客 MYSQL数据库 MongoDB数据库 selenium用法详解【从入门到实战】【Python爬虫】【4万字】_selenium用法详解4万字csdn-CSDN博客 redis数据库 黑马程序员Redis入门到实战教程&…

Word2Vec,此向量维度,以及训练数据集单条数据的大小,举例说明;Skip-gram模型实现词嵌入;热编码(One-Hot Encoding)和词向量;

目录 Word2Vec Word2Vec,此向量维度,以及训练数据集单条数据的大小,举例说明 一、Word2Vec的词向量维度 二、训练数据集单条数据的大小 综上所述 热编码(One-Hot Encoding)和词向量 一、表示方式 二、维度与计算效率 三、语义捕捉能力 四、举例说明 Skip-gram模…

使用 HTML、CSS 和 JavaScript 实现动态烟花效果

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 ✨特色专栏&#xff1a…

电脑局域网内让其他电脑通过IP访问配置

依次点击桌面左下角“开始菜单”>“所有应用”>“Windows系统”>“控制面板”&#xff0c;如图所示 在控制面板界面&#xff0c;选择“查看方式”为“大图标”&#xff0c;然后点击打开window防火墙&#xff0c;如图所示 然后点击“高级设置”&#xff0c;如图所示 在…

CSRF详解

CSRF&#xff0c;全称是Cross-Site Request Forgery&#xff0c;即跨站请求伪造&#xff0c;也被称为“one click attack”或者session riding&#xff0c;是一种网络攻击方式。它允许攻击者诱导用户在已登录的Web应用程序上执行非预期的操作。 工作原理CSRF攻击通常涉及三个主…