Docker 搭建 Redis 數據庫

Docker 搭建 Redis 數據庫

  • 前言
  • 一、準備工作
  • 二、創建 Redis 容器的目錄結構
  • 三、啟動 Redis 容器
    • 1. 通過 redis.conf 配置文件設置密碼
    • 2. 通過 Docker 命令中的 requirepass 參數設置密碼
  • 四、Host 網絡模式與 Port 映射模式
  • 五、檢查 Redis 容器狀態
  • 六、訪問 Redis 服務
  • 總結


前言

Redis 是一個開源的高性能鍵值對存儲系統,廣泛用于緩存、消息隊列等場景。通過 Docker 部署 Redis,能夠讓你輕松快速地運行 Redis 服務,同時靈活地進行配置和管理。

本篇文章將指導你通過 Docker 部署 Redis 容器,并講解如何掛載配置文件來設置密碼、監聽端口及其他自定義設置。


一、準備工作

首先,確保你的系統上已經安裝了 Docker。

Linux上進行Docker安裝有兩種方式:

  1. Docker自動化安裝
  2. 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 文件,或者手動創建一個。

  1. 啟動臨時 Redis 容器來獲取配置文件:

    docker run --name redis_test -d redis:6
    
  2. 復制 redis.conf 文件到本地目錄:

    docker cp redis_test:/usr/local/etc/redis/redis.conf "$DIR/redis/conf/redis.conf"
    
  3. 刪除臨時 Redis 容器:

    docker rm -f redis_test
    
  4. 在 redis.conf 配置文件中,你可以通過設置 requirepass 來啟用密碼保護。打開 redis.conf 文件,找到以下配置并取消注釋:

    requirepass yourpassword
    

    yourpassword 替換為你希望設置的密碼(例如 123456)。如果你希望修改其他配置(如監聽端口),也可以在這個文件中進行修改。

    常見的 Redis 配置項:

    • port:設置 Redis 的監聽端口,默認是 6379。
    • bind:指定 Redis 監聽的 IP 地址,確保只允許來自特定 IP 的連接。
    • requirepass:啟用密碼保護。

    例如,如果你希望將 Redis 監聽端口修改為 6380,可以修改配置文件中的 port 配置項:

    port 6380
    
  5. 啟動 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 映射模式

  1. 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
    
    • 優點
      • 容器共享宿主機的網絡,性能較高。
      • 無需顯式端口映射,容器與宿主機共享相同的網絡。
    • 缺點
      • 容器與宿主機的網絡完全共享,可能會有端口沖突,尤其是多個容器或服務同時運行時。
      • 容器的端口與宿主機端口相同,可能存在安全隱患。
  2. 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 映射模式則更靈活且能有效避免端口沖突。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/896431.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896431.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896431.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

35. Spring Boot 2.1.3.RELEASE 應用監控【監控信息可視化】

在 Spring Boot 2.1.3.RELEASE 中實現監控信息可視化可以通過多種方式,下面為你詳細介紹使用 Spring Boot Actuator 結合 Grafana 和 Prometheus 以及使用 Spring Boot Admin 這兩種常見方法。 方法一:Spring Boot Actuator Grafana Prometheus 1. 添…

服務器間遷移conda環境

注意:可使用遷移miniconda文件 or 遷移yaml文件兩種方式,推薦前者,基本無bug! 一、遷移miniconda文件: 拷貝舊機器的miniconda文件文件到新機器: 內網拷貝:scp -r mazhf192.168.1.233:~/miniconda3 ~/ 外…

在VSCode中安裝jupyter跑.ipynb格式文件

個人用vs用的較多,不習慣在瀏覽器單獨打開jupyter,看著不舒服,直接上教程。 1、在你的環境中pip install ipykernel 2、在vscode的插件中安裝jupyter擴展 3、安裝擴展后,打開一個ipynb文件,并且在頁面右上角配置內核 …

20250223下載并制作RTX2080Ti顯卡的顯存的測試工具mats

20250223下載并制作RTX2080Ti顯卡的顯存的測試工具mats 2025/2/23 23:23 緣起:我使用X99的主板,使用二手的RTX2080Ti顯卡【顯存22GB版本,準備學習AI的】 但是半年后發現看大碼率的視頻容易花屏,最初以為是WIN10經常更換顯卡/來回更…

WordPress R+L Carrier Edition sql注入漏洞復現(CVE-2024-13481)(附腳本)

免責申明: 本文所描述的漏洞及其復現步驟僅供網絡安全研究與教育目的使用。任何人不得將本文提供的信息用于非法目的或未經授權的系統測試。作者不對任何由于使用本文信息而導致的直接或間接損害承擔責任。如涉及侵權,請及時與我們聯系,我們將盡快處理并刪除相關內容。 0x0…

深入了解 NAT 模式:網絡地址轉換的奧秘

深入了解 NAT 模式:網絡地址轉換的奧秘 在計算機網絡的世界里,NAT 模式(Network Address Translation,網絡地址轉換)扮演著至關重要的角色。它就像是網絡中的翻譯官,在不同網絡地址之間進行轉換&#xff0…

Git版本控制系統---本地操作(萬字詳解!)

目錄 git基本配置 認識工作區、暫存區、版本庫 添加文件--情況一: 添加文件-情況二: 修改文件: 版本回退: git基本配置 1.初始化本地倉庫,注意:一定要在一個目錄下進行,一般都是新建一個文件夾,在文件…

Jupyter Notebook切換虛擬環境(Kernel管理)

我們在使用Jupyter Notebook的時候,打開文件發現只有一個Python3(ipykernel),我們自己在conda中創建的虛擬環境為什么沒有顯示出來,今天我就來和大家一起討論一下! 在 Jupyter Notebook 中,kernel 是執行代碼的核心。管…

【網絡安全】常見的web攻擊

1、SQL注入攻擊 定義: 攻擊者在HTTP請求中注入惡意的SQL代碼,當服務器利用參數構建SQL語句的時候,惡意的SQL代碼被一起構建,并在數據庫中執行。 示例: 用戶登錄: 輸入用戶名xx, 密碼 or 1 …

Java基礎關鍵_012_包裝類

目 錄 一、基本數據類型對應的包裝類 1.概覽 2.說明 二、包裝類 1.最大值與最小值 2.構造方法 3.常用方法(Integer為例) (1)compare(int x, int y) (2)max(int a, int b) 和 min(int a, int b) &…

MacPorts 創建自定義 Portfile 安裝 RoadRunner

Portfile 放 ~/Ports/net/roadrunner-server 下: # -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fencutf-8:fttcl:et:sw4:ts4:sts4PortSystem 1.0name roadrunner-server version 202…

【Java 面試 八股文】JVM 虛擬機篇

JVM 虛擬機篇 1. JVM組成1.1 JVM由那些部分組成,運行流程是什么?1.2 什么是程序計數器?1.3 你能給我詳細的介紹Java堆嗎?1.4 Java 虛擬機棧1.4.1 Java Virtual machine Stacks (java 虛擬機棧)1.4.2 棧和堆的區別1.4.3 垃圾回收是否涉及棧內…

MFC學習筆記-1

一、編輯框和按鈕 //.h文件private:CString str;//給窗口類加了一個變量(定義一個成員變量),關聯到IDC_EDIT1中(要在實現中關聯,源文件文件夾中)CString str2;//接收button2,和IDC_EDIT2綁定 p…

QT 引入Quazip和Zlib源碼工程到項目中,無需編譯成庫,跨平臺,加密壓縮,帶有壓縮進度

前言 最近在做項目時遇到一個需求,需要將升級的文件壓縮成zip,再進行傳輸; 通過網絡調研,有許多方式可以實現,例如QT私有模塊的ZipReader、QZipWriter;或者第三方庫zlib或者libzip或者quazip等&#xff1…

[oAuth2授權]Web前端+NodeCoze API Web后端程序+Coze授權服務器工作流程架構流程圖詳解

嗯,用戶之前已經了解了如何使用React和Node.js結合Coze API實現OAuth2授權,現在他們具體想實現的是在Web應用中,當用戶點擊一個按鈕(比如“和Bot對話”)時,觸發授權流程,重定向到Coze的授權服務器獲取code。用戶還提供了一個具體的cURL請求示例,展示了如何通過302重定向…

Fiddler在Windows下抓包Https

文章目錄 1.Fiddler Classic 配置2.配置瀏覽器代理自動代理手動配置瀏覽器代理 3.抓取移動端 HTTPS 流量(可選)解決抓取 HTTPS 失敗問題1.Fiddler證書過期了 默認情況下,Fiddler 無法直接解密 HTTPS 流量。需要開啟 HTTPS 解密: 1…

vue:vite 代理服務器 server: proxy 配置

Vite 代理服務器(Proxy)的配置通常用于開發環境,以解決跨域請求等問題。以下是一個詳細的配置步驟: 通過以上步驟,你就可以在 Vite 項目中配置代理服務器,以便在開發過程中方便地訪問后端服務。 ?找到 Vi…

DINOv2 + yolov8 + opencv 檢測卡車的可拉拽雨覆是否完全覆蓋

最近是接了一個需求咨詢圖像處理類的,甲方要在卡車過磅的地方裝一個攝像頭用檢測卡車的車斗雨覆是否完全, 讓我大致理了下需求并對技術核心做下預研究 開發一套圖像處理軟件,能夠實時監控經過的卡車并判斷其車斗的雨覆狀態。 系統需具備以下…

AI除了可以能提高工作效率的還可以實現哪些功能?

AI除了能顯著提高工作效率之外,其在眾多領域的潛力遠不止于此。 在教育領域,AI正逐步成為個性化教學的得力助手。通過分析學生的學習習慣和能力水平,AI能夠定制出最適合每個學生的學習計劃,不僅提升了學習效率,還極大地…

vscode settings(一):全局| 用戶設置常用的設置項

參考資料 Visual Studio Code權威指南 by 韓駿 一. 全局設置與用戶設置 1.1 Vscode支持兩種不同范圍的設置 用戶設置(User Settings):這是一個全局范圍的設置,會應用到所有的Visual Studio Code實例中。工作區設置(Workspace Settings):設…