一、docker网络
1.1 理解docker0
- 清空docker中所有容器
docker rm -f $(docker ps -aq)
- 清空docker中所有镜像
docker rmi -f $(docker images -aq)
- ctrl+l是清屏快捷键,相当于clear
- ip addr查看服务器的IP地址信息,可以看到3个网卡信息
1.2 运行一个tomcat容器
docker run -d -P --name tomcat01 tomcat
- -P,随机映射本机与容器之间的端口号
[root@zhouhao ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
27deb683e957 tomcat "catalina.sh run" 16 minutes ago Up 16 minutes 0.0.0.0:49155->8080/tcp, :::49155->8080/tcp tomcat01
查看容器内部网卡信息,新版tomcat没有ip addr命令,需要先安装该命令
- 进入容器安装
apt update && apt install -y iproute2
apt命令
apt(Advanced Packaging Tool)是一个在 Debian 和 Ubuntu 中的 Shell 前端软件包管理器。
apt 命令提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
apt 命令执行需要超级管理员权限(root)。
查看容器内部网卡信息
root@27deb683e957:/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
70: eth0@if71: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
valid_lft forever preferred_lft forever
1.3 Linux服务器能否ping通docker容器内部?
[root@zhouhao ~]# ping 172.18.0.2
PING 172.18.0.2 (172.18.0.2) 56(84) bytes of data.
64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.049 ms
64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.060 ms
64 bytes from 172.18.0.2: icmp_seq=3 ttl=64 time=0.059 ms
64 bytes from 172.18.0.2: icmp_seq=4 ttl=64 time=0.067 ms
64 bytes from 172.18.0.2: icmp_seq=5 ttl=64 time=0.061 ms
- 结论是可以ping通
- dockers容器内IP地址是172.18.0.2,Linux服务器docker0的IP地址是172.18.0.1,是同一个网端
[root@zhouhao ~]# 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
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:16:3e:0e:ac:db brd ff:ff:ff:ff:ff:ff
inet 172.17.139.29/20 brd 172.17.143.255 scope global dynamic eth0
valid_lft 314555882sec preferred_lft 314555882sec
inet6 fe80::216:3eff:fe0e:acdb/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:4c:c9:62:7c brd ff:ff:ff:ff:ff:ff
inet 172.18.0.1/16 brd 172.18.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:4cff:fec9:627c/64 scope link
valid_lft forever preferred_lft forever
71: veth721544e@if70: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether aa:e7:6a:71:ee:4e brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::a8e7:6aff:fe71:ee4e/64 scope link
valid_lft forever preferred_lft forever
编号71的网卡,是启动docker容器后自动生成的网卡
1.4 网络原理
Linux服务器只要按装了docker,就会有一个docker0的网卡,是桥接模式,使用的是evth-pair技术。启动一个docker容器,docker就会给docker容器分配一个IP地址。
veth-pair技术
发现Linux服务器中的网卡信息,与docker容器中的网卡信息是对应关系,是成对出现的。
veth-pair技术是虚拟设备接口,一段连着协议,一段彼此相连。veth-pair充当一个桥梁,连接虚拟网络设备。
1.5 启动tomcat02容器
docker run -d -P --name tomcat02 tomcat
查看启动的容器
[root@zhouhao ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e124d494351 tomcat "catalina.sh run" 21 seconds ago Up 19 seconds 0.0.0.0:49156->8080/tcp, :::49156->8080/tcp tomcat02
27deb683e957 tomcat "catalina.sh run" 2 hours ago Up 2 hours 0.0.0.0:49155->8080/tcp, :::49155->8080/tcp tomcat01
进入tomcat02容器,并安装ip addr命令
docker exec -it tomcat02 /bin/bash
apt update && apt install -y iproute2
查看tomcat02容器的网卡信息
root@6e124d494351:/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
72: eth0@if73: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.18.0.3/16 brd 172.18.255.255 scope global eth0
valid_lft forever preferred_lft forever
容器内安装ping命令
apt install iputils-ping
在 tomcat02容器内pingtomcat01容器
root@6e124d494351:/usr/local/tomcat# ping 172.18.0.2
PING 172.18.0.2 (172.18.0.2) 56(84) bytes of data.
64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.102 ms
64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.078 ms
64 bytes from 172.18.0.2: icmp_seq=3 ttl=64 time=0.072 ms
64 bytes from 172.18.0.2: icmp_seq=4 ttl=64 time=0.072 ms
64 bytes from 172.18.0.2: icmp_seq=5 ttl=64 time=0.071 ms
- 容器之间是隔离的,但是可以ping通
结论
tomcat01与 tomcat02共用一个路由,即docker0路由。
所有容器不指定网络的情况下,都是docker0路由的,docker给容器分配一个可用的IP。
- docker使用的是Linux系统的桥接技术,宿主机中是一个docker容器的网桥,docker0。核心是Linux系统的虚拟化网络技术。
- docker容器中,所有的网络接口都是虚拟的,转发效率高
- 只要删除容器,对应的网桥对儿就被删除了
二、容器互联–link
2.1 启动tomcat01容器
docker run -d -P --name tomcat01 tomcat
问题:在 tomcat02容器中ping不通tomcat01容器
docker exec -it tomcat02 ping tomcat01
ping: tomcat01: Name or service not known
启动tomcat03容器,并与tomcat02容器连接
docker run -d -P --name tomcat03 --link tomcat02 tomcat
tomcat03容器中无ping命令,需要安装
apt update && apt install iputils-ping
在tomcat03容器中ping tomcat02容器,可以ping通
root@94c7a93d3a2f:/usr/local/tomcat# ping tomcat02
PING tomcat02 (172.18.0.3) 56(84) bytes of data.
64 bytes from tomcat02 (172.18.0.3): icmp_seq=1 ttl=64 time=0.090 ms
64 bytes from tomcat02 (172.18.0.3): icmp_seq=2 ttl=64 time=0.080 ms
64 bytes from tomcat02 (172.18.0.3): icmp_seq=3 ttl=64 time=0.069 ms
反向可以ping通么?tomcat02容器pingtomcat03容器
[root@zhouhao ~]# docker exec -it tomcat02 ping tomcat03
ping: tomcat03: Name or service not known
- 结论是反向ping不通
查看容器的网络信息
docker network ls
NETWORK ID NAME DRIVER SCOPE
8332af64f234 bridge bridge local
7abdac590e2b host host local
f0c3788f5cda none null local
查看指定容器的详细网络信息
docker network inspect 8332af64f234
[
{
"Name": "bridge",
"Id": "8332af64f2342b019f5b0c007159cebf7ee99b8c5be0a8701fe3de99890940ff",
"Created": "2022-02-04T14:05:43.401697636+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
2.2 查看指定容器详细信息
docker inspect 6e124d494351
查看tomcat03容器的/etc/hosts文件
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.18.0.3 tomcat02 6e124d494351
172.18.0.4 94c7a93d3a2f
- 在tomcat03容器中,把tomcat02容器的IP地址写死在/etc/hosts文件里了
- –link,的本质是在hosts文件里增加了tomcat02的映射,172.18.0.3 tomcat02 6e124d494351
2.3 查看/etc/hosts文件信息
查看tomcat02容器的/etc/hosts文件信息
docker exec -it tomcat02 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.18.0.3 6e124d494351
- 现在玩docker已经不建议使用–link。我们通常使用自定义网络,但不适用于docker0。
- docker0自身的问题,它不支持容器名连接访问。
三、自定义网络
3.1 查看所有的docker网络
docker network ls
NETWORK ID NAME DRIVER SCOPE
8332af64f234 bridge bridge local
7abdac590e2b host host local
f0c3788f5cda none null local
3.2 网络模式
- bridge,桥接模式,docker默认
- none,不配置网络
- host,和宿主机共享网络
- container,容器内网络连通,局限性很大,用的少
清楚所有容器
docker rm -f $(docker ps -aq)
3.3 测试
docker run -d -P --name tomcat01 --net bridge tomcat 与
docker run -d -P --name tomcat01 tomcat 效果一样
- docker容器在启动时,有一个默认的参数–net bridge,默认使用docker0的网络,
- docker0网络域名不能访问,–link可以打通连接
3.4 自定义网络
docker network命令
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.
docker network create 命令
docker network create --help
Usage: docker network create [OPTIONS] NETWORK
Create a network
Options:
--attachable Enable manual container attachment
--aux-address map Auxiliary IPv4 or IPv6 addresses used by Network driver (default map[])
--config-from string The network from which to copy the configuration
--config-only Create a configuration only network
-d, --driver string Driver to manage the Network (default "bridge")
--gateway strings IPv4 or IPv6 Gateway for the master subnet
--ingress Create swarm routing-mesh network
--internal Restrict external access to the network
--ip-range strings Allocate container ip from a sub-range
--ipam-driver string IP Address Management Driver (default "default")
--ipam-opt map Set IPAM driver specific options (default map[])
--ipv6 Enable IPv6 networking
--label list Set metadata on a network
-o, --opt map Set driver specific options (default map[])
--scope string Control the network's scope
--subnet strings Subnet in CIDR format that represents a network segment
创建mynet网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
- –subnet 192.168.0.0/16,IP地址范围192.168.0.2至192.168.255.255。
- –gateway 192.168.0.1
查看创建的mynet网络
docker network ls
NETWORK ID NAME DRIVER SCOPE
8332af64f234 bridge bridge local
7abdac590e2b host host local
e7525fc2fc6a mynet bridge local
f0c3788f5cda none null local
查看创建的mynet网络,详细信息,inspect
docker network inspect mynet
[
{
"Name": "mynet",
"Id": "e7525fc2fc6ab9a3d500b2f4c6e7670b8b532016b9d5048054777953f5bd9926",
"Created": "2022-02-15T11:45:41.854137623+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.0.0/16",
"Gateway": "192.168.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
使用自定义网络启动tomcat01,tomcat02容器
docker run -d -P --name tomcat-net-01 --net mynet tomcat
docker run -d -P --name tomcat-net-02 --net mynet tomcat
查看自定义网络mynet,的详细信息
[root@zhouhao ~]# docker network inspect mynet
[
{
"Name": "mynet",
"Id": "e7525fc2fc6ab9a3d500b2f4c6e7670b8b532016b9d5048054777953f5bd9926",
"Created": "2022-02-15T11:45:41.854137623+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.0.0/16",
"Gateway": "192.168.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"742a0507cc599c268052459f1ba48dc13f5da0f820e512aa9da7a34cba482761": {
"Name": "tomcat-net-01",
"EndpointID": "33983a1c49a1befa8000e5f9eb703d4b1a41a326881e44a13530b27f2149e2e9",
"MacAddress": "02:42:c0:a8:00:02",
"IPv4Address": "192.168.0.2/16",
"IPv6Address": ""
},
"ea41c7650e0c5df3faf10832d6ef2994e85885f2673e3aa1555585f724bf8994": {
"Name": "tomcat-net-02",
"EndpointID": "0a53a95aa04f6317509674bd286bb6d753df215deafc983a19b1fdfd05b831ae",
"MacAddress": "02:42:c0:a8:00:03",
"IPv4Address": "192.168.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
可以看到tomcat01,tomcat02容器的详细网络信息。
tomcat-net-01容器ping tomcat-net-02容器名,tomcat-net-01容器pingtomcat-net-02容器IP地址都是可以ping通的。
docker exec -it tomcat-net-01 ping tomcat-net-02
docker exec -it tomcat-net-01 ping 192.168.0.3
- 现在不通过–link,也可以ping通容器
3.5 小结
- 自定义网络已经帮我们维护好了对应关系,推荐使用自定义网络
- 例如redis集群,MySQL集群,不同的集群使用不同的网络,保证集群是安全和健康的
四、网络连通
4.1 启动tomcat01,tomcat02容器,默认使用docker0网络
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat02 tomcat
在tomcat01容器中ping tomcat-net-01容器,ping不通。这两个容器所依赖的网卡不同,IP网段也不同。
root@3d049ffd705b:/usr/local/tomcat# ping tomcat-net-01
ping: tomcat-net-01: Name or service not known
docker network connect命令
Usage: docker network connect [OPTIONS] NETWORK CONTAINER
Connect a container to a network
Options:
--alias strings Add network-scoped alias for the container
--driver-opt strings driver options for the network
--ip string IPv4 address (e.g., 172.30.100.104)
--ip6 string IPv6 address (e.g., 2001:db8::33)
--link list Add link to another container
--link-local-ip strings Add a link-local address for the container
4.2 将tomcat01容器与mynet网卡连接
docker network connect mynet tomcat01
查看连接后,mynet网卡的详细信息
docker network inspect mynet
发现tomcat01容器网络,已经加入到了mynet网卡中。tomcat01容器的网段与mynet网卡的网段相同了,这里使用的是虚拟IP技术,也就是IP映射。
- tomcat01容器就是一个容器,两个IP地址
- 容器和网卡可以打通
4.3 tomcat01容器ping tomcat-net-01容器
[root@zhouhao ~]# 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.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.091 ms
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=2 ttl=64 time=0.068 ms
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=3 ttl=64 time=0.070 ms
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=4 ttl=64 time=0.072 ms
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=5 ttl=64 time=0.068 ms
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=6 ttl=64 time=0.077 ms
- 可以ping通
五、redis集群部署
5.1 创建redis网卡
docker network create redis --subnet 172.38.0.0/16
查看创建的redis网卡
docker network ls
NETWORK ID NAME DRIVER SCOPE
8332af64f234 bridge bridge local
7abdac590e2b host host local
e7525fc2fc6a mynet bridge local
f0c3788f5cda none null local
7cd2081215f8 redis bridge local
docker network inspect redis
[
{
"Name": "redis",
"Id": "7cd2081215f86d013cc78e19ad2bfe134e8ad78d6cf81407fd9223f242f9eebf",
"Created": "2022-02-15T16:16:24.942200934+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.38.0.0/16"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
seq命令
用于产生从某个数到另外一个数之间的所有整数
[root@zhouhao ~]# seq 1 10
1
2
3
4
5
6
7
8
9
10
cat > file<< EOF命令
cat > 文件名 << EOF:用来创建文件,在这之后输入的任何东西,都是在文件里的,输入完成之后以EOF结尾代表结束。
cat >> 文件名 << EOF:和上面一样,只不过是追加到文件,上面那个是覆盖写。
[root@zhouhao ~]# cat << EOF > 1.txt
> a
> b
> c
> d
> e
> EOF
[root@zhouhao ~]# cat 1.txt
a
b
c
d
e
cat命令
cat --help
Usage: cat [OPTION]... [FILE]...
Concatenate FILE(s), or standard input, to standard output.
-A, --show-all equivalent to -vET
-b, --number-nonblank number nonempty output lines, overrides -n
-e equivalent to -vE
-E, --show-ends display $ at end of each line
-n, --number number all output lines
-s, --squeeze-blank suppress repeated empty output lines
-t equivalent to -vT
-T, --show-tabs display TAB characters as ^I
-u (ignored)
-v, --show-nonprinting use ^ and M- notation, except for LFD and TAB
--help display this help and exit
--version output version information and exit
With no FILE, or when FILE is -, read standard input.
Examples:
cat f - g Output f's contents, then standard input, then g's contents.
cat Copy standard input to standard output.
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
For complete documentation, run: info coreutils 'cat invocation'
cat不是只能用来看文件,使用man cat命令,查看官方对cat的描述:将[文件]或标准输入(即键盘输入),输出到标准输出。
不加选项参数,直接使用cat,就是直接将标准输入(即键盘输入)输出到标准输出。
a
b
b
d
d
d^H
d
e
e
dd
dd
jj
jj
^C
5.2 编写创建配置文件的自动化脚本
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 nodes.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 命令
--ip string IPv4 address (e.g., 172.30.100.104)
启动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-5容器的命令
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
查看启动的redis容器
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a545cf1e7ad0 redis:5.0.9-alpine3.11 "docker-entrypoint.s…" 5 seconds ago Up 4 seconds 0.0.0.0:6376->6379/tcp, :::6376->6379/tcp, 0.0.0.0:16376->16379/tcp, :::16376->16379/tcp redis-6
8036afc6e674 redis:5.0.9-alpine3.11 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:6375->6379/tcp, :::6375->6379/tcp, 0.0.0.0:16375->16379/tcp, :::16375->16379/tcp redis-5
5ce3258cb6c2 redis:5.0.9-alpine3.11 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 0.0.0.0:6374->6379/tcp, :::6374->6379/tcp, 0.0.0.0:16374->16379/tcp, :::16374->16379/tcp redis-4
dea3eecff780 redis:5.0.9-alpine3.11 "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 0.0.0.0:6373->6379/tcp, :::6373->6379/tcp, 0.0.0.0:16373->16379/tcp, :::16373->16379/tcp redis-3
122fca28023e redis:5.0.9-alpine3.11 "docker-entrypoint.s…" 7 minutes ago Up 7 minutes 0.0.0.0:6372->6379/tcp, :::6372->6379/tcp, 0.0.0.0:16372->16379/tcp, :::16372->16379/tcp redis-2
7e88c95b2a84 redis:5.0.9-alpine3.11 "docker-entrypoint.s…" 14 minutes ago Up 14 minutes 0.0.0.0:6371->6379/tcp, :::6371->6379/tcp, 0.0.0.0:16371->16379/tcp, :::16371->16379/tcp redis-1
5.3 启动redis集群
进入redis-1容器
docker exec -it redis-1 /bin/sh
- redis容器中无/bin/bash命令,有/bin/sh命令
启动redis集群
redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-repl
icas 1
进入redis集群
redis-cli -c
查看redis集群节点
cluster nodes
e70fc91669d2e19929d7058c6f3cbd1227b66fe2 172.38.0.13:6379@16379 master - 0 1644933783590 3 connected 10923-16383
3c1ce8913d0285a5ac709445f0674227196272ad 172.38.0.14:6379@16379 slave e70fc91669d2e19929d7058c6f3cbd1227b66fe2 0 1644933784000 4 connected
2452bc8374d17a92a9609dff068fe22df2df5477 172.38.0.11:6379@16379 myself,master - 0 1644933782000 1 connected 0-5460
b8337f97893ee1ece43e1420c2064f6db55ea20e 172.38.0.15:6379@16379 slave 2452bc8374d17a92a9609dff068fe22df2df5477 0 1644933782189 5 connected
c5f3cb140fcc78d5754651fcb270ea17563155f2 172.38.0.16:6379@16379 slave e917bdffad645b7a4df55513252396e4e71a2cb6 0 1644933784191 6 connected
e917bdffad645b7a4df55513252396e4e71a2cb6 172.38.0.12:6379@16379 master - 0 1644933784191 2 connected 5461-10922