docker的網絡模式
網橋模式每次重啟容器都有可能導致容器ip地址變化,需要固定ip的自己自定義網絡,這里介紹的是默認網絡模式
docker創建容器
docker run --name redis6379 -p 6379:6379 -p 16379:16379 -v /etc/redis/redis6379:/etc/redis -d --restart=always redisContainerID redis-server /etc/redis/redis.conf --appendonly yes --requirepass 123456docker run --name redis6378-p 6378:6379 -p 16378:16379 -v /etc/redis/redis6378:/etc/redis -d --restart=always redisContainerID redis-server /etc/redis/redis.conf --appendonly yes --requirepass 123456docker run --name redis6377-p 6377:6379 -p 16377:16379 -v /etc/redis/redis6377:/etc/redis -d --restart=always redisContainerID redis-server /etc/redis/redis.conf --appendonly yes --requirepass 123456
手動創建目錄:
進入宿主主機/etc/redis/目錄下分別創建redis6379 redis6378 redis6377文件夾
mkdir redis6379 redis6378 redis6377
由于這里沒有配置網絡三個redis容器ip是docker局域網內部隨機分配的,列如IP分配的是
redis6379 172.17.0.9
redis6378 172.17.0.8
redis6377 172.17.0.7
參數:
–name:設置容器名稱,如 --name redis6379 當容器創建成功docker ps -a 就能找到名字為redis6379的容器
-p:端口映射 宿主機端口:容器端口
-v:文件目錄映射 宿主機目錄:容器目錄 這樣不用每次進入容器去操作文件,可以直接再宿主主機目錄下操作 注意(坑): redis.conf有些配置項需要填寫路徑不能寫宿主主機的路徑 ,仍要寫容器的路徑
-d:容器啟動 --restart=always 每次隨著docker啟動而啟動
redis-server /etc/redis/redis.conf :redis啟動以/etc/redis/redis.conf路徑下的配置文件啟動
–appendonly :開啟持久化
–requirepass:設置密碼
配置文件:
分別進入redis6379 redis6378 redis6377目錄執行一下命令
wget http://download.redis.io/redis-stable/redis.conf
下載配置文件
如果文件過多,可以先下載一個然后執行一下命令(awk,xargs二選一,根據自己喜好)
awk:
echo 6378:6377| awk 'BEGIN{RS="[:]";} {cmd="cp /etc/redis/redis6379/redis.conf /etc/redis/redis"$0;system(cmd)}'
xargs:
echo {6377..6378}|xargs -n1 | xargs -I{} cp /etc/redis/redis6379/redis.conf /etc/redis/redis{}/
設計
redis6379 172.17.0.9 主節點
redis6378 172.17.0.8 從節點
redis6377 172.17.0.7 從節點
主節點(redis6379 172.17.0.9)配置文件:
主要修改:
cluster-enabled yes
protected-mode yes 如果沒有設置密碼則只能本地主機能訪問
port 6379 容器端口
bind 172.17.0.9
#daemonize yes 這個不知道為什么我開啟 redis容器啟動不起來,這里我是關閉的,這個如果開啟需要配置pidfile
#pidfile:/etc/redis/pidfile.pid 記錄后臺自起進程PID
logfile "/etc/redis/redis.log" 這里要寫容器的路徑不是宿主主機,但是要在映射的宿主主機目錄下創建redis.log文件或者進入該容器在/etc/redis/下創建redis.log
dir /etc/redis/data 這里要寫容器的路徑不是宿主主機,但是要在映射的宿主主機目錄下創建data目錄或者進入該容器在/etc/redis/下創建data目錄
#replicaof 172.17.0.9 6379 由于這里是主節點所欲不需要配置該項
#masterauth 123456 由于這里是主節點所欲不需要配置該項
requirepass 123456
appendonly yes
cluster-config-file /etc/redis/nodes-6379.conf
cluster-node-timeout 15000
從節點1(redis6378 172.17.0.8)配置文件:
主要修改:
cluster-enabled no (坑)這里從節點不能開啟
protected-mode yes 如果沒有設置密碼則只能本地主機能訪問
port 6379 容器端口
bind 172.17.0.8
#daemonize yes 這個不知道為什么我開啟 redis容器啟動不起來,這里我是關閉的,這個如果開啟需要配置pidfile
#pidfile:/etc/redis/pidfile.pid 記錄后臺自起進程PID
logfile "/etc/redis/redis.log" 這里要寫容器的路徑不是宿主主機,但是要在映射的宿主主機目錄下創建redis.log文件或者進入該容器在/etc/redis/下創建redis.log
dir /etc/redis/data 這里要寫容器的路徑不是宿主主機,但是要在映射的宿主主機目錄下創建data目錄或者進入該容器在/etc/redis/下創建data目錄
replicaof 172.17.0.9 6379 由于這里是主節點所欲不需要配置該項
masterauth 123456 由于這里是主節點所欲不需要配置該項
requirepass 123456
appendonly yes
cluster-config-file /etc/redis/nodes-6378.conf
cluster-node-timeout 15000
從節點2(redis6377 172.17.0.7)配置文件:
主要修改:
cluster-enabled yes
protected-mode yes 如果沒有設置密碼則只能本地主機能訪問
port 6379 容器端口
bind 172.17.0.9
#daemonize yes 這個不知道為什么我開啟 redis容器啟動不起來,這里我是關閉的,這個如果開啟需要配置pidfile
#pidfile:/etc/redis/pidfile.pid 記錄后臺自起進程PID
logfile "/etc/redis/redis.log" 這里要寫容器的路徑不是宿主主機,但是要在映射的宿主主機目錄下創建redis.log文件或者進入該容器在/etc/redis/下創建redis.log
dir /etc/redis/data 這里要寫容器的路徑不是宿主主機,但是要在映射的宿主主機目錄下創建data目錄或者進入該容器在/etc/redis/下創建data目錄
#replicaof 172.17.0.9 6379 由于這里是主節點所欲不需要配置該項
#masterauth 123456 由于這里是主節點所欲不需要配置該項
requirepass 123456
appendonly yes
cluster-config-file /etc/redis/nodes-6379.conf
cluster-node-timeout 15000
從節點1(redis6378 172.17.0.8)配置文件:
主要修改:
cluster-enabled no (坑)這里從節點不能開啟
protected-mode yes 如果沒有設置密碼則只能本地主機能訪問
port 6379 容器端口
bind 172.17.0.7
#daemonize yes 這個不知道為什么我開啟 redis容器啟動不起來,這里我是關閉的,這個如果開啟需要配置pidfile
#pidfile:/etc/redis/pidfile.pid 記錄后臺自起進程PID
logfile "/etc/redis/redis.log" 這里要寫容器的路徑不是宿主主機,但是要在映射的宿主主機目錄下創建redis.log文件或者進入該容器在/etc/redis/下創建redis.log
dir /etc/redis/data 這里要寫容器的路徑不是宿主主機,但是要在映射的宿主主機目錄下創建data目錄或者進入該容器在/etc/redis/下創建data目錄
replicaof 172.17.0.9 6379 由于這里是主節點所欲不需要配置該項
masterauth 123456 由于這里是主節點所欲不需要配置該項
requirepass 123456
appendonly yes
cluster-config-file /etc/redis/nodes-6377.conf
cluster-node-timeout 15000
具體配置參數:請查看
https://blog.csdn.net/sunboylife/article/details/108464722
重啟容器:
docker restart redis6379 redis6378 redis6377
進入主節點
docker exec -ti redis6379 /bin/bash
登錄客戶端
redis-cli -h 172.17.0.9 -a 123456
查看節點信息
info replication