docker学习笔记5

本文详细介绍了Docker的网络设置,包括docker0网桥、容器互联的link方式、自定义网络创建与使用,以及如何实现不同网络间的连通。通过示例展示了如何运行tomcat容器并进行网络配置,探讨了桥接模式、自定义网络的优势,并提到了Redis集群的网络部署方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值