uname -r
,版本必須高於3.10sudo 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
sudo yum makecache fast
sudo yum -y install docker-ce
sudo systemctl start docker
docker run hello-world
/etc/docker/daemon.json
文件中(沒有則新建)中新增以下配置: { "registry-mirrors":["https://kfwkfulq.mirror.aliyuncs.com"] }
yum remove docker-ce rm -rf /var/lib/docker
docker search redis #查找redis的鏡像 docker pull redis:4.0.7 #版本號能夠不寫,不寫默認拉取的是latest,能夠去Docker Hub上看有哪些版本
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服務的命令
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包,基於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文件的命令參考: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
建立6個redis配置文件,port依次未 6380 到 6385,而後cluster-enable設置爲yeshtml
用上面的DockerFile文件構建一個redis-cluser鏡像,DockerFile文件刪除下面內容mysql
# 刪掉這些內容 ADD redis.conf /etc/redis/redis.conf EXPOSE 6379 ENTRYPOINT redis-server /etc/redis/redis.conf
而後build鏡像linux
docker build -t zyq/redis-cluster:4.0.1 .
用構建好的redis-cluser鏡像建立6個節點容器git
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
檢查容器建立狀況github
# 查看全部容器信息 docker ps -a
使用redis-trib.rb建立集羣redis
# 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,則咱們只能使用這個方法:Redis Cluster 4.0 NAT/Docker。 不然咱們在docker宿主機上使用集羣是沒問題的,但在其餘機器上是會出毛病。以下面這種錯誤sql
192.168.195.88:6385> set a 1 (error) MOVED 15495 172.17.0.5:6379
關於docker的網絡模式可參考:Docker的4種網絡模式mongodb
測試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
cluster-announce-ip 192.168.195.88 #宣佈的ip,這裏用宿主機的IP地址 cluster-announce-port 6380 #宣佈的數據端口,對應當前配置文件的端口,不要每一個文件都設置的同樣 cluster-announce-bus-port 16380 #宣佈的集羣總線端口,不要每一個文件都設置的同樣,這裏用數據端口+10000其他5個配置文件作根據各自端口作相應修改,而後開始build
docker build -t zyq/redis-cluster:4.0.1 .
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
Compose是一個用於定義和運行多容器Docker應用程序的工具。有關Compose的詳細內容,請參閱github上的docker Compose源碼。shell
# 下載安裝文件 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
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
docker pull mysql docker run -p 3306:3306 --name mysql8 -v /home/docker/mysql/conf:/etc/mysql/conf.d -v /home/docker/mysql/logs:/logs -v /home/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql docker exec -it mysql8 /bin/bash mysql -u root -p
docker pull mongo docker run -p 27017:27017 --name mongodb -v /home/docker/mongodb/data:/data -d mongo docker exec -it mongodb /bin/bash mongo