Ubuntu 22.04(WSL2)使用Docker安裝Redis
本教程將指導您在運行于WSL2的Ubuntu 22.04上通過Docker安裝Redis 7.4.3。您將獲得一個配置了自定義設置、持久化存儲和安全選項的Redis實例。
前提條件
- WSL2上已安裝Ubuntu 22.04。
- WSL2上已安裝并運行Docker,確保Docker守護進程已啟動。
- 熟悉基本的終端命令。
步驟1:創建Redis目錄
為了確保數據持久化和配置管理,創建用于存儲Redis數據和配置文件的目錄。
# /home/redis/data:存儲Redis數據文件(如dump.rdb、appendonly.aof)
# /home/redis/conf:存儲Redis配置文件
mkdir -p /home/redis/data /home/redis/conf
步驟2:準備Redis配置文件
在/home/redis/conf
目錄下創建redis.conf
文件,內容如下。每個參數均附帶注釋說明其作用。
sudo touch redis.conf
chmod -R 777 /home/redis/*
# 允許來自任何IP地址的連接,WSL2網絡需要此設置
bind 0.0.0.0
# 設置認證密碼,替換your_password為強密碼
requirepass your_password
# 禁用保護模式以允許外部連接
protected-mode no
# TCP連接隊列長度,建議值511
tcp-backlog 511
# 客戶端空閑超時時間(秒),0表示無限制
timeout 0
# TCP保活時間(秒),檢測客戶端連接狀態
tcp-keepalive 300
# 是否以守護進程方式運行,Docker環境設置為no
daemonize no
# 是否啟用系統監督,Docker環境設置為no
supervised no
# 日志級別,notice為標準信息級別
loglevel notice
# 日志文件路徑,空字符串表示輸出到標準輸出
logfile ""
# 數據庫數量,默認為16,此處設置為30
databases 30
# 是否在啟動時顯示Redis logo
always-show-logo yes
# 快照保存策略:900秒內至少1次更改觸發
save 900 1
# 快照保存策略:300秒內至少10次更改觸發
save 300 10
# 快照保存策略:60秒內至少10000次更改觸發
save 60 10000
# 后臺保存失敗時是否停止寫入
stop-writes-on-bgsave-error yes
# 是否啟用RDB文件壓縮
rdbcompression yes
# 是否在RDB文件中啟用校驗和
rdbchecksum yes
# RDB文件名
dbfilename dump.rdb
# 數據文件存儲目錄,映射到容器/data
dir /data
# 主從復制中,從節點是否提供過期數據
replica-serve-stale-data yes
# 從節點是否為只讀
replica-read-only yes
# 是否啟用無磁盤同步
repl-diskless-sync no
# 是否禁用TCP_NODELAY,影響延遲和吞吐量
repl-disable-tcp-nodelay no
# 從節點優先級,用于主節點選舉
replica-priority 100
# 是否啟用惰性刪除以釋放內存
lazyfree-lazy-eviction no
# 是否在鍵過期時啟用惰性刪除
lazyfree-lazy-expire no
# 是否在刪除服務端鍵時啟用惰性刪除
lazyfree-lazy-server-del no
# 是否在從節點刷新時啟用惰性刪除
replica-lazy-flush no
# 是否啟用追加日志文件(AOF)持久化
appendonly yes
# AOF文件名
appendfilename "appendonly.aof"
# 是否在AOF重寫時禁用fsync
no-appendfsync-on-rewrite no
# AOF自動重寫觸發百分比
auto-aof-rewrite-percentage 100
# AOF自動重寫最小大小
auto-aof-rewrite-min-size 64mb
# 是否加載截斷的AOF文件
aof-load-truncated yes
# 是否在AOF中使用RDB前綴
aof-use-rdb-preamble yes
# Lua腳本執行時間限制(毫秒)
lua-time-limit 5000
# 慢查詢日志最大條目數
slowlog-max-len 128
# 鍵空間事件通知,空字符串表示禁用
notify-keyspace-events ""
# Hash數據結構使用ziplist的鍵最大數量
hash-max-ziplist-entries 512
# Hash數據結構使用ziplist的值最大長度
hash-max-ziplist-value 64
# List數據結構使用ziplist的最大大小
list-max-ziplist-size -2
# List數據結構壓縮深度
list-compress-depth 0
# Set數據結構使用intset的最大條目數
set-max-intset-entries 512
# Zset數據結構使用ziplist的鍵最大數量
zset-max-ziplist-entries 128
# Zset數據結構使用ziplist的值最大長度
zset-max-ziplist-value 64
# HyperLogLog稀疏表示的最大字節數
hll-sparse-max-bytes 3000
# Stream節點最大字節數
stream-node-max-bytes 4096
# Stream節點最大條目數
stream-node-max-entries 100
# 是否啟用主動重哈希
activerehashing yes
# 服務器運行頻率(Hz),影響性能
hz 10
# 是否啟用動態Hz調整
dynamic-hz yes
# 是否啟用AOF重寫的增量fsync
aof-rewrite-incremental-fsync yes
# 是否啟用RDB保存的增量fsync
rdb-save-incremental-fsync yes
# 最大內存限制,1GB(1073741824字節)
maxmemory 1073741824
# 內存滿時淘汰策略:使用LRU算法淘汰所有鍵
maxmemory-policy allkeys-lru
步驟3:運行Redis Docker容器
使用以下Docker命令啟動Redis容器,加載指定的配置和卷掛載。
# -d:后臺運行容器
# --name redis:容器命名為redis
# -p 6379:6379:映射主機端口6379到容器端口6379
# --restart unless-stopped:容器自動重啟,除非手動停止
# -v /home/redis/data:/data:掛載主機數據目錄到容器/data
# -v /home/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf:掛載配置文件
# redis:7.4.3:使用Redis 7.4.3鏡像
# redis-server /usr/local/etc/redis/redis.conf:使用指定配置文件啟動Redis
docker run -d --name redis -p 6379:6379 --restart unless-stopped \-v /home/redis/data:/data \-v /home/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \redis:7.4.3 redis-server /usr/local/etc/redis/redis.conf
步驟4:驗證安裝
-
檢查容器是否正在運行:
# 顯示運行中的容器列表 docker ps
您應該看到
redis
容器在列表中。 -
使用
redis-cli
連接到Redis:# 進入容器并啟動redis-cli docker exec -it redis redis-cli
-
使用密碼認證:
# 使用配置文件中的密碼進行認證 AUTH your_password
-
測試Redis功能,設置并獲取一個鍵:
# 設置鍵值對 SET testkey "Hello, Redis!" # 獲取鍵值 GET testkey
如果成功,將輸出
"Hello, Redis!"
。
步驟5:從主機訪問Redis
由于WSL2的網絡配置復雜,您可能需要獲取WSL2實例的IP地址以從Windows主機連接。
-
查看WSL2的IP地址:
# 顯示eth0網卡的IP地址 ip addr show eth0 | grep inet
找到IP地址(如
172.18.0.1
)。
當然,如果跟之前的一樣,windows操作系統的
C:\Users\Administrator\.wslconfig
配置了networkingMode=mirrored
,我們也可以直接使用127.0.0.1
或者是localhost
。
- 在Windows主機上使用
redis-cli
或Redis客戶端連接到<WSL2_IP>:6379
,并使用密碼認證。
故障排除
-
容器無法啟動:
查看日志:
# 顯示容器日志 docker logs redis
確保
redis.conf
文件權限正確:# 設置配置文件權限 chmod 644 /home/redis/conf/redis.conf
-
連接問題:確認6379端口未被防火墻阻止,且
redis.conf
中設置了bind 0.0.0.0
。 -
權限錯誤:
確保/home/redis
目錄對Docker用戶可寫:# 設置目錄權限(測試用) chmod -R 777 /home/redis
結論
您已在Ubuntu 22.04(WSL2)上通過Docker成功運行Redis 7.4.3實例,配置了持久化存儲、安全密碼和內存限制。此設置適用于開發或小型生產環境。如需進一步自定義,請參考Redis官方文檔。