柚子快報(bào)邀請(qǐng)碼778899分享:Docker創(chuàng)建redis容器
柚子快報(bào)邀請(qǐng)碼778899分享:Docker創(chuàng)建redis容器
Docker運(yùn)行Redis
一:Docker安裝Redis
docker search redis
二:Docker拉取鏡像
下面兩個(gè)命令看自己的需求
docker pull <鏡像名稱(chēng)>:<版本號(hào)> #需要自己清楚自己需要什么般本的redis
docker pull redis #這個(gè)命令會(huì)自動(dòng)下載最新版本的redis 省事 推薦
docker 無(wú)法拉取鏡像問(wèn)題(已解決)
dockerhub 已經(jīng)無(wú)法訪(fǎng)問(wèn)了 我在阿里創(chuàng)建了一個(gè) 個(gè)人倉(cāng)庫(kù) redis 鏡像拉取代碼
docker pull registry.cn-hangzhou.aliyuncs.com/ruxi_hc/redis
拉取后名稱(chēng)不太好看 你可以嘗試修改名稱(chēng) 建議修改成 redis
docker tag [原鏡像名稱(chēng)] [修改后的鏡像名稱(chēng)]
三:Docker掛載配置文件
接下來(lái)就是將redis到的配置文件進(jìn)行掛載,以配置文件方式啟動(dòng)redis容器。(掛載:即將宿主的文件和容器內(nèi)部目錄相關(guān)聯(lián),相互綁定,在宿主機(jī)內(nèi)修改文件的話(huà)也隨之修改容器內(nèi)部文件) 1)、掛載redis的配置文件 2)、掛載redis的持久化文件 因?yàn)?redis 默認(rèn)配置你會(huì)發(fā)現(xiàn)只能夠本地連接,不能進(jìn)行遠(yuǎn)程訪(fǎng)問(wèn),使用 Redis Desktop Manager連接都會(huì)報(bào)錯(cuò),因此需要手動(dòng)掛載 redis 配置文件 新建data和conf兩個(gè)文件夾,位置隨意。但要記住自己創(chuàng)建的位置
mkdir -p /home/redis/data
mkdir -p /root/docker/redis/conf
四:增加配置文件redis.conf
在剛才新建的/root/docker/redis/conf中新建文件redis.conf,內(nèi)容如下:(更新一下 ,下面有一個(gè)沒(méi)有注解的配置文件,使用沒(méi)有配置注解的)
bind 0.0.0.0 # 只允許來(lái)自bind指定網(wǎng)卡的Redis請(qǐng)求。如沒(méi)有指定,則可以接受來(lái)自任意一個(gè)網(wǎng)卡的Redis請(qǐng)求
protected-mode no
port 6379 #redis的默認(rèn)端口號(hào)
tcp-backlog 511
timeout 0 # 連接超時(shí)時(shí)間,單位秒;超過(guò)timeout,服務(wù)端會(huì)斷開(kāi)連接,為0則服務(wù)端不會(huì)主動(dòng)斷開(kāi)連接,不能小于0
# tcp keepalive參數(shù)。如果設(shè)置不為0,就使用配置tcp的SO_KEEPALIVE值
# 使用keepalive有兩個(gè)好處:
# 1) 檢測(cè)掛掉的對(duì)端。降低中間設(shè)備出問(wèn)題而導(dǎo)致網(wǎng)絡(luò)看似連接卻已經(jīng)與對(duì)端端口的問(wèn)題。
# 2) 在Linux內(nèi)核中,設(shè)置了keepalive,redis會(huì)定時(shí)給對(duì)端發(fā)送ack。檢測(cè)到對(duì)端關(guān)閉需兩倍的設(shè)置值
tcp-keepalive 0
loglevel notice #日志文件的等級(jí)
logfile "" #日志文件的位置 這里沒(méi)有配置
databases 16 #redis默認(rèn)的數(shù)據(jù)庫(kù)是16個(gè)
# 指定在多長(zhǎng)時(shí)間內(nèi),有多少次更新操作,就將數(shù)據(jù)同步到數(shù)據(jù)文件,可以多個(gè)條件配合
# 注釋掉“save”這一行配置項(xiàng)就可以讓保存數(shù)據(jù)庫(kù)功能失效
# 900秒(15分鐘)內(nèi)至少1個(gè)key值改變(則進(jìn)行數(shù)據(jù)庫(kù)保存--持久化)
# 300秒(5分鐘)內(nèi)至少10個(gè)key值改變(則進(jìn)行數(shù)據(jù)庫(kù)保存--持久化)
# 60秒(1分鐘)內(nèi)至少10000個(gè)key值改變(則進(jìn)行數(shù)據(jù)庫(kù)保存--持久化)
save 900 1
save 300 10
save 60 10000
# 當(dāng)RDB持久化出現(xiàn)錯(cuò)誤后,是否依然進(jìn)行繼續(xù)進(jìn)行工作,yes:不能進(jìn)行工作,no:可以繼續(xù)進(jìn)行工作
stop-writes-on-bgsave-error yes
# 指定存儲(chǔ)至本地?cái)?shù)據(jù)庫(kù)時(shí)是否壓縮數(shù)據(jù),耗cpu資源,默認(rèn)為yes,Redis采用LZF壓縮
# 如果為了節(jié)省CPU時(shí)間,可以關(guān)閉該選項(xiàng),但會(huì)導(dǎo)致數(shù)據(jù)庫(kù)文件變的巨大
rdbcompression yes
# 保存rdb文件時(shí),是否進(jìn)行錯(cuò)誤檢查校驗(yàn)。
# 從rdb格式的第五個(gè)版本開(kāi)始,在rdb文件的末尾會(huì)帶上CRC64的校驗(yàn)和。這跟有利于文件的容錯(cuò)性
# 但是在保存rdb文件的時(shí)候,會(huì)有大概10%的性能損耗,如果你追求高性能,可以關(guān)閉該配置。
rdbchecksum yes
dbfilename dump.rdb
dir ./ # 數(shù)據(jù)目錄,數(shù)據(jù)庫(kù)的寫(xiě)入會(huì)在這個(gè)目錄。rdb、aof文件也會(huì)寫(xiě)在這個(gè)目錄
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
# AOF持久化,指定是否在每次更新操作后進(jìn)行日志記錄,默認(rèn)redis是異步(快照)的把數(shù)據(jù)寫(xiě)入本地磁盤(pán)
# redis默認(rèn)使用的是rdb方式持久化,此方式在許多應(yīng)用中已足夠用。
# 但redis如果中途宕機(jī),會(huì)導(dǎo)致可能有幾分鐘的數(shù)據(jù)丟失,按照上面save條件來(lái)策略進(jìn)行持久化
# Append Only File是另一種持久化方式,可提供更好的持久化特性。
# Redis會(huì)把每次寫(xiě)入的數(shù)據(jù)在接收后都寫(xiě)入appendonly.aof 文件
# 每次啟動(dòng)時(shí)Redis都會(huì)先把這個(gè)文件的數(shù)據(jù)讀入內(nèi)存里,先忽略RDB文件。
appendonly yes
appendfilename "appendonly.aof" #指定文件名稱(chēng)
appendfsync everysec #AOF的三種持久化方式 no:不同步,always:每次數(shù)據(jù)變化寫(xiě)入,everysec:每秒中寫(xiě)入
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000 # slog log是用來(lái)記錄redis運(yùn)行中執(zhí)行比較慢的命令耗時(shí)。
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512 # 哈希表中元素(條目)總個(gè)數(shù)<=512個(gè),采用ziplist,否則使用hash
hash-max-ziplist-value 64 # 哈希表中每個(gè)value的長(zhǎng)度<=64字節(jié)時(shí),采用ziplist,否則使用hash
list-max-ziplist-size -2
list-max-ziplist-entries 512 # list元素<=512個(gè),采用ziplist,否則用linkedlist
list-max-ziplist-value 64 # list內(nèi)某個(gè)元素大小<=64字節(jié)時(shí),采用ziplist,否則用linkedlist
list-compress-depth 0
set-max-intset-entries 512 # set內(nèi)元素?cái)?shù)量<=512個(gè),且都是整數(shù)型值,采用inset,否則使用hashtable
zset-max-ziplist-entries 128 # zset內(nèi)元素?cái)?shù)量<=128個(gè),采用ziplist,否則用skiplist跳表
zset-max-ziplist-value 64 # zset內(nèi)某個(gè)元素大小<=64字節(jié)時(shí),采用ziplist,否則用skiplist跳表
hll-sparse-max-bytes 3000
# Redis將在每100毫秒時(shí)使用1毫秒的CPU時(shí)間來(lái)對(duì)redis的hash表進(jìn)行重新hash,可以降低內(nèi)存的使用。
# 當(dāng)你的使用場(chǎng)景中,有非常嚴(yán)格的實(shí)時(shí)性需要,不能夠接受Redis時(shí)不時(shí)的對(duì)請(qǐng)求有2毫秒的延遲的話(huà)
# 把這項(xiàng)配置為no。如果沒(méi)有這么嚴(yán)格的實(shí)時(shí)性要求,可以設(shè)置為yes,以便能夠盡可能快的釋放內(nèi)存。
# 指定是否激活重置哈希,默認(rèn)為開(kāi)啟
activerehashing yes
client-output-buffer-limit normal 0 0 0 # 對(duì)客戶(hù)端輸出緩沖進(jìn)行限制,可以強(qiáng)迫那些不從服務(wù)器讀取數(shù)據(jù)的客戶(hù)端斷開(kāi)連接
# 對(duì)于slave client和 MONITER client,如果client-output-buffer一旦超過(guò)256mb
# 又或者超過(guò)64mb持續(xù)60秒,那么服務(wù)器就會(huì)立即斷開(kāi)客戶(hù)端連接。
client-output-buffer-limit slave 256mb 64mb 60
# 對(duì)于pubsub client,如果client-output-buffer一旦超過(guò)32mb,又或者超過(guò)8mb持續(xù)60秒,
# 那么服務(wù)器就會(huì)立即斷開(kāi)客戶(hù)端連接。
client-output-buffer-limit pubsub 32mb 8mb 60
# redis執(zhí)行任務(wù)的頻率為1s除以hz。
hz 10
# 在AOF重寫(xiě)時(shí),如果打開(kāi)了aof-rewrite-incremental-fsync開(kāi)關(guān),系統(tǒng)會(huì)每32MB執(zhí)行一次fsync。
# 這對(duì)于把文件寫(xiě)入磁盤(pán)是有幫助的,可以避免過(guò)大的延遲峰值。
aof-rewrite-incremental-fsync yes
requirepass 123456 ##設(shè)置密碼 123456 可以更改
#這幾個(gè)逼不能隨便用,這樣配置是把這幾個(gè)家伙禁用了
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command KEYS ""
這個(gè)是沒(méi)有配置注解的配置文件
bind 0.0.0.0
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 0
loglevel notice
logfile ""
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-max-ziplist-entries 512
list-max-ziplist-value 64
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
requirepass 123456
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command KEYS ""
五:創(chuàng)建容器并啟動(dòng)
注意路徑,一定要注意路徑
docker run --name redis -p 8081:8081
-v /root/docker/redis/data:/data
-v /root/docker/redis/conf/redis.conf:/etc/redis/redis.conf
-d redis redis-server /etc/redis/redis.conf
–name:給容器起一個(gè)名 -p:端口映射 宿主機(jī):容器 -v:掛載自定義配置 自定義配置:容器內(nèi)部配置 -d:后臺(tái)運(yùn)行 redis-server --appendonly yes: 在容器執(zhí)行redis-server啟動(dòng)命令,并打開(kāi)redis持久化配置 查看是否啟動(dòng)成功 docker -ps
2023年11月16號(hào) 補(bǔ)記
1、為了保險(xiǎn),我們一般通常會(huì)給redis設(shè)置密碼。之前的服務(wù)一直沒(méi)有密碼的。設(shè)置密碼后登陸的方式和命令有一點(diǎn)不一樣(配置文件已經(jīng)修改過(guò)了,不用擔(dān)心)
[root@VM-4-12-centos conf]# docker exec -it 8bf3 /bin/bash
root@8bf3152fd931:/data# redis-cli -h 106.54.224.114 -p 6379
2、第二點(diǎn) 我的數(shù)據(jù)會(huì)被清空緩存,但數(shù)據(jù)并沒(méi)有保存下來(lái),所以我在配置文件下面添加了兩行禁止flush的指令
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command KEYS ""
注意 完成上面的指令要重啟容器才能生效 啟動(dòng)客戶(hù)端
[root@VM-4-12-centos /]# docker exec -it 7d92cf78dff1 /bin/bash
root@7d92cf78dff1:/data# redis-cli -h 106.54.224.114 -p 6379 -a 123456 2>/dev/null
127.0.0.1:6379>
-a 后跟的密碼
六:容器內(nèi)部連接進(jìn)行測(cè)試
sudo docker exec -it 757225638cab /bin/bash
docker exec -it redis redis-cli # 這里的redis是容器名稱(chēng) 也可以是容器id
進(jìn)入容器后 可以測(cè)試一下密碼
127.0.0.1:6379> auth 123456
OK
6.嘗試進(jìn)行刪除redis容器 1.查看所有在運(yùn)行的容器:
docker PS -a
2.停止運(yùn)行Redis。停止命令
docker stop <容器ID或名稱(chēng)>
curl localhost:5000 curl: (7) Failed connect to localhost:5000; Connection refused
七:進(jìn)行外部redis的連接
RedisInsight 這是redis官方推薦的 也是免費(fèi)使用的 下載鏈接:https://redis.io/docs/connect/insight/ 雙擊打開(kāi) 點(diǎn)擊 會(huì)出現(xiàn)下面的彈窗,輸入對(duì)應(yīng)的服務(wù)器地址、端口號(hào)、用戶(hù)名和密碼,先進(jìn)行測(cè)試鏈接, 成功后,然后再點(diǎn)擊 Add Redis Database
柚子快報(bào)邀請(qǐng)碼778899分享:Docker創(chuàng)建redis容器
精彩內(nèi)容
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀(guān)點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。