安装Docker(centos7)
- 查看liunx内核版本,命令:
uname -r
,版本必须高于3.10 - 安装一些必要的系统工具(非必需):
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- 添加软件源信息:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 更新 yum 缓存:
sudo yum makecache fast
- 安装 Docker-ce:
sudo yum -y install docker-ce
- 启动 Docker 后台服务
sudo systemctl start docker
- 测试
docker run hello-world
- 配置阿里镜像地址,在
/etc/docker/daemon.json
文件中(没有则新建)中新增如下配置:{ "registry-mirrors":["https://kfwkfulq.mirror.aliyuncs.com"]}
- 卸载
yum remove docker-cerm -rf /var/lib/docker
用Docker运行一个redis
- 拉取镜像
docker pull redis:4.0.7 #版本号可以不写,不写默认拉取的是latest,可以去Docker Hub上看有哪些版本
- 创建一个redis容器并启动服务
docker run -d -v /home/docker/redis/redis.conf:/etc/redis/redis.conf -p 6379:6379 --name docker_redis redis:4.0.7 redis-server /etc/redis/redis.conf-d 表示后台运行容器 -v 表示给容器挂载文件 -p 表示宿主机和容器端口映射 --name 表示给容器取个名字 redis:4.0.7 是镜像的名称 redis-server 是启动redis服务的命令
- 启动容器中redis客户端来连接redis
docker exec -it docker_redis redis-cli
- 其他常用操作
docker images -a #列出本地所有的镜像 docker rmi redis #删除本地的reids镜像 docker ps -a #列出所有容器 docker start docker_redis #启动docker_redis容器 docker stop docker_redis #停止docker_redis容器 docker rm docker_redis #删除docker_redis容器 docker exec -it docker_redis /bin/bash #打开一个docker_redis容器的终端 docker stop $(docker ps -a -q) #stop停止所有容器 docker rm $(docker ps -a -q) #remove删除所有容器 docker cp 容器名:文件路径 宿主机文件路径 #将容器中的文件拷贝出来 docker cp 宿主机文件路径 容器名:文件路径 #将文件拷贝到容器中
本地构建一个redis镜像
- 编写Dockerfile文件
#################################################### # 使用本地的redis包,基于centos,构建一个redis镜像 #################################################### # 指定基础镜像 FROM centos:latest # 定义作者 MAINTAINER zyq # 安装基础工具 RUN yum install -y gcc make # 安装redis WORKDIR /home ADD redis-4.0.1.tar.gz ./ #会自动解压的 WORKDIR ./redis-4.0.1 RUN make PREFIX=/usr/local/bin install #编译安装redis WORKDIR ../ RUN rm -rf redis-4.0.1 RUN yum remove -y make gcc RUN yum clean all #使用本地redis配置文件 ADD redis.conf /etc/redis/redis.conf # 指定与宿主机通信端口 EXPOSE 6379 # 容器启动时启动redis服务 ENTRYPOINT redis-server /etc/redis/redis.conf
关于dockerfile文件的命令参考: - 构建镜像
docker build -t zyq/redis:4.0.1 .
- 创建容器
docker run -d -v /home/docker/redis/log:/var/log/redis -v /home/docker/redis/data:/home/redis/data -p 6379:6379 --name redis zyq/redis:4.0.1
用Docker搭建一个redis集群
-
创建6个redis配置文件,port依次未 6380 到 6385,然后cluster-enable设置为yes
-
用上面的DockerFile文件构建一个redis-cluser镜像,DockerFile文件删除下面内容
# 删掉这些内容 ADD redis.conf /etc/redis/redis.conf EXPOSE 6379 ENTRYPOINT redis-server /etc/redis/redis.conf
然后build镜像
docker build -t zyq/redis-cluster:4.0.1 .
-
用构建好的redis-cluser镜像创建6个节点容器
docker run -d -v /home/docker/redis/redis-cluster/redis6380.conf:/etc/redis/redis.conf --net=host --name redis-6380 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf docker run -d -v /home/docker/redis/redis-cluster/redis6381.conf:/etc/redis/redis.conf --net=host --name redis-6381 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf docker run -d -v /home/docker/redis/redis-cluster/redis6382.conf:/etc/redis/redis.conf --net=host --name redis-6382 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf docker run -d -v /home/docker/redis/redis-cluster/redis6383.conf:/etc/redis/redis.conf --net=host --name redis-6383 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf docker run -d -v /home/docker/redis/redis-cluster/redis6384.conf:/etc/redis/redis.conf --net=host --name redis-6384 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf docker run -d -v /home/docker/redis/redis-cluster/redis6385.conf:/etc/redis/redis.conf --net=host --name redis-6385 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf
-
检查容器创建情况
# 查看所有容器信息 docker ps -a
-
使用redis-trib.rb创建集群
# ip是使用的宿主机的ip ./redis-trib.rb create --replicas 1 192.168.195.88:6380 192.168.195.88:6381 192.168.195.88:6382 192.168.195.88:6383 192.168.195.88:6384 192.168.195.88:6385
这里值得注意的时,如果docker的网络模式不是用的host,则我们只能使用这个方法:。 否则我们在docker宿主机上使用集群是没问题的,但在其他机器上是会出毛病。如下面这种错误
192.168.195.88:6385> set a 1 (error) MOVED 15495 172.17.0.5:6379
关于docker的网络模式可参考:
-
测试
C:\Users\zyq>redis-cli -h 192.168.195.88 -p 6385 -c 192.168.195.88:6385> set a 1 -> Redirected to slot [15495] located at 192.168.195.88:6382 OK
下面使用Redis Cluster 4.0 NAT/Docker搭建一下
- 修改前面6个redis配置的文件,如下:
cluster-announce-ip 192.168.195.88 #宣布的ip,这里用宿主机的IP地址 cluster-announce-port 6380 #宣布的数据端口,对应当前配置文件的端口,不要每个文件都设置的一样 cluster-announce-bus-port 16380 #宣布的集群总线端口,不要每个文件都设置的一样,这里用数据端口+10000
其余5个配置文件做根据各自端口做相应修改,然后开始builddocker build -t zyq/redis-cluster:4.0.1 .
- 用构建好的redis-cluser镜像创建6个节点容器
docker run -d -p 6380:6380 -p 16380:16380 -v /home/docker/redis/redis-cluster/redis6380.conf:/etc/redis/redis.conf --name redis-6380 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf docker run -d -p 6381:6381 -p 16381:16381 -v /home/docker/redis/redis-cluster/redis6381.conf:/etc/redis/redis.conf --name redis-6381 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf docker run -d -p 6382:6382 -p 16382:16382 -v /home/docker/redis/redis-cluster/redis6382.conf:/etc/redis/redis.conf --name redis-6382 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf docker run -d -p 6383:6383 -p 16383:16383 -v /home/docker/redis/redis-cluster/redis6383.conf:/etc/redis/redis.conf --name redis-6383 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf docker run -d -p 6384:6384 -p 16384:16384 -v /home/docker/redis/redis-cluster/redis6384.conf:/etc/redis/redis.conf --name redis-6384 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf docker run -d -p 6385:6385 -p 16385:16385 -v /home/docker/redis/redis-cluster/redis6385.conf:/etc/redis/redis.conf --name redis-6385 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf
- 创建集群
# 查看各个节点容器的ip docker inspect redis-6385 redis-6384 redis-6383 redis-6382 redis-6381 redis-6380 | grep IPA # 使用redis-trib.rb创建集群,ip是使用的容器自身的ip,就是上面查出的那个 ./redis-trib.rb create --replicas 1 172.17.0.2:6380 172.17.0.3:6381 172.17.0.4:6382 172.17.0.5:6383 172.17.0.6:6384 172.17.0.7:6385
如果创建集群的时候卡住,可以看一下防火墙是否添加了 6380-6385 和 16380-16385这几个端口 - 测试
C:\Users\zyq>redis-cli -h 192.168.195.88 -p 6380 -c 192.168.195.88:6380> set a 1 -> Redirected to slot [15495] located at 192.168.195.88:6382 OK
使用docker-compose
Compose是一个用于定义和运行多容器Docker应用程序的工具。有关Compose的详细内容,请参阅github上的。
- 安装docker-compose
# 下载安装文件 curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 添加执行权限: chmod +x /usr/local/bin/docker-compose # 测试是否安装成功: docker-compose --version
- 编写docker-compose.yml文件:q
version: '3' services: redis0: container_name: redis-6380 image: zyq/redis-cluster:4.0.1 ports: - 6380:6380 - 16380:16380 volumes: - /home/docker/redis/redis-cluster/redis6380.conf:/etc/redis/redis.conf command: redis-server /etc/redis/redis.conf redis1: container_name: redis-6381 image: zyq/redis-cluster:4.0.1 ports: - 6381:6381 - 16381:16381 volumes: - /home/docker/redis/redis-cluster/redis6381.conf:/etc/redis/redis.conf command: redis-server /etc/redis/redis.conf redis2: container_name: redis-6382 image: zyq/redis-cluster:4.0.1 ports: - 6382:6382 - 16382:16382 volumes: - /home/docker/redis/redis-cluster/redis6382.conf:/etc/redis/redis.conf command: redis-server /etc/redis/redis.conf redis3: container_name: redis-6383 image: zyq/redis-cluster:4.0.1 ports: - 6383:6383 - 16383:16383 volumes: - /home/docker/redis/redis-cluster/redis6383.conf:/etc/redis/redis.conf command: redis-server /etc/redis/redis.conf redis4: container_name: redis-6384 image: zyq/redis-cluster:4.0.1 ports: - 6384:6384 - 16384:16384 volumes: - /home/docker/redis/redis-cluster/redis6384.conf:/etc/redis/redis.conf command: redis-server /etc/redis/redis.conf redis5: container_name: redis-6385 image: zyq/redis-cluster:4.0.1 ports: - 6385:6385 - 16385:16385 volumes: - /home/docker/redis/redis-cluster/redis6385.conf:/etc/redis/redis.conf command: redis-server /etc/redis/redis.conf
- 启动
docker-compose up -d