Docker快速入门学习--并快速搭建一个redis集群

Docker学习

学习资料来源于b站狂神

https://www.bilibili.com/video/BV1og4y1q7M4?p=4

docker学习路线。docker->dockerCompose->dockerSwarm->k8s->jenkins

1.docker是什么?

img

随着项目规模不断扩大,开发与运维再环境部署上投入成本也随之增大(尤其是集群)。一种可以连同环境快速打包安装的技术应运而生。

docker可以将不同的jar包和环境打包成镜像,再通过镜像启动一个个容器。由于docker的隔离性,各个容器之间互不影响(容器化技术也就是虚拟化技术,等于构建了一个个的虚拟机)。并且启动速度相对传统的速度得到了大幅提升,秒级启动。

传统的项目部署结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9gyka1wP-1618793599632)(Docker学习.assets/image-20210406144619967.png)]

缺点:1.资源占用过多 2.冗余步骤多 3.启动很慢

容器化技术

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8NMbhcjk-1618793599637)(Docker学习.assets/image-20210406145124711.png)]

容器化其实不是一个完整的虚拟机,类似一个个集装箱在系统支撑上。

容器内的应用直接运行在宿主机上,容器是没有自己内核的,也没有虚拟我们的硬件,所以轻便了。

每个容器是互相隔离的,互不影响。

衍生出DevOps文化

相关扩展

https://blog.csdn.net/qq_41940067/article/details/115382355?spm=1001.2014.3001.5501
docker的基本组成

在这里插入图片描述

镜像(Image)

一个镜像像是一个可执行的包,其中包括运行应用程序所需的所有内容:代码,运行状态,库,环境变量和配置文件。可以将它理解为一个只读的模板,通过运行它启动容器。

容器(Container)

容器是镜像的实例,可以将其启动,关闭,删除,容器之间是相互隔离的,它是可变的,可以理解为在镜像的最上层创建了一个可写层。

仓库(Repository)

仓库就是存放镜像的的地方,就像githup是存放代码的地方,最大的公开仓库是Docker Hup,我们一般从上面pull别人做好的镜像。


docker比vm更快就在于中间没有不用新增一套OS系统

在这里插入图片描述

Docker引擎的基础是Linux容器技术(Linux Container,LCX) ,是在系统内核层次实现的虚拟化,而传统的虚拟化是基于硬件的。

一个容器运行原生的Linux与其它在同一主机容器上的容器共享内核,它运行一个独立的进程,不占用任何其他可执行文件的内存,使其轻量级。

相比之下,虚拟机(VM)运行一个完整的“客户”操作系统,通过虚拟机管理程序对主机资源进行虚拟访问。通常,VM提供的环境比大多数应用程序需要的资源更多

底层原理

Docker 是一个 Client-Server结构的系统,Docker守护进程运行在宿主机上,通过Socket从客户端访问!

DockerServer接收到Docker-Client的指令,就会执行这个指令。

2.docker的安装与使用

官网:https://docs.docker.com/engine/install/centos/
卸载旧版本较旧的Docker版本称为docker或docker-engine。如果已安装这些程序,请卸载它们以及相关的依赖项。

$ sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine

安装yum-utils软件包(提供yum-config-manager 实用程序)并设置稳定的存储库。

$ sudo yum install -y yum-utils

$ sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo

安装最新版本的Docker Engine和容器,或转到下一步以安装特定版本:

$ sudo yum install docker-ce docker-ce-cli containerd.io
//启动Docker
$ sudo systemctl start docker
阿里云镜像加速

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://2kpw79e7.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker run 的流程图

在这里插入图片描述

3.docker的常用命令

官方命令文档:https://docs.docker.com/reference/

帮助命令
docker version  #显示版本信息
docker info  	#显示docker的具体信息
dockers 命令 --help  #帮助命令
镜像命令

docker images 查看所有本地上的主机镜像

[root@localhost rpm]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        8 months ago        13.3kB

#解释
REPOSITORY  镜像的仓库源
TAG			镜像的标签
IMAGE ID	镜像的ID
CREATED		镜像的创建时间
SIZE		镜像的大小

#可选项
Options:
  -a, --all            #显示所有的镜像信息
  -q, --quiet          #只显示镜像的ID
  -aq 				   #一起使用

docker pull 下载镜像

# 下载镜像 docker pull 镜像名:[tag]
[root@localhost rpm]# docker pull mysql:5.7
5.7: Pulling from library/mysql #如果不写tag,默认就是latest
d121f8d1c412: Pull complete 
f3cebc0b4691: Pull complete #分层下载,docker images的核心 ,联合文件系统
1862755a0b37: Pull complete 
489b44f3dbb4: Pull complete 
690874f836db: Pull complete 
baa8be383ffb: Pull complete 
55356608b4ac: Pull complete 
277d8f888368: Pull complete 
21f2da6feb67: Pull complete 
2c98f818bcb9: Pull complete 
031b0a770162: Pull complete 
Digest: sha256:14fd47ec8724954b63d1a236d2299b8da25c9bbb8eacc739bb88038d82da4919
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7 #真实地址

docker pull mysql  #等价于  docker pull docker.io/library/mysql:5.7

删除镜像 docker rmi -f xxx

# 删除镜像
docker rmi -f 镜像id 					#删除指定镜像
docker rmi -f $(docker images -aq)   #递归删除,删除机器上所有镜像
docker rmi -ef 镜像id 镜像id 镜像id	 #批量删除
容器命令

说明:我们有了镜像才可以创建容器,Linux,下载一个centos镜像来测试学习

docker pull centos

新建容器并启动

docker run[可选参数] image

#参数说明
--name "Name" 	容器名字  tomcat1 tomcat2 用于区分容器
-d 				后台方式运行
-it				使用交互方式运行,进入容器查看内容
-p				指定容器的端口 port -p 8080:8080
		-p 主机端口:容器端口 (常用)
		-p 容器端口
-P				随机指定端口

#测试 启动并进入容器
[root@localhost ~]# docker run -it centos /bin/bash
[root@6505aee5845e /]# ls  #查看容器内的centos
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

#从容器中退出主机
[root@6505aee5845e /]# exit
exit
[root@localhost ~]# ls
anaconda-ks.cfg       mysql.cnf  公共  视频  文档  音乐
initial-setup-ks.cfg  start.sh   模板  图片  下载  桌面

列出所有运行中的容器

# docker ps命令
	# 列出当前正在运行的容器
	# -a 带出历史运行过的容器
-n	#显示最近创建的容器
-q	#只显示容器的编号
[root@localhost ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@localhost ~]# docker ps -a

退出容器

exit #直接停止容器并退出
crtl + p + q #容器不停止退出

删除容器

docker rm 容器id  					#删除指定容器
docker rm -f $(docker ps -aq)		 #删除所有的容器

重启、停止、启动容器

docker start 容器id		# 启动容器 
docker restart 容器id		# 重启容器
docker stop 容器id		# 停止容器
docker kill 容器id		# 杀掉容器
其他命令

查看指定容器指定行数命令

docker logs -ft --tail 10 容器id

查看进程

docker top 

查看相关容器详细信息(元数据)

docker inspect 1efaad13b4a3

进入容器

docker  exec -it  容器id /bin/bash
docker attach 容器id

4.docker联合文件

1 Docker镜像是什么

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境的开发软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

2 UnionFS(联合文件系统)

Union文件系统(UnionFS) 是一种分层、轻量级并且高性能的文件系统,他支持对文件系统的修改作为一次提交来层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行集成,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层文件和目录。

3 Docker 镜像加载原理

docker 的镜像实际上由一层一层的文件系统组成,这种层级的文件系统就是联合文件系统(UnionFS)。

在这里插入图片描述

bootfs(boot file system—>boot文件系统) 主要包含bootloader(boot加载器)和kernel(内核),其中boot加载器主要是用来引导加载内核。Linux刚启动时会加载bootfs(boot文件系统),在Docker镜像的最底层是bootfs(boot文件系统)。这一层与典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就存在内存中了,此时内存的使用权已由bootfs(boot文件系统)转交给内核,此时系统就会卸载bootfs(boot文件系统)。

roorfs (root file system—>root文件系统),在bootfs(boot文件系统)之上。包含的就是典型Linux系统中的 /dev ,/proc,/bin ,/etc 等标准的目录和文件。rootfs(root文件系统)就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

对于一个精简的OS(操作系统),rootfs(root文件系统)可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用Host(宿主机)的kernel(内核),自己只需要提供rootfs(root文件系统)就行了,由此可见对于不同的Linux发行版,bootfs(boot文件系统)基本是一致的,rootfs(root文件系统)会有差别,因此不同的发行版(如Ubuntu,Centos等)可以公用bootfs(boot文件系统)。

4 Docker 镜像联合文件系统分层,Tomcat镜像示例

在这里插入图片描述

采用这种分层结构最大的一个好处就是共享资源,比如有多个镜像都从相同的base镜像构建而来,那么宿主机只需要在磁盘上保存一份base镜像,同时内存中也只需要加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。 比如,多个java程序镜像都可以共享同一个jdk镜像(base镜像),而不用每个java程序镜像都自己包含一个jdk镜像,这样虽然jdk镜像有百兆左右,比较大,但是可以共享,因此不会占用很大空间。

5 .镜像和容器的关系

5.1 专业解释

Docker的镜像都是只读的,当容器启动时,一个新的可写层被加载到这个镜像的顶部。这一层我们通常称之为“容器层”,容器层之下的层叫“镜像层”。

图中的顶上两层,是Docker为容器新建的内容,而这两层属于容器范畴。 这两层分别为Docker容器的初始层(Init Layer)与可读写层(Read-Write Layer)。
(1) 初始层:大多是初始化容器环境时,与容器相关的环境信息,如容器主机名,主机(host)信息以及域名服务文件等。
(2) 读写层:Docker容器内的进程只对可读写层拥有写权限,其他层对进程而言都是只读的(Read-Only)。 另外,关于VOLUME以及容器的hosts、hostname、resolv.conf文件等都会挂载到这里。为了节省空间和性能消耗,在docker中进行操作时,一般是首先下载一个最基本的基础镜像,然后我们以这个镜像为基础建立容器,这时就是在基础镜像层上面添加了容器层,此时镜像层+容器层成为了我们要使用的一个新的应用。如果有需要,我们可以将刚刚配置好的镜像层+容器层再打包融合为一个新的镜像(一个新的层级),进而在之后有需要时再在这个新的镜像上面进行操作。

5.2镜像分层

一般镜像都是由一个基本镜像,后面根据dockerfile一层一层安装。最后装上2层容器层形成应用。后面又可以使用docker commit 打包形成新的镜像层如此反复。

如果不同镜像中分层实现有相同的,可以复用该层。

在这里插入图片描述

docker commit -a "runoob.com" -m "my apache" a404c6c174a2  mymysql:v1 

docker commit 命令

OPTIONS说明:

  • **-a 😗*提交的镜像作者;

  • **-c 😗*使用Dockerfile指令来创建镜像;

  • **-m 😗*提交时的说明文字;

  • **-p 😗*在commit时,将容器暂停。

6.容器数据卷

什么是数据卷

当我们在使用docker容器的时候,会产生一系列的数据文件,这些数据文件在我们关闭docker容器时是会消失的,但是其中产生的部分内容我们是希望能够把它给保存起来另作用途的,Docker将应用与运行环境打包成容器发布,我们希望在运行过程钟产生的部分数据是可以持久化的的,而且容器之间我们希望能够实现数据共享。

通俗地来说,docker容器数据卷可以看成使我们生活中常用的u盘,它存在于一个或多个的容器中,由docker挂载到容器,但不属于联合文件系统,Docker不会在容器删除时删除其挂载的数据卷。

特点:

1:数据卷可以在容器之间共享或重用数据

2:数据卷中的更改可以直接生效

3:数据卷中的更改不会包含在镜像的更新中

4:数据卷的生命周期一直持续到没有容器使用它为止
添加数据卷的方式有两种,第一种是直接通过命令行挂载,第二种是通过dockerFile添加
首先来说第一种通过命令行挂载的方式,命令如下:

docker run -it -v  /宿主机绝对路径目录:  /容器内目录  镜像名

这个命令会在宿主机和容器内分别建立两个目录,两个目录是对接的,里面的数据可以共享。如果我们不知道数据卷是否挂载成功时,我们可以通过以下方式来检查数据卷的挂载结果。

docker inspect  容器id

上面的命令可以查看容器的详细情况,命令返回的是JSON格式的字符串,运行命令之后我们在返回的JSON字符串中找到Volumes属性,假如挂载成功的话,Volumes里面显示的绑定结果应该是你在挂载时输入的命令参数 (/宿主机绝对路径目录: /容器内目录 ),如果与你们之前输入的一致的话,证明挂载成功。PS: Volumes里面显示的绑定结果可能有多个,但是只要找到目标结果就可以。挂载之后,当容器停止运行的时候,宿主机上对数据卷做的内容修改是会同步到容器内的。

我们再挂载的时候还可以给数据卷加上权限,假如我们要宿主机只能读取容器的数据卷内容不能修改,我们可以添加只读权限

docker run -it -v /宿主机绝对路径目录 : /容器内目录  :ro 镜像名


至于只写的话我们一般不会用到,要么就是读写,要么就是只读,而且我们可以通过docker inspect 来查看容器的volumesRW来查看容器内数据卷的读写权限。

第二种就是利用dockerFile的形式添加

dockerFile对于docker镜像而言就如同java中某个类的.class文件对应上该类的.java文件。

首先在linux服务器根目录上新建docker文件夹并建立DockerFile文件,使用volume命令(出于可移植可分享的的考虑,用以上 -v /宿主机绝对路径目录 : /容器内目录 的这种方式不能够直接在dockerFile中直接实现,因为宿主机目录是依赖于特定的宿主机的,并不能保证所有的宿主机都存在这样特定的目录)

编写的dockerFile文件如下

FROM  镜像名

VOLUME ["/生成的目录路径"]  -- privileged=true

CMD echo "success build"

CMD /bin/bash

相当于命令行:

 docker run -it -v /宿主机目录路径 :  /生成的目录路径 

然后我们通过命令行docker build执行我们写好的dockerFile文件(docker build和docker commit两个命令都可以建立docker镜像,docker commit 需要在容器内进行,docker build 不需要)

docker build -f  /docker/DockerFile -t  命名空间/镜像名 .

执行后输入docker images就可以发现自己通过DockerFile所build的镜像,里面有挂载数据卷,那么问题来了宿主机所对应的目录是什么呢?同上,我们可以通过docker inspect来查看当前容器的Volumes,里面会有宿主机的数据卷目录。

docker volumes inspect 数据卷名
挂载方式
 docker run -it -v /宿主机目录路径 :  /生成的目录路径 (路径挂载)
 -v 容器内路径(匿名挂载)
 -v 卷名:容器内路径(具名挂载)

7.DockeFile

构建镜像的配置

在这里插入图片描述

1. DockerFile介绍

dockerfile 是用来构建docker镜像的文件!命令参数脚本!

构建步骤:

1、 编写一个dockerfile文件

2、 docker build 构建称为一个镜像

3、 docker run运行镜像

4、 docker push发布镜像(DockerHub 、阿里云仓库)

但是很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像!

查看一下官方是怎么做的,官方既然可以制作镜像,那我们也可以!

2. DockerFile构建过程

1、每个保留关键字(指令)都是必须是大写字母

2、执行从上到下顺序

3、#表示注释

4、每一个指令都会创建提交一个新的镜像层,并提交!

ockerfile文件,这个文件十分简单!

Docker镜像逐渐成企业交付的标准,必须要掌握!

DockerFile:构建文件,定义了一切的步骤,源代码

DockerImages:通过DockerFile构建生成的镜像,最终发布和运行产品。 —传统是用jar包,war包

Docker容器:容器就是镜像运行起来提供服务。

步骤:开发,部署,运维缺一不可!

3.dockerfile常用指令

在这里插入图片描述

4.构建自己的centos7
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="20200809" \
    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-08-09 00:00:00+01:00"
 
CMD ["/bin/bash"]
  • DockerHub 中绝大部分的镜像都是从这个基础镜像过来的 FROM scratch ,然后配置需要的软件和配置来进行构建
  • 那我们就基于官方的这个镜像,再加一些我们需要的环境
FROM centos      # 基础镜像
MAINTAINER Aut<dddd@qq.com>    # 作者信息
 
ENV MYPATH /usr/local    # 创建一个变量 存放一个值
WORKDIR $MYPATH    # 启动后的工作目录,就是进入容器后的默认目录
 
RUN yum -y install vim    # 执行指令安装 vim
RUN yum -y install net-tools    # 执行指令安装 net-tools
 
EXPOSE 80    # 暴露端口
 
CMD echo $MYPATH    # 输出 MYPATH 变量
CMD echo "----end----"    # 输出信息
CMD /bin/bash    # 启动后用bash命令行

构建镜像

 docker build -f dockerfile文件路径 -t 镜像名:[tag] .

测试运行

docker run -it mycentos:0.6

通过 history 命令查看历史,可知镜像是怎样一步一步做出来的

docker history 镜像ID

8**.推送到dockerHub或者阿里云**

8.1发布镜像到 DockerHub
  1. 网址:https://hub.docker.com/ 注册自己的账号

  2. 确定这个账号可以登录

  3. 在我们的服务器上提交自己的镜像

  4. 登录后 docker push

    登录命令

    docker login -u 自己的id
    

给自己镜像打上tag

docker tag 镜像id 名称:tag

push命令

docker push hub上的id/镜像名:[tag]

9.docker网络(容器互联)

清空环境命令

docker rmi -f $(docker images -aq) #清空镜像
docker rm -f $(docker ps -aq) #清空容器
理解Docker0
  • Docker 网络的核心就是 【Docker0】

  • 我们可以用 ip addr查看一下宿主机的 ip 信息分为3个网络

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t72qDqWx-1618793599651)(Docker学习.assets/20200913234902267.png)]

  • docker是如何处理容器网络访问的?

在这里插入图片描述

  • 先运行一个 tomcat 镜像,再查看一下网
 docker run -d -P --name tomcat01 tomcat
  • 查看docker容器网卡
docker exec -it tomcat01 ip addr

在这里插入图片描述

原理:

  • 我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个网卡 docker0桥接模式,使用的技术是evth-pair技术

evth-pair就是一对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连
正因为有这个特性,evth-pair 充当一个桥梁,连接各种虚拟网络设备的
OpenStac,Docker容器之间的连接,OVS的连接,都是使用evth-pair 技术

我们来测试下tomcat01和tomcat 02是否可以ping通?
容器和容器之间是可以ping通的

在这里插入图片描述

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

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

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

  • Docker中的所有的网络接口都是虚拟的。虚拟的转发效率高。(比如内网传递文件)

  • 只要容器删除,对应网桥一对就没了。

–link
  • 思考一个场景,我们编写了一个微服务,database url=ip:,项目不重启,数据库ip换掉了,我们希望可以处理这个问题,可以名字来进行访问容器?

直接通过容器名称ping是ping不通的,需要用link命令

在这里插入图片描述

link命令的本质就是在tomcat03下的host加了host配置

172.18.0.3 tomcat02 312857784cd4
  • 我们现在玩Docker已经不建议使用-link了。
  • 自定义网络,不适用docker0。
  • docker0问题:他不支持容器名连接访问。
自定义网络
  • 查看所有的docker网络:
docker network ls

*网络模式*

  • bridge:桥接docker(默认,自己床架也使用bridge模式)
  • none:不配置网络
  • host:和宿主机共享网络
  • container:容器网络连通(用的少,局限很大)

自定义网络命令:docker network create

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet 
  • –driver bridge 表示使用桥接模式
  • –subnet 192.168.0.0/16 表示子网ip 可以分配 192.168.0.2 到 192.168.255.255
  • –gateway 192.168.0.1 表示网关
  • mynet 表示网络名

查看自己定义的网络

在这里插入图片描述

使用自定义网络 ping 容器的 ip 地址和名称都能 ping 通
我们自定义的网络docker都已经帮我们维护好了对应的关系,推荐我们平时这样使用网络
好处:
redis-不同的集群使用不同的网络,保证集群是安全和健康的
mysql-不同的集群使用不同的网络,保证集群是安全和健康的

网络连通命令
docker network connect 网络名称 容器名

在这里插入图片描述

10.案例:构建一个redis集群

一、创建redis的网络配置
docker network create redis --subnet 172.38.0.0/16
二、创建集群

使用shell脚本创建6个集群

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

通过配置文件启动redis

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

同理启动剩下5台redis后。

创建集群,进入第一台redis主机

docker exec -it redis-01 /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-replicas 1
进入 集群
redis-cli -c
查看结点
cluster nodes

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


通过配置文件启动redis

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


同理启动剩下5台redis后。

创建集群,进入第一台redis主机

docker exec -it redis-01 /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-replicas 1


进入 集群
redis-cli -c
查看结点
cluster nodes


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用docker-compose搭建Redis集群,你可以按照以下步骤进行操作: 1. 创建一个docker-compose.yml文件,并在其中定义Redis集群的服务。你可以使用以下示例作为参考: ``` version: '3' services: redis-6379: image: redis ports: - "6379:6379" volumes: - ./redis-6379:/data command: redis-server /data/redis.conf redis-6380: image: redis ports: - "6380:6379" volumes: - ./redis-6380:/data command: redis-server /data/redis.conf redis-6381: image: redis ports: - "6381:6379" volumes: - ./redis-6381:/data command: redis-server /data/redis.conf redis-6382: image: redis ports: - "6382:6379" volumes: - ./redis-6382:/data command: redis-server /data/redis.conf redis-6383: image: redis ports: - "6383:6379" volumes: - ./redis-6383:/data command: redis-server /data/redis.conf redis-6384: image: redis ports: - "6384:6379" volumes: - ./redis-6384:/data command: redis-server /data/redis.conf ``` 2. 在每个Redis服务的目录中创建一个redis.conf文件,用于配置Redis集群的参数。你可以使用以下示例作为参考: ``` port 6379 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes ``` 3. 运行docker-compose命令来启动Redis集群: ``` docker-compose up -d ``` 这将启动Redis集群的所有服务,并将它们连接在一起。 请注意,以上步骤中的示例仅适用于在本地搭建Redis集群。如果你需要在生产环境中搭建Redis集群,你可能需要进行更多的配置和安全性措施。 #### 引用[.reference_title] - *1* *2* *3* [docker(八)—docker-compose搭建redis集群](https://blog.csdn.net/xiaoqiang65/article/details/121011071)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值