Docker 搭建 Redis 數據庫
- 前言
- 一、準備工作
- 二、創建 Redis 容器的目錄結構
- 三、啟動 Redis 容器
- 1. 通過 redis.conf 配置文件設置密碼
- 2. 通過 Docker 命令中的 requirepass 參數設置密碼
- 四、Host 網絡模式與 Port 映射模式
- 五、檢查 Redis 容器狀態
- 六、訪問 Redis 服務
- 總結
前言
Redis 是一個開源的高性能鍵值對存儲系統,廣泛用于緩存、消息隊列等場景。通過 Docker 部署 Redis,能夠讓你輕松快速地運行 Redis 服務,同時靈活地進行配置和管理。
本篇文章將指導你通過 Docker 部署 Redis 容器,并講解如何掛載配置文件來設置密碼、監聽端口及其他自定義設置。
一、準備工作
首先,確保你的系統上已經安裝了 Docker。
Linux上進行Docker安裝有兩種方式:
- Docker自動化安裝
- Docker手動安裝
可以根據該文章的步驟進行安裝:https://blog.csdn.net/weixin_44876263/article/details/136714078?spm=1001.2014.3001.5502
二、創建 Redis 容器的目錄結構
為了更好地管理 Redis 的數據和配置文件,我們首先創建一些本地目錄,用于存放 Redis 的配置文件和數據文件。
# 安裝路徑
DIR="/opt/docker/demo"
DOCKER_NAME="docker-redis"# 創建目錄結構
mkdir -p "$DIR/redis/data"
mkdir -p "$DIR/redis/conf"
conf
:存放 Redis 的配置文件(如 redis.conf)。data
:存放 Redis 數據文件。
三、啟動 Redis 容器
1. 通過 redis.conf 配置文件設置密碼
在啟動 Redis 容器之前,我們需要準備好 Redis 的配置文件。在容器內,Redis 使用 redis.conf
配置文件來管理服務的行為。你可以選擇自定義這個文件中的設置,如密碼、端口、持久化方式等。
獲取配置文件:你可以從 Redis 官方鏡像容器中復制 redis.conf
文件,或者手動創建一個。
-
啟動臨時 Redis 容器來獲取配置文件:
docker run --name redis_test -d redis:6
-
復制
redis.conf
文件到本地目錄:docker cp redis_test:/usr/local/etc/redis/redis.conf "$DIR/redis/conf/redis.conf"
-
刪除臨時 Redis 容器:
docker rm -f redis_test
-
在 redis.conf 配置文件中,你可以通過設置 requirepass 來啟用密碼保護。打開 redis.conf 文件,找到以下配置并取消注釋:
requirepass yourpassword
將
yourpassword
替換為你希望設置的密碼(例如123456
)。如果你希望修改其他配置(如監聽端口),也可以在這個文件中進行修改。常見的 Redis 配置項:
port
:設置 Redis 的監聽端口,默認是 6379。bind
:指定 Redis 監聽的 IP 地址,確保只允許來自特定 IP 的連接。requirepass
:啟用密碼保護。
例如,如果你希望將 Redis 監聽端口修改為 6380,可以修改配置文件中的
port
配置項:port 6380
-
啟動 Redis 容器
一旦準備好了redis.conf
配置文件,我們可以通過以下命令啟動 Redis 容器,并掛載本地目錄到容器內:docker run -d \--restart=always \--privileged=true \--log-opt max-size=100m \--log-opt max-file=2 \--name "$DOCKER_NAME" \--network host \-v "$DIR/redis/conf/redis.conf:/etc/redis/redis.conf" \-v "$DIR/redis/data:/data" \-v /etc/localtime:/etc/localtime \redis:6 redis-server /etc/redis/redis.conf --appendonly yes
解釋參數:
-d
:后臺運行容器。--restart=always
:容器在崩潰或系統重啟后自動重啟。--privileged=true
:授予容器額外權限,通常用于需要特殊訪問權限的操作。--log-opt max-size=100m
和--log-opt max-file=2
:配置日志文件大小和最大文件數,避免日志文件過大。--name "$DOCKER_NAME"
:指定容器名稱,這里是docker-redis
。--network host
:容器將使用宿主機的網絡棧,直接暴露端口。-v "$DIR/redis/conf/redis.conf:/etc/redis/redis.conf"
:將本地的redis.conf
配置文件掛載到容器內。-v "$DIR/redis/data:/data"
:將 Redis 數據文件掛載到容器內,確保數據持久化。-v /etc/localtime:/etc/localtime
:確保容器的時區與宿主機一致。redis:6 redis-server /etc/redis/redis.conf --appendonly yes
:指定 Redis 鏡像并使用自定義配置文件啟動 Redis,開啟appendonly
持久化。
優點:
- 配置靈活,可以同時設置 Redis 的多項參數(如端口、密碼、持久化等)。
- 容器內部的 Redis 配置和密碼設置與容器外部一致,便于管理。
缺點:
- 需要手動準備和維護
redis.conf
文件。 - 配置文件較為復雜,可能需要額外的操作才能適應不同的需求。
2. 通過 Docker 命令中的 requirepass 參數設置密碼
直接在 Docker 啟動命令中通過 requirepass 參數來設置密碼是一種簡便快速的方法。適用于簡單場景,尤其是只需要設置密碼而不需要更改其他配置時。
使用以下命令啟動 Redis 容器,并通過 requirepass
參數直接設置密碼:
docker run -d \--restart=always \--privileged=true \--log-opt max-size=100m \--log-opt max-file=2 \--name "$DOCKER_NAME" \--network host \-v "$DIR/redis/data:/data" \-v /etc/localtime:/etc/localtime \redis:6 redis-server --appendonly yes --requirepass "123456"
這里,我們直接通過命令行中的 --requirepass
參數來設置密碼,避免了配置文件的修改。
優點:
- 快速簡便,適合不需要修改其他 Redis 配置的場景。
- 不需要手動編輯或管理
redis.conf
配置文件。
缺點:
- 只能設置密碼,無法進行其他復雜的配置(如修改端口、持久化等)。
- 密碼直接寫在命令行中,可能會有安全隱患(尤其是日志中可能會記錄命令)。
四、Host 網絡模式與 Port 映射模式
在 Docker 中,容器的端口配置是非常關鍵的。Redis 容器支持兩種主要的端口配置方式:Host 網絡模式 和 Port 映射模式。
-
Host 網絡模式
如果你使用--network host
,容器將共享宿主機的網絡棧,這意味著容器直接使用宿主機的 IP 地址和端口來暴露服務。容器會監聽宿主機的 Redis 默認端口(6379),而無需進行端口映射。配置命令:
docker run -d \--restart=always \--privileged=true \--log-opt max-size=100m \--log-opt max-file=2 \--name "$DOCKER_NAME" \--network host \-v "$DIR/redis/conf/redis.conf:/etc/redis/redis.conf" \-v "$DIR/redis/data:/data" \-v /etc/localtime:/etc/localtime \redis:6 redis-server /etc/redis/redis.conf --appendonly yes
- 優點
- 容器共享宿主機的網絡,性能較高。
- 無需顯式端口映射,容器與宿主機共享相同的網絡。
- 缺點
- 容器與宿主機的網絡完全共享,可能會有端口沖突,尤其是多個容器或服務同時運行時。
- 容器的端口與宿主機端口相同,可能存在安全隱患。
- 優點
-
Port 映射模式
如果你希望使用宿主機的特定端口來訪問容器內的服務,可以使用-p
參數進行端口映射。通過這種方式,容器內部的端口(例如 6379)將映射到宿主機的另一個端口(例如 6380)。配置命令:
docker run -d \--restart=always \--privileged=true \--log-opt max-size=100m \--log-opt max-file=2 \--name "$DOCKER_NAME" \-p 6380:6379 \-v "$DIR/redis/conf/redis.conf:/etc/redis/redis.conf" \-v "$DIR/redis/data:/data" \-v /etc/localtime:/etc/localtime \redis:6 redis-server /etc/redis/redis.conf --appendonly yes
在這個配置中:
-p 6380:6379
:將宿主機的 6380 端口映射到容器的 6379 端口。你可以通過宿主機的http://localhost:6380
訪問 Redis 服務。- 優點
- 容器共享宿主機的網絡,性能較高。
- 無需顯式端口映射,容器與宿主機共享相同的網絡。
- 缺點
- 容器與宿主機的網絡完全共享,可能會有端口沖突,尤其是多個容器或服務同時運行時。
- 容器的端口與宿主機端口相同,可能存在安全隱患。
- 優點
五、檢查 Redis 容器狀態
容器啟動后,你可以通過以下命令查看容器狀態,確保它在運行中:
docker ps
如果容器未正常運行,可以查看日志進行排查:
docker logs docker-redis
六、訪問 Redis 服務
完成上述步驟后,你可以通過客戶端連接到 Redis 容器并進行操作。使用 Redis CLI 連接時,需要提供密碼:
redis-cli -h localhost -p 6379 -a 123456 # Host 網絡模式
其中,localhost
是 Redis 服務所在的宿主機地址,6379
是 Redis 默認的監聽端口,123456
是我們設置的密碼。
或者如果使用了端口映射:
redis-cli -h localhost -p 6380 -a 123456 # Port 映射模式
總結
通過 Docker 部署 Redis 容器非常簡便,并且可以靈活配置各個參數。你可以使用掛載本地目錄來管理 Redis 的配置文件、數據文件和日志文件,這樣可以確保配置和數據持久化存儲。設置密碼保護是保障 Redis 安全性的重要措施,推薦通過 redis.conf
配置文件來管理密碼。
兩種端口配置方式(Host 網絡模式和 Port 映射模式)可以根據需求選擇。Host 網絡模式適合性能要求高的場景,而 Port 映射模式則更靈活且能有效避免端口沖突。