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

文章目录

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

一. 默认网络:docker0网络的问题

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

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

相关知识:

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

二. 自定义网络

通过自定义网络:

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

shell 复制代码
# 创建自定义网络
docker network create gao

--network gao

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

shell 复制代码
# 创建两个容器
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. 集群描述

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

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

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

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

shell 复制代码
docker network create redis-net

docker 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和地址配置宿主机的

测试:

看到master添加了key,slave也同步了。

相关推荐
周先生FullStack21 分钟前
Mac + 容器本地 MySQL/Redis 环境搭建与网络原理实战
java·spring boot·微服务·容器·架构·个人开发
是店小二呀23 分钟前
MySQL 监控总在重复配置?用 Shell 自动部署 mysqld_exporter,再让 Prometheus 远程抓取
docker
终端安全笔记43 分钟前
iOS 27 给了租赁一个新工具,但它只认受监督的设备
android·网络·安全·ios
凤城老人1 小时前
从零手写开源私有云盘|Flask+Vue3+Electron全栈网盘,单容器一键部署
python·docker·electron·vue
Dovis(誓平步青云)1 小时前
突破 32 位瓶颈:64 位 XID 如何化解事务号回卷危机
运维·服务器·人工智能·docker·容器
是店小二呀1 小时前
开源鸿蒙PC原生适配:Node版本管理器命令行移植
docker·鸿蒙pc
为你学会写情书1 小时前
Docker 从入门到实战:容器化全栈项目,再顺手编排一个 Milvus 向量数据库
docker
万联WANFLOW2 小时前
AI Agent 架构如何重构跨境电商选品与广告投放
网络·人工智能·业界资讯
书源丶2 小时前
Qwen3-Embedding-0.6B 纯 CPU
网络·语言模型·embedding·llama
IPdodo_2 小时前
住宅 IP 与数据中心 IP 到底差在哪:用 RDAP、BGP 和多源证据做工程判定
网络·网络安全·代理模式·ip