admin管理员组文章数量:1635671
目录
一 容器数据卷
1.1使用数据卷
1.2部署MySQL
1.3具名和匿名挂载
1.4dockerfile
1.5数据卷容器
二 dockerfile详解
2.1 dockerfile的构建过程
2.2常用的指令
2.3 实战测试
2.4 命令区别
2.5 tomcat实战
2.6 小结
三 docker 网络
3.1 理解网络docker0
3.2 网卡网络拓补图
3.3 自定义网络
3.4 网络连通
四 部署redis集群
一 容器数据卷
如果数据在容器中,一旦删除容器,则数据丢失 : 需求:数据可以持久化
容器之间有一个数据共享的技术,docker容器产生的数据同步到本地!
这就是卷技术,目录的挂载,将我们的容器挂载到linux上!
总结:容器持久化和同步操作!容器间也是可以数据共享的!
1.1使用数据卷
方式一 :直接使用命令来挂载 docker -v
docker run -it -v主机目录:/容器目录 [root@master ~]# docker run -it -v /home/ceshi:/home centos /bin/bash ##将主机home/ceshi 挂在给容器的home [root@master home]# docker inspect ae7eafb68bdb ##查看容器详细信息 "Mounts": [ { "Type": "bind", "Source": "/home/ceshi", ##/home/ceshi 和home相当于一个地址 一个存储 "Destination": "/home", "Mode": "", "RW": true, "Propagation": "rprivate" } ], ##在宿主机修改挂载点的文件,容器内文件依然是同步的 [root@ae7eafb68bdb home]# rm * rm: cannot remove 'app': Is a directory ##容器内的文件不能删除 也就是映射关系 而不是同步关系
1.2部署MySQL
##获取镜像
[root@master ~]# docker pull mysql ##下载最新版的mysql
##运行容器 需要数据挂载 ##安装mysql需要配置密码 可以在dockerhub查看官方配置
-d后台运行
-p端口映射
-v卷挂载
-e 环境配置
-name 容器名字
[root@master ~]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=1234 \
--name mysql01 mysql
a0cb263085b31f2acd549aea25c6fd493d648c1f6eef2794d16ed42d770779db
1.3具名和匿名挂载
##匿名挂载 -v 容器内路径 docker run -d --name tomcat01 -v /etc/tomcat tomcat [root@master mysql]# docker volume list ##查看所有卷的情况 DRIVER VOLUME NAME local bab15bf96f32a57597f2ee09bbb18c8d4bf4bda64a5067ff1427351c6d6af9db local c0f70376371eaaed436633aab77089588ea34866f61d4bda2e8f32b8bec4c925 local ed1647ae7801076cb84572c1f7b1314bda37264dd1d3cb637ed041b3ec8b080a ##每一个local就是一个真是存在的目录 [root@master mysql]# docker inspect 1e6604bea643 "Mounts": [ { "Type": "volume", "Name": "bab15bf96f32a57597f2ee09bbb18c8d4bf4bda64a5067ff1427351c6d6af9db", "Source": "/var/lib/docker/volumes/bab15bf96f32a57597f2ee09bbb18c8d4bf4bda64a5067ff1427351c6d6af9db/_data", ##未指定的路径 "Destination": "/etc/tomcat", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" }
具名挂载 docker run -d --name nginx02 -v juming:/etc/nginx nginx ##-v 后面就是名字 juming [root@master _data]# docker volume ls DRIVER VOLUME NAME local bab15bf96f32a57597f2ee09bbb18c8d4bf4bda64a5067ff1427351c6d6af9db local c0f70376371eaaed436633aab77089588ea34866f61d4bda2e8f32b8bec4c925 local d2c148f0bc9ec81c17fdb65733d6f620c0be5985fcb8f8311212134ee58fe8e1 local ed1647ae7801076cb84572c1f7b1314bda37264dd1d3cb637ed041b3ec8b080a local juming [root@master _data]# docker volume inspect juming [ { "CreatedAt": "2022-09-28T21:51:30+08:00", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/juming/_data", "Name": "juming", "Options": null, "Scope": "local" } ] ##docker容器没有指定目录下的 时候目录就是挂在在mountpoint所对应的路径下
大多数情况是使用具名挂载
拓展:
rw 可读可写 ro只读
一旦这个设置容器权限 容器对我们挂载出来就有限定了!
docker run -d --name nginx02 -v juming:/etc/nginx ro nginx
docker run -d --name nginx02 -v juming:/etc/nginx rw nginx
ro只能通过宿主机来写
1.4dockerfile
dockerfile就是用来构建docker 镜像的构建文件!命令脚本!
通过脚本来生成一个镜像,镜像是一层层的,
##创建一个dockersfile文件 ##文件中的内容(指令【大写】 参数) ##这里面的每一个命令都是一层 [root@master ~]# cat dockerfile FROM centos VOLUME ["/volume01","/volume02"] ##匿名挂载 CMD echo"******and*******" CMD /bin/bash [root@master ~]# docker build -f dockerfile -t huawei:1.0 . Sending build context to Docker daemon 5.765MB Step 1/4 : FROM centos ---> 5d0da3dc9764 Step 2/4 : VOLUME ["volume01","volume02"] ---> Using cache ---> 9ca99510472a Step 3/4 : CMD echo"******and*******" ---> Using cache ---> 2e48d9d92bf0 Step 4/4 : CMD /bin/bash ---> Using cache ---> 474bed9878c1 Successfully built 474bed9878c1 Successfully tagged huawei:1.0 [root@master ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE huawei 1.0 474bed9878c1 4 minutes ago 231MB tomcat01 1.0 2edf7393e8d1 47 hours ago 480MB mysql latest 43fcfca0776d 13 days ago 449MB nginx latest 2d389e545974 2 weeks ago 142MB [root@master ~]# docker run -it 474bed9878c1 /bin/bash [root@0f7d9eb397bc /]# ls -l total 0 lrwxrwxrwx 1 root root 7 Nov 3 2020 bin -> usr/bin drwxr-xr-x 5 root root 360 Sep 28 14:33 dev drwxr-xr-x 2 root root 6 Sep 28 14:33 volume01 ## 这个就是生成镜像是自动挂载的目录 数据卷目录 drwxr-xr-x 2 root root 6 Sep 28 14:33 volume02 [root@master ~]# docker inspect interesting_mirzakhani ##查看卷挂在的路径 "Mounts": [ { "Type": "volume", "Name": "a8d00958cab1013879e96fb1dc8048cc1fd242ec4382acdafd4fe0c283582dea", "Source": "/var/lib/docker/volumes/a8d00958cab1013879e96fb1dc8048cc1fd242ec4382acdafd4fe0c283582dea/_data", "Destination": "/volume01", "Driver": "local", "Mode": "", "RW": true, "Propagation": ""
这种方式使用会很多,未来会有很多自己构建镜像
假设构建镜像没有挂在卷 要手动镜像挂载 -v容器路径
1.5数据卷容器
多个mysql数据同步
##启动三个容器
[root@master ~]# docker run -it --name docker01 huawei:1.0 /bin/bash [root@master ~]# docker run -it --name docker02 --volumes-from docker01 huawei:1.0 /bin/bash [root@master ~]# docker run -it --name docker03 --volumes-from docker01 huawei:1.0 /bin/bash ##docker01的挂载的数据同步到了docker02上 ## --volumes-from 通过实现容器间的文件共享 ##数据共享 删除docker01 依然可以访问创建的文件夹 说明不是共享机制 而是一种备份机制 即拷贝
多个mysql实现数据共享
#端口指定要不一样 #他们在/etc/mysql/conf.d /var/lib/mysql 文件相同 [root@master ~]# docker run -d -p 3310:3306 -v /home/mysql/conf/:/etc/mysql/conf.d -v /home/mysql/data/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 --name mysql1 mysql [root@master ~]# docker run -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD=123 --name mysql2 --volumes-from mysql1 mysql [root@master ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7c5ffb94314f mysql "docker-entrypoint.s…" 6 seconds ago Up 5 seconds 33060/tcp, 0.0.0.0:3309->3306/tcp, :::3309->3306/tcp mysql2 5fe135b20f1c mysql "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 33060/tcp, 0.0.0.0:3310->3306/tcp, :::3310->3306/tcp mysql1
结论:
容器之间的配置信息的传递,容器的生命周期一直持续到没有容器使用为止
但是一旦持久化化了到了 这个时候本地的数据不会被删除
二 dockerfile详解
dockerfile 是用来构建docker镜像 命令参数参数
构建步骤:
1.编写一个dockerfile文件按
2.dockerbuild 构建成为一个镜像
3.docekr run 运行镜像
4.dockers push 发布镜像(dockerhub 阿里云镜像仓库)
查看官方 centos的镜像dockerfile文件
很多官方镜像都是基础包,很多功能都是没有的,我们通常会自己搭建镜像
2.1 dockerfile的构建过程
基础知识:
1.每个保留关键字(指令)都必须是大写字母
2.执行是从上到下顺序执行
3.#表示注释
4.每一个指令都会创建提交一个镜像层,并提交
dockerfile是面向开发的我们呢以后要发布项目,做镜像,就需要编写dockerfile文件 !
docekr镜像 逐渐成为了企业交付的标准,必须要掌握!
dockerfile:构建文件,定义了一切的步骤,源代码
dockerimages:同通过dockerfile构建的生成的镜像 最终发布和运行的产品
docker容器:容器就是镜像运行起来提供服务器
2.2常用的指令
FORM 基础镜像 如centos 乌班图等等 一切从这里开始构建 MAINTAINER 镜像是谁写的 姓名+邮箱 RUN 镜像构建的时候需要运行命令 ADD 步骤,tomcat镜像,这个tomcat压缩包!添加内容 WORKDIR 镜像的工作目录 VOLUME 挂载主机目录 EXPOSE 暴露端口配置
CMD 指定这个容器启动要运行的命令,只有最后一个生效,可被生效 ENTRYPOINT 指定这个容器启动的是运行的命令,可以追加命令 OUBUILD 当构建一个被继承dockerfile 这个时候就会运行onbuild的命令 触发指令 COPY 类似ADD,将我们文件拷贝到镜像 ENV 构建的时候设置环境变量
2.3 实战测试
docker bub中99%的镜像都是从这个基础镜像过来的 FROM scratch,让不会配置需要的软件
##官方的镜像源 FROM scratch ADD centos-7-x86_64-docker.tar.xz / LABEL \ org.label-schema.schema-version="1.0" \ org.label-schema.name="CentOS Base Image" \ org.label-schema.vendor="CentOS" \ org.label-schema.license="GPLv2" \ org.label-schema.build-date="20201113" \ org.opencontainers.image.title="CentOS Base Image" \ org.opencontainers.image.vendor="CentOS" \ org.opencontainers.image.licenses="GPL-2.0-only" \ org.opencontainers.image.created="2020-11-13 00:00:00+00:00" CMD ["/bin/bash"]
创建一个自己的centos
##step1 编辑dockerfile文件 [root@yunpc ~]# cat mydockerfile FROM centos7 MAINTAINER huawei<jiushiniu@huawei> ##邮箱姓名 ENV MYPATH /usr/local ##环境变量 RUN yum -y install vim ##运行命令 EXPOSE 80 #暴露端口 CMD "/bin/bash" ##指定解释器 ##step 2通过文件构建镜像 [root@yunpc ~]# docker build -f mydockerfile -t centos:1.0 . ##文件路径 ##名称和标签 ##当前路径 Sending build context to Docker daemon 31.74kB Step 1/6 : FROM centos7 ##下载镜像 ---> 5d0da3dc9764 Successfully built 7884488c2aff ##成功返回successfully Successfully tagged centos:latest ##修改docker镜像名子和版本号 用于无法删除镜像 [root@yunpc ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos 0.1 55ed338c20e6 5 minutes ago 231MB centos <none> 5d0da3dc9764 13 months ago 231MB [root@yunpc ~]# docker tag 5d0da3dc9764 centos:0.0 ##step3 测试 [root@yunpc ~]# docker run -it centos:2.0 /bin/bash [root@d49bf8005a16 local]# pwd ##定义的工作目录 /usr/local [root@d49bf8005a16 local]# ##docker history 镜像id 可以查看镜像是如何构成的
2.4 命令区别
CMD ##指定这个容器启动的时候要运行的命令,只有最后一个才会生效,可被替代
CMD ["pwd"]
CMD["ls","-a”]
启动镜像就执行命令但是只会执行最后一个命令
docker run -it centos:2.0 -l ##运行l命令 不追加
ENTRYPOINT ##指定这个容器起订时候要运行的命令。可以追加命令
ENTRYPOINT ["pwd"]
ENTRYPOINT["ls","-a”]
docker run -it centos:2.0 -l
此输出命令则是为 ls -al 则是可以直接追加命令
2.5 tomcat实战
1.准备tomcat和jdk的压缩包
2.编写dockerfile 文件 官方命令Docekrfile ,build 会自动寻找这个文件 就不需要 -f了
[root@yunpc ~]# cat Dockerfile FROM centos:7 MAINTAINER huawei<jiushiniu@huawei> ENV MYPATH /usr/local WORKDIR $MYPATH ##默认工作路径 ADD apache-tomcat-10.0.27.tar.gz /usr/local ##解压tomcat包 并解压到目录 ADD jdk15.tar.gz /usr/loacl ENV JAVA_HOME /usr/local/jdk15 ##添加环境变量 ENV CLASSPATH $JAVA_HOME/lie/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/loacl/apache-tomcat-10.0.27 ENV CATALINA_BASH /usr/loacl/apache-tomcat-10.0.27 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin EXPOSE 8080 ##暴露8080端口 CMD /usr/loacl/apache-tomcat-10.0.2/bin/startup.sh && tail -F /url/local//usr/loacl/apache-tomcat-10.0.2/bin/logs/cataline.out ##执行命令 可以&&无线叠加命令
3 测试
[root@yunpc ~]# docker run -d -p 9090:8080 --name tomcatceshi -v /root/tomcat/test:/usr/loacl/apache-tomcat-10.0.27/webapps/test -v /root/tomcat/tamcatlogs:/usr/local/apache-tomcat-10.0.27/logs tomcat:1.0 ##后台运行 起名字 挂载
4.发布镜像
Dockerhub
[root@yunpc ~]# docker login --help Usage: docker login [OPTIONS] [SERVER] Log in to a Docker registry. If no server is specified, the default is defined by the daemon. Options: -p, --password string Password --password-stdin Take the password from stdin -u, --username string Username ##首先注册dockehub账号 使用-u 登录 [root@yunpc ~]# docker push huawei/tomcat:1.0
2.6 小结
三 docker 网络
3.1 理解网络docker0
[root@yunpc ~]# ip a 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 ##回环地址 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 ##腾讯云内部地址 link/ether 52:54:00:94:2b:45 brd ff:ff:ff:ff:ff:ff inet 10.0.4.15/22 brd 10.0.7.255 scope global eth0 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default ##docker地址 link/ether 02:42:74:77:40:ac brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
## docker 是如何处理容器网络访问的?
[root@yunpc ~]# docker run -d -P --name tomcat01 tomcat ##运行tomcat [root@yunpc ~]# docker exec -it tomcat01 hostname -i 172.17.0.2 ##查看容器地址
##linux是否能ping通容器内部地址
[root@yunpc ~]# 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.075 ms 64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.049 ms
linux可以ping通容器内部地址
原理:每启动一个docker容器,docker容器都会分配一个ip,我们只要安装了docker,就会有一个网卡docker0。使用的evth-pair技术(evth-pair充当一个桥梁),连接各种网络设备。
3.2 网卡网络拓补图
即所有的容器都是使用的docker0这一个路由器
[root@yunpc ~]# docker network list ##查看docker所有网卡 NETWORK ID NAME DRIVER SCOPE b391e44eb09e bridge bridge local 729ccc4a642b host host local 77bbf460ea01 none null local [root@yunpc ~]# docker network inspect b391e44eb09e ##docker0网卡详细信息 "Gateway": "172.17.0.1" ##网关地址 "Containers": { "edacc7472abaf03c5f854e2786ef5152f2c94f535bd3d027f73a68a324353bf8": { "Name": "tomcat01", ##tomcat01地址 "EndpointID": "d4c28aec788c3ac6f0a337df82bb328d76cae5e5cd877c2e015685574287531d", "MacAddress": "02:42:ac:11:00:02", "IPv4Address": "172.17.0.2/16", "fa28497d9bd9e873c89b2a03a391b187b801238a302124731a32dcb3ad6afe67": { "Name": "tomcat02", ##tomcat02地址 "EndpointID": "505e68fee962e90ee2f9c6d086098e622dd584071d64f714c4a34e39db97eb0b", "MacAddress": "02:42:ac:11:00:03", "IPv4Address": "172.17.0.3/16", "IPv6Address": ]
3.3 自定义网络
pc ~]# docker network list ##查看docker所有网卡 NETWORK ID NAME DRIVER SCOPE b391e44eb09e bridge bridge local 729ccc4a642b host host local 77bbf460ea01 none null local
- bridge: 桥接 docker(默认 自己创建最好也用桥接)
- none: 不配置网络
- host: 和宿主机共享网络
- container: 容器内网络联通
##直接输入启动命令 --net bridge 而这是就是默认的docker0
[root@yunpc ~]# docker run -d -P --name python01 python
##docker0的特点是,默认 域名不能访问 --link可以打通连接(相当于写hosts文件)
[root@yunpc ~]# 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
## 创建一个自定义的网络
[root@yunpc ~]# docker network create --driver bridge --subnet 8.0.0.0/8 --gateway 8.0.0.1 huawei cd79b1586e6e0d55b7f2ba83c9479b20d425e4066f91bd791f847f898d92ead3 ##工作模式为桥接,分配网段为8.0.0.0/8 网关地址为8.0.0.1 名称为huawei [root@yunpc ~]# docker network ls NETWORK ID NAME DRIVER SCOPE b391e44eb09e bridge bridge local 729ccc4a642b host host local cd79b1586e6e huawei bridge local 77bbf460ea01 none null local [
## 测试
[root@yunpc ~]# docker run -dit --name centos01 --net huawei centos [root@yunpc ~]# docker run -dit --name centos02 --net huawei centos ##指定启动huawei网卡分配 [root@yunpc ~]# docker exec -it centos01 ping centos02 PING centos02 (8.0.0.3) 56(84) bytes of data. 64 bytes from centos02.huawei (8.0.0.3): icmp_seq=1 ttl=64 time=0.079 ms 64 bytes from centos02.huawei (8.0.0.3): icmp_seq=2 ttl=64 time=0.045 ms 64 bytes from centos02.huawei (8.0.0.3): icmp_seq=3 ttl=64 time=0.060 ms ##自定义的网络 是修复docker0缺点的 是可以直接ping容器的名字 ##推荐使用自定义使用网络 不同的集群使用不同的网络,保证集群的健康,且高可用。
3.4 网络连通
##创建容器centos03 使用默认网卡即docker0 ##此时centos01 02 在8段 centos03 在172.17段不互通 [root@yunpc ~]# docker network connect huawei centos03 ##连通网卡,centos3和huawei这个网卡连通 [root@yunpc ~]# docker network inspect huawei ##查看网卡 发现centos03被分配了一个地址 "Containers": { "Name": "centos03", "EndpointID": "191542313d65f80d2e6be46f41ebcdd455e37ec08b99bb0a44a179d872ac4a08", "MacAddress": "02:42:08:00:00:04", "IPv4Address": "8.0.0.4/8", } [root@yunpc ~]# docker exec -it centos03 ip a ##查看centos03地址 103: eth0@if104: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 105: eth1@if106: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 inet 8.0.0.4/8 brd 8.255.255.255 scope global eth1 [root@yunpc ~]# docker exec -it centos02 ping centos03 ##测试连通性 PING centos03 (8.0.0.4) 56(84) bytes of data. 64 bytes from centos03.huawei (8.0.0.4): icmp_seq=1 ttl=64 time=0.072 ms
##一个容器 两个ip地址 解决不同网络内容器的连接问题
四 部署redis集群
step1 : 创建一张网卡名为reids [root@yunpc ~]# docker network create redis --subnet 172.19.0.0/16 --gateway 172.19.0.1 step2: 创建redis集群脚本 [root@yunpc redis]# cat /root/redis.sh #!/bin/bash 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.19.0.1${port} cluster-announce-port 6379 cluster-announce-bus-port 16379 appendonly yes EOF done --step3 :创建redis容器 端口映射 挂载卷 指定ip 启动配置文件 [root@yunpc conf]# docker run -d -p 6371:6379 -p 16371:16379 --name redis01 -v /mydata/redis/node-1/data:/data -v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf --net redis --ip 172.19.0.11 redis redis-server /etc/redis/redis.conf 314cb775a12758f86d1739b73aa3547ce5c6c409a255532d914ad0e6aa39055a --step4 : 创建集群 [root@yunpc ~]# cat docker_redis.sh ##一键部署集群点 #!/bin/bash for i in $(seq 1 6) do docker run -d -p 637${i}:6379 -p 1637${i}:16379 --name redis${i} -v /mydata/redis/node-${i}/data:/data -v /mydata/redis/node-${i}/conf/redis.conf:/etc/redis/redis.conf --net redis --ip 172.19.0.1${i} redis redis-server /etc/redis/redis.conf done ##进入redis01 root@d45b4719c71d:/data# redis-cli --cluster create 172.19.0.11:6379 172.19.0.13:6379 172.19.0.14:6379 172.19.0.15:6379 172.19.0.16:6379 172.19.0.12:6379 --cluster-replicas 1 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. --step5 : 测试 进入redis1 root@3c4d3fed8012:/data# redis-cli -c 127.0.0.1:6379> CLUSTER nodes 67587dad8f210dc5da6857cf265a5dddb84be5c3 172.19.0.15:6379@16379 slave b7995e7acf2a044729118a41c193709f999255dd 0 1665932508589 3 connected b7995e7acf2a044729118a41c193709f999255dd 172.19.0.14:6379@16379 master - 0 1665932509000 3 connected 10923-16383 2dfe471cf2b60fd79eb643cd8ab5fb35d30dc8ff 172.19.0.11:6379@16379 myself,master - 0 1665932508000 1 connected 0-5460 d5eb125081886366a13c6c10e236652d56c7e2bc 172.19.0.12:6379@16379 slave 6f251a3ab961c1c24057b2d442c461a1015cc4d2 0 1665932509091 2 connected 6f251a3ab961c1c24057b2d442c461a1015cc4d2 172.19.0.13:6379@16379 master - 0 1665932509592 2 connected 5461-10922 96619c6aea13ec26d3b0b9e1cc704e05662ef7eb 172.19.0.16:6379@16379 slave 2dfe471cf2b60fd79eb643cd8ab5fb35d30dc8ff 0 1665932510094 1 connected 127.0.0.1:6379> set a b ##输入值 -> Redirected to slot [15495] located at 172.19.0.14:6379 OK ##停止redis4 root@3c4d3fed8012:/data# redis-cli -c 127.0.0.1:6379> get a ## 获取a值 -> Redirected to slot [15495] located at 172.19.0.15:6379 "b" ##可以获取 所有15是一直的从机 集群则高可用
使用docker之后 所有的集群部署都会变得简单起来
版权声明:本文标题:docker进阶篇 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1729205415a1189972.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论