0
点赞
收藏
分享

微信扫一扫

docker学习笔记5

Java架构领域 2022-02-16 阅读 61

一、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
  • 进入容器安装
apt update && apt install -y iproute2

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地址。

发现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
docker exec -it tomcat02 /bin/bash
 apt update && apt install -y iproute2
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
 apt install iputils-ping
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
docker exec -it tomcat02 ping tomcat01
ping: tomcat01: Name or service not known
docker run -d -P --name tomcat03 --link tomcat02 tomcat
apt update && apt install iputils-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
[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
 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文件信息

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 --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 --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
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
docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
8332af64f234   bridge    bridge    local
7abdac590e2b   host      host      local
e7525fc2fc6a   mynet     bridge    local
f0c3788f5cda   none      null      local
 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": {}
    }
]
docker run -d -P --name tomcat-net-01 --net mynet tomcat
docker run -d -P --name tomcat-net-02 --net mynet tomcat
[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容器的详细网络信息。

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

在这里插入图片描述

root@3d049ffd705b:/usr/local/tomcat# ping tomcat-net-01
ping: tomcat-net-01: Name or service not known

在这里插入图片描述

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
 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
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": {}
    }
]

用于产生从某个数到另外一个数之间的所有整数

[root@zhouhao ~]# seq 1 10
1
2
3
4
5
6
7
8
9
10

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 --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
 --ip string                      IPv4 address (e.g., 172.30.100.104)
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
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
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
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
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
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
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集群

docker exec -it redis-1 /bin/sh
  • redis容器中无/bin/bash命令,有/bin/sh命令
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-cli -c
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
举报

相关推荐

0 条评论