Docker (五)【网络】

五、Docker 网络


Docker0

清空所有环境

# 移除所有容器
[root@vinjcent ~]# docker rm -f $(docker ps -aq)
# 移除所有镜像
[root@vinjcent ~]# docker rmi -f $(docker images -aq)

测试

在这里插入图片描述

三个网络分别代表三种不同的环境

# 问题: docker 是如何处理容器网络访问


[root@vinjcent ~]# docker run -d -P --name tomcat01 tomcat
[root@vinjcent ~]# docker exec -it tomcat01 /bin/bash
# 由于没有ip命令,进入容器中执行
apt-get update && apt-get install -y iproute2


# 查看容器的内部网络地址 ip addr		发现容器启动的时候会得到一个 eth0@if33 ip地址,由docker分配
root@079b99b77cc9:/usr/local/tomcat# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
32: eth0@if33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever


### 思考: Linux 能不能ping通容器内部
# 可以看到能够ping通 docker 内部
[root@vinjcent ~]# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.295 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.103 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.155 ms
64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.153 ms
64 bytes from 172.17.0.2: icmp_seq=5 ttl=64 time=0.149 ms
64 bytes from 172.17.0.2: icmp_seq=6 ttl=64 time=0.150 ms
64 bytes from 172.17.0.2: icmp_seq=7 ttl=64 time=0.207 ms
64 bytes from 172.17.0.2: icmp_seq=8 ttl=64 time=0.172 ms
64 bytes from 172.17.0.2: icmp_seq=9 ttl=64 time=0.148 ms

原理

192.168.0.1 路由器

192.168.0.3 比如连到 WIFI 的到这个网络地址

由于属于同一网段,能够ping通

  1. 每启动一个docker容器,docker就会给docker容器分配一个ip,只要安装了docker,就会有一个网卡docker0

桥接模式:使用的是 evth-pair 技术

再次在 Linux 本地测试命令ip addr

在这里插入图片描述

# 发现这个容器带来的网卡,都是一对对的  如上面的32-33
# evth-pair 即使一对的虚拟设备,是成对出现的,一段连接着协议,一段彼此相连
# 正因为有这个特性,evth-pair 充当一个桥梁,连接各种虚拟网络设备
  1. 测试下 tomcat01 和 tomcat02
# 创建 tomcat02 容器
[root@vinjcent ~]# docker run -d -P --name tomcat02 tomcat
[root@vinjcent ~]# docker exec -it tomcat01 /bin/bash
# 由于没有ip、ping命令,进入容器中执行
apt-get update && apt-get install -y iproute2 && apt install iputils-ping

# 查看正在运行的容器
[root@vinjcent ~]# docker ps
CONTAINER ID   IMAGE     COMMAND             CREATED          STATUS          PORTS                                         NAMES
29f50ce3b3d7   tomcat    "catalina.sh run"   17 minutes ago   Up 17 minutes   0.0.0.0:49158->8080/tcp, :::49158->8080/tcp   tomcat02
079b99b77cc9   tomcat    "catalina.sh run"   2 hours ago      Up 2 hours      0.0.0.0:49157->8080/tcp, :::49157->8080/tcp   tomcat01
# 进入 tomcat02 容器
[root@vinjcent ~]# docker exec -it 29f50ce3b3d7 /bin/bash
# ping 一下 tomcat01
root@29f50ce3b3d7:/usr/local/tomcat# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.128 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.189 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.251 ms
64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.168 ms
64 bytes from 172.17.0.2: icmp_seq=5 ttl=64 time=0.391 ms
64 bytes from 172.17.0.2: icmp_seq=6 ttl=64 time=0.205 ms
64 bytes from 172.17.0.2: icmp_seq=7 ttl=64 time=0.187 ms
# tomcat02 的ip地址
root@29f50ce3b3d7:/usr/local/tomcat# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
34: eth0@if35: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever


# 这说明,容器与容器之间是可以互相ping的
33: veth2e18f67@if32

绘制一个网络模型图

在这里插入图片描述

结论:tomcat01 和 tomcat02 是公用的一个路由器,docker0

所有的容器不指定网络的情况下,都是 docker0 路由的,docker 会给我们的容器分配一个默认的可用 IP

小结

Docker 使用的是 Linux 桥接,宿主机中是一个 Docker 容器的网桥 docker0

在这里插入图片描述

只要容器删除,对应的一对网桥也就消失了

思考:由于每次容器启动都会为容器分配id,在实现 database url = ip 时,需要更换数据库的 ip,我们希望通过如微服务中的 Feign 技术,通过服务名来进行访问容器

5.1 --link

[root@vinjcent ~]# docker exec -it tomcat02 ping tomcat01
ping: tomcat01: Name or service not known
[root@vinjcent ~]# docker run -d -P --name tomcat03 --link tomcat02 tomcat
# 进入 tomcat03 容器执行以下命令
apt-get update && apt install iputils-ping

# 发现通过 --link 就可以解决网络连通问题
[root@vinjcent ~]# docker exec -it tomcat03 ping tomcat02
PING tomcat02 (172.17.0.3) 56(84) bytes of data.
64 bytes from tomcat02 (172.17.0.3): icmp_seq=1 ttl=64 time=0.128 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=2 ttl=64 time=0.101 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=3 ttl=64 time=0.119 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=4 ttl=64 time=0.102 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=5 ttl=64 time=0.089 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=6 ttl=64 time=0.084 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=7 ttl=64 time=0.144 ms

# 反向可以ping通吗?
[root@vinjcent ~]# docker exec -it tomcat02 ping tomcat03
ping: tomcat03: Name or service not known

在这里插入图片描述

在这里插入图片描述

[root@vinjcent ~]# docker ps
CONTAINER ID   IMAGE     COMMAND             CREATED          STATUS          PORTS                                         NAMES
e680055e32f3   tomcat    "catalina.sh run"   40 minutes ago   Up 40 minutes   0.0.0.0:49159->8080/tcp, :::49159->8080/tcp   tomcat03
29f50ce3b3d7   tomcat    "catalina.sh run"   3 hours ago      Up 3 hours      0.0.0.0:49158->8080/tcp, :::49158->8080/tcp   tomcat02
079b99b77cc9   tomcat    "catalina.sh run"   5 hours ago      Up 5 hours      0.0.0.0:49157->8080/tcp, :::49157->8080/tcp   tomcat01
# 查看具体的某一个容器
[root@vinjcent ~]# docker inspect 29f50ce3b3d7

在这里插入图片描述

### 实质上 tomcat03 就是在本地配置了 tomcat02 的配置 (不推荐使用)
# 查看 hosts 文件配置
[root@vinjcent ~]# docker exec -it tomcat03 cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.3	tomcat02 29f50ce3b3d7		# 这就是配置的地方
172.17.0.4	e680055e32f3

5.2 自定义网络

查看所有的docker网络

[root@vinjcent ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
9b203b4a0922   bridge    bridge    local
b062cd1dc605   host      host      local
a956759ec7df   none      null      local

几种网络模式

bridge:桥接

none:不配置网络

host:和宿主机共享网络

container:容器网络连通(用的较少,局限性很大)

测试

# 直接启动的命令  --net bridge,而这个就是docker0
docker run -d -P --name tomcat01 --net bridge tomcat

# docker0特点: 默认的,域名不能访问,--link可以打通连接

自定义一个网络

# 帮助命令
[root@vinjcent ~]# docker network --help

# --driver [网络模式]
# --subnet [子网地址]
# --gateway [网关]

# 自定义一个网络
[root@vinjcent ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 div_network
# 查看docker网络列表
[root@vinjcent ~]# docker network ls
NETWORK ID     NAME          DRIVER    SCOPE
9b203b4a0922   bridge        bridge    local
fc77c0d825eb   div_network   bridge    local
b062cd1dc605   host          host      local
a956759ec7df   none          null      local
# 查看自定义的网络配置信息
[root@vinjcent ~]# docker network inspect div_network

在这里插入图片描述

根据自定义的网络,开启两个容器

### 由于从docker拉下来的镜像没有ping命令,并且在自定义的网络下,容器不能安装apt-get update、apt-get install iputils-ping
### 需要手动创建一个dockerfile镜像,创建的docekrfile文件内容如下
# =====================================文件内容=============================================
FROM centos:7
MAINTAINER vinjcent<2573552788@qq.com>

COPY readme.txt /url/local/readme.txt

ADD jdk-8u202-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.62.tar.gz /usr/local/

RUN yum -y install vim
RUN yum -y install iputils

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_202
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.62
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.62
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.62/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.62/bin/logs/catalina.out
# =====================================文件内容=============================================
# 创建镜像命令
[root@vinjcent vinjcent]# docker build -f div_tomcat_dockerfile -t div_tomcat .
# 查看镜像
[root@vinjcent vinjcent]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
div_tomcat   latest    cb339a54a2c5   4 minutes ago   1.02GB
tomcat       latest    52b67ab29b74   5 days ago      680MB
centos       7         eeb6ee3f44bd   9 months ago    204MB
# 运行自定义的两个镜像容器
[root@vinjcent vinjcent]# docker run -d -P --name tomcat-net-01 --net div_network div_tomcat
b0954fddd39611f4747dd89f8cc1955c20fbb9105bab8cebf16e2d5b4c32be00
[root@vinjcent vinjcent]# docker run -d -P --name tomcat-net-02 --net div_network div_tomcat
255128d366209e541a05789676af3da3c3da008c1d43e3b835bb0c9678dd89b9

# 查看自定义网络配置信息
[root@vinjcent ~]# docker network inspect div_network

在这里插入图片描述

### 测试在自定义网络下ping命令操作两个容器
# 不使用 --link 也可以ping名字了
[root@vinjcent vinjcent]# docker exec -it tomcat-net-01 ping tomcat-net-02
PING tomcat-net-02 (192.168.0.3) 56(84) bytes of data.
64 bytes from tomcat-net-02.div_network (192.168.0.3): icmp_seq=1 ttl=64 time=0.070 ms
64 bytes from tomcat-net-02.div_network (192.168.0.3): icmp_seq=2 ttl=64 time=0.193 ms
64 bytes from tomcat-net-02.div_network (192.168.0.3): icmp_seq=3 ttl=64 time=0.092 ms
64 bytes from tomcat-net-02.div_network (192.168.0.3): icmp_seq=4 ttl=64 time=0.213 ms
64 bytes from tomcat-net-02.div_network (192.168.0.3): icmp_seq=5 ttl=64 time=0.117 ms

自定义的网络docker已经维护好了对应的关系,推荐使用这样的网络

好处

  • redis:不同的集群使用不同的网络,保证集群是安全健康的
  • mysql:不同的集群使用不同的网络,保证集群是安全健康的

5.3 网络连通

假设有这种情形,如下图所示

在这里插入图片描述

# 准备的不同容器,带有-net名字的是自定义的网络,而没有的则是docker01下的网络
[root@vinjcent /]# docker run -d -P --name tomcat01 tomcat
dd168102688c2d59379092ab6d8aca21ed57bb4286fa92eab0d7138c6e3489b1
[root@vinjcent /]# docker run -d -P --name tomcat02 tomcat
b377880ad622e9a05d15b50a43733e155957e2e7abb709c2bf5c7182815ea072
[root@vinjcent /]# docker ps
CONTAINER ID   IMAGE        COMMAND                  CREATED          STATUS          PORTS                                         NAMES
b377880ad622   tomcat       "catalina.sh run"        4 seconds ago    Up 4 seconds    0.0.0.0:49161->8080/tcp, :::49161->8080/tcp   tomcat02
dd168102688c   tomcat       "catalina.sh run"        7 seconds ago    Up 7 seconds    0.0.0.0:49160->8080/tcp, :::49160->8080/tcp   tomcat01
255128d36620   div_tomcat   "/bin/sh -c '/usr/lo…"   15 minutes ago   Up 15 minutes   0.0.0.0:49159->8080/tcp, :::49159->8080/tcp   tomcat-net-02
b0954fddd396   div_tomcat   "/bin/sh -c '/usr/lo…"   15 minutes ago   Up 15 minutes   0.0.0.0:49158->8080/tcp, :::49158->8080/tcp   tomcat-net-01

# 由于从dockhub上拉下来的容器没有ping命令,需要手动安装
# 进入tomcat01容器,执行以下命令
[root@vinjcent /]# docker exec -it tomcat01 /bin/bash
root@dd168102688c:/usr/local/tomcat# apt-get update && apt install iputils-ping

ping测试

[root@vinjcent /]# docker ps
CONTAINER ID   IMAGE        COMMAND                  CREATED          STATUS          PORTS                                         NAMES
b377880ad622   tomcat       "catalina.sh run"        15 minutes ago   Up 15 minutes   0.0.0.0:49161->8080/tcp, :::49161->8080/tcp   tomcat02
dd168102688c   tomcat       "catalina.sh run"        15 minutes ago   Up 15 minutes   0.0.0.0:49160->8080/tcp, :::49160->8080/tcp   tomcat01
255128d36620   div_tomcat   "/bin/sh -c '/usr/lo…"   30 minutes ago   Up 30 minutes   0.0.0.0:49159->8080/tcp, :::49159->8080/tcp   tomcat-net-02
b0954fddd396   div_tomcat   "/bin/sh -c '/usr/lo…"   30 minutes ago   Up 30 minutes   0.0.0.0:49158->8080/tcp, :::49158->8080/tcp   tomcat-net-01
[root@vinjcent /]# docker exec -it tomcat01 ping tomcat-net-01
ping: tomcat-net-01: Name or service not known

在这里插入图片描述

查看docker network [options]命令

[root@vinjcent vinjcent]# docker network --help

Usage:  docker network COMMAND

Manage networks

Commands:
  connect     Connect a container to a network	# 需要用到这个命令,连接一个容器到一个网络
  create      Create a network
  disconnect  Disconnect a container from a network
  inspect     Display detailed information on one or more networks
  ls          List networks
  prune       Remove all unused networks
  rm          Remove one or more networks

Run 'docker network COMMAND --help' for more information on a command.

在这里插入图片描述

测试

# 测试打通 tomcat01(容器) --- div_network(网络)

# 将 tomcat01容器与div_network网络相连
[root@vinjcent /]# docker network connect div_network tomcat01
# 查看div_network的网络信息
[root@vinjcent /]# docker network inspect div_network 


# 实现了一个容器两个ip地址

在这里插入图片描述

# 再次尝试使用tomcat01容器 "ping" tomcat-net-01容器
[root@vinjcent /]# docker exec -it tomcat01 ping tomcat-net-01
PING tomcat-net-01 (192.168.0.2) 56(84) bytes of data.
64 bytes from tomcat-net-01.div_network (192.168.0.2): icmp_seq=1 ttl=64 time=0.108 ms
64 bytes from tomcat-net-01.div_network (192.168.0.2): icmp_seq=2 ttl=64 time=0.156 ms
64 bytes from tomcat-net-01.div_network (192.168.0.2): icmp_seq=3 ttl=64 time=0.120 ms
64 bytes from tomcat-net-01.div_network (192.168.0.2): icmp_seq=4 ttl=64 time=0.136 ms
64 bytes from tomcat-net-01.div_network (192.168.0.2): icmp_seq=5 ttl=64 time=0.086 ms
64 bytes from tomcat-net-01.div_network (192.168.0.2): icmp_seq=6 ttl=64 time=0.117 ms

# tomcat02依旧是打不通的
[root@vinjcent /]# docker exec -it tomcat02 ping tomcat-net-01
ping: tomcat-net-01: Name or service not known

5.4 实战:部署Redis集群

在这里插入图片描述

# 创建redis网络
[root@vinjcent /]# docker network create redis --subnet 172.38.0.0/16
5c0197bc1160253f042c2a5dda30ccebc499741c04a82a7fe4e02eeea091a668
[root@vinjcent /]# docker network ls
NETWORK ID     NAME          DRIVER    SCOPE
efedc44687a5   bridge        bridge    local
4e896df003be   div_network   bridge    local
b062cd1dc605   host          host      local
a956759ec7df   none          null      local
5c0197bc1160   redis         bridge    local

# 循环创建redis配置
for port in $(seq 1 6); \
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF >/mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file node.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done

# 模板
docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port} \
-v /mydata/redis/node-${port}/data:/data \
-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf; \

# redis-1
docker run -p 6371:6379 -p 16371:16379 --name redis-1 \
-v /mydata/redis/node-1/data:/data \
-v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

# redis-2
docker run -p 6372:6379 -p 16372:16379 --name redis-2 \
-v /mydata/redis/node-2/data:/data \
-v /mydata/redis/node-2/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.12 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

# redis-3
docker run -p 6373:6379 -p 16373:16379 --name redis-3 \
-v /mydata/redis/node-3/data:/data \
-v /mydata/redis/node-3/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.13 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

# redis-4
docker run -p 6374:6379 -p 16374:16379 --name redis-4 \
-v /mydata/redis/node-4/data:/data \
-v /mydata/redis/node-4/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.14 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

# redis-5
docker run -p 6375:6379 -p 16375:16379 --name redis-5 \
-v /mydata/redis/node-5/data:/data \
-v /mydata/redis/node-5/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.15 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

# redis-6
docker run -p 6376:6379 -p 16376:16379 --name redis-6 \
-v /mydata/redis/node-6/data:/data \
-v /mydata/redis/node-6/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.16 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf


# 查看6个redis容器
[root@vinjcent /]# docker ps
CONTAINER ID   IMAGE                    COMMAND                  CREATED          STATUS          PORTS                                                                                      NAMES
9e628dabd1b2   redis:5.0.9-alpine3.11   "docker-entrypoint.s…"   6 seconds ago    Up 5 seconds    0.0.0.0:6376->6379/tcp, :::6376->6379/tcp, 0.0.0.0:16376->16379/tcp, :::16376->16379/tcp   redis-6
7faf314737da   redis:5.0.9-alpine3.11   "docker-entrypoint.s…"   11 seconds ago   Up 10 seconds   0.0.0.0:6375->6379/tcp, :::6375->6379/tcp, 0.0.0.0:16375->16379/tcp, :::16375->16379/tcp   redis-5
d4aa7e9995a4   redis:5.0.9-alpine3.11   "docker-entrypoint.s…"   18 seconds ago   Up 17 seconds   0.0.0.0:6374->6379/tcp, :::6374->6379/tcp, 0.0.0.0:16374->16379/tcp, :::16374->16379/tcp   redis-4
a7047f1c2eb8   redis:5.0.9-alpine3.11   "docker-entrypoint.s…"   23 seconds ago   Up 22 seconds   0.0.0.0:6373->6379/tcp, :::6373->6379/tcp, 0.0.0.0:16373->16379/tcp, :::16373->16379/tcp   redis-3
0b62f39e1464   redis:5.0.9-alpine3.11   "docker-entrypoint.s…"   28 seconds ago   Up 27 seconds   0.0.0.0:6372->6379/tcp, :::6372->6379/tcp, 0.0.0.0:16372->16379/tcp, :::16372->16379/tcp   redis-2
59c162616b22   redis:5.0.9-alpine3.11   "docker-entrypoint.s…"   33 seconds ago   Up 32 seconds   0.0.0.0:6371->6379/tcp, :::6371->6379/tcp, 0.0.0.0:16371->16379/tcp, :::16371->16379/tcp   redis-1


# 创建集群
/data # redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6
379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1

在这里插入图片描述

在这里插入图片描述

# 进入redis控制台命令窗口
/data # redis-cli -c

在这里插入图片描述

# 设置键值对
127.0.0.1:6379> set a b
-> Redirected to slot [15495] located at 172.38.0.13:6379
OK
# 可以看到直接跟 redis-3相连

测试

# 将redis-3这个容器停止
[root@vinjcent /]# docker ps
CONTAINER ID   IMAGE                    COMMAND                  CREATED          STATUS          PORTS                                                                                      NAMES
9e628dabd1b2   redis:5.0.9-alpine3.11   "docker-entrypoint.s…"   17 minutes ago   Up 17 minutes   0.0.0.0:6376->6379/tcp, :::6376->6379/tcp, 0.0.0.0:16376->16379/tcp, :::16376->16379/tcp   redis-6
7faf314737da   redis:5.0.9-alpine3.11   "docker-entrypoint.s…"   17 minutes ago   Up 17 minutes   0.0.0.0:6375->6379/tcp, :::6375->6379/tcp, 0.0.0.0:16375->16379/tcp, :::16375->16379/tcp   redis-5
d4aa7e9995a4   redis:5.0.9-alpine3.11   "docker-entrypoint.s…"   17 minutes ago   Up 17 minutes   0.0.0.0:6374->6379/tcp, :::6374->6379/tcp, 0.0.0.0:16374->16379/tcp, :::16374->16379/tcp   redis-4
# 这里
a7047f1c2eb8   redis:5.0.9-alpine3.11   "docker-entrypoint.s…"   17 minutes ago   Up 17 minutes   0.0.0.0:6373->6379/tcp, :::6373->6379/tcp, 0.0.0.0:16373->16379/tcp, :::16373->16379/tcp   redis-3
0b62f39e1464   redis:5.0.9-alpine3.11   "docker-entrypoint.s…"   17 minutes ago   Up 17 minutes   0.0.0.0:6372->6379/tcp, :::6372->6379/tcp, 0.0.0.0:16372->16379/tcp, :::16372->16379/tcp   redis-2
59c162616b22   redis:5.0.9-alpine3.11   "docker-entrypoint.s…"   17 minutes ago   Up 17 minutes   0.0.0.0:6371->6379/tcp, :::6371->6379/tcp, 0.0.0.0:16371->16379/tcp, :::16371->16379/tcp   redis-1

[root@vinjcent /]# docker stop a7047f1c2eb8


# 在redis-1重新进入redis-cli命令窗口
/data # redis-cli -c
127.0.0.1:6379> get a
-> Redirected to slot [15495] located at 172.38.0.14:6379
"b"
# 可以发现redis-4变成了ma

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Naijia_OvO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值