使用Docker Compose 部署Redis 單機版與集群
Redis 是一個開源的、高效能的記憶體資料庫,常用於快取、訊息佇列等場景。它不僅支援豐富的資料結構,而且性能卓越,成為了分散式系統的重要組件之一。在日常開發和生產環境中,使用Docker 容器化Redis 部署是非常常見的實踐。本文將詳細介紹如何使用Docker Compose 分別部署Redis 單機版和Redis 叢集。
一、前置準備
在開始之前,請確保你的系統已經安裝了以下工具:
- Docker:用於容器化應用的工具,可以從 Docker 官網下載並安裝。
- Docker Compose:Docker Compose 是Docker 官方提供的,用於定義和運行多個容器應用程式的工具,允許我們透過編寫一個
docker-compose.yml
文件來同時啟動多個服務。
在命令列中透過以下命令檢查Docker 和Docker Compose 是否已安裝:
docker --version
輸出docker版本訊息
docker-compose --version
輸出docker compose版本資訊。
如果上面命令正確輸出版本訊息,即說明安裝成功。
二、使用Docker Compose 部署Redis 單機版
2.1 建立專案目錄
首先,我們需要建立一個用於存放Redis 設定檔和 docker-compose.yml
文件的項目目錄。
mkdir redis-single && cd redis-single
2.2 編寫 docker-compose.yml
接下來,在專案目錄中建立一個 docker-compose.yml
文件,內容如下:
version: '3' services: redis: image: redis:latest container_name: redis-single ports: - "6379:6379" volumes: - redis-data:/data command: ["redis-server", "--appendonly" , "yes"] volumes: redis-data: driver: local
解釋:
- version: '3':Docker Compose 檔案的版本號,
3
是一個常見的版本,支援絕大多數功能。 - services:定義服務,在這裡我們定義了一個Redis 服務。
- redis:服務名稱,代表Redis 容器。
- image:指定鏡像,這裡我們使用Redis 官方鏡像的最新版本
redis:latest
。 - container_name:容器名稱,將Redis 容器命名為
redis-single
。 - ports:映射端口,將本地的6379 端口映射到容器內的6379 端口,Redis 預設運行在6379 端口上。
- volumes:指定資料卷,將Redis 資料持久化儲存到本機,以防止資料因容器重新啟動或刪除而遺失。
- command:啟動指令,這裡我們指定
redis-server
啟動,並啟用AOF(Append-Only File)持久化機制。
2.3 啟動Redis 容器
在專案目錄中,執行以下命令啟動Redis 容器:
docker-compose up -d
參數解釋:
- -d:表示後台運行容器。
運行該命令後,Docker 將會根據 docker-compose.yml
檔案拉取Redis 鏡像並啟動服務。
2.4 驗證Redis 單機版
- 查看正在運作的Redis 容器:
docker ps
如果一切順利,你應該可以看到 redis-single
容器正在運行。
- 使用
redis-cli
連線Redis 實例:
docker exec -it redis-single redis-cli
在Redis CLI 中,輸入以下命令來驗證Redis 是否正常運作:
ping
輸出應為 PONG
,表明Redis 正常運作。
2.5 停止並刪除Redis 容器
如果你想停止並刪除Redis 容器,可以使用以下命令:
docker-compose down
該命令將停止並刪除所有由 docker-compose.yml
文件所建立的容器及網路。
三、使用Docker Compose 部署Redis 集群
Redis 叢集是一種分散式Redis 架構,允許將資料分片分散到多個節點上,以實現高可用性和可擴展性。 Redis 叢集至少需要6 個節點,其中3 個是主節點,3 個是從節點。接下來,我們將示範如何使用Docker Compose 部署Redis 叢集。
3.1 建立專案目錄
為Redis 叢集建立一個新的專案目錄:
mkdir redis-cluster && cd redis-cluster
3.2 建立Redis 叢集設定檔
我們需要為每個Redis 實例建立獨立的設定檔。首先,創建一個 config
目錄來存放這些文件:
mkdir config
然後為每個節點建立配置文件,以下是 redis-cluster-node.conf
的模板配置:
port 6379 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes
將此設定檔複製為6 份,命名為 node-7000.conf
,node-7001.conf
,以此類推,直到 node-7005.conf
。這6 個設定檔將分別用於6 個Redis 節點。
3.3 編寫 docker-compose.yml
在 redis-cluster
目錄下創建 docker-compose.yml
文件,內容如下:
version: '3' services: redis-node-1: image: redis:latest container_name: redis-node-1 ports: - "7000:6379" volumes: - ./config/node-7000.conf:/usr/local /etc/redis/redis.conf command: ["redis-server", "/usr/local/etc/redis/redis.conf"] redis-node-2: image: redis:latest container_name: redis-node-2 ports: - "7001:6379" volumes: - ./config/node-7001.conf:/usr/local/etc/redis/redis.conf command: ["redis-server", "/usr/local/etc/ redis/redis.conf"] redis-node-3: image: redis:latest container_name: redis-node-3 ports: - "7002:6379" volumes: - ./config/node-7002.conf:/usr/local /etc/redis/redis.conf command: ["redis-server", "/usr/local/etc/redis/redis.conf"] redis-node-4: image: redis:latest container_name: redis-node-4 ports: - "7003:6379" volumes: - ./config/node-7003.conf:/usr/local/etc/redis/redis.conf command: ["redis-server", "/usr/local/etc/ redis/redis.conf"] redis-node-5: image: redis:latest container_name: redis-node-5 ports: - "7004:6379" volumes: - ./config/node-7004.conf:/usr/local /etc/redis/redis.conf command: ["redis-server", "/usr/local/etc/redis/redis.conf"] redis-node-6: image: redis:latest container_name: redis-node-6 ports: - "7005:6379" volumes: - ./config/node-7005.conf:/usr/local/etc/redis/redis.conf command: ["redis-server", "/usr/local/etc/ redis/redis.conf"]
解釋:
- 我們創建了6 個Redis 容器,分別監聽7000 到7005 埠。
- 每個容器都掛載了對應的配置文件,使用
redis-server
命令啟動。
3.4 啟動Redis 集群
在 redis-cluster
目錄中,執行以下命令啟動叢集:
docker-compose up -d
3.5 配置Redis 集群
Redis 容器啟動後,我們還需要手動設定Redis 叢集。首先,透過一個容器執行 redis-cli
命令來配置叢集:
docker exec -it redis-node-1 redis-cli --cluster create \ 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 \ 127.0.0.1:7003 170.0. -cluster-replicas 1
解釋:
--cluster create
:命令用於建立Redis 叢集。127.0.0.1:7000 127.0.0.1:7001 ...
:列出叢集中的所有節點。--cluster-replicas 1
:指定每個主節點有一個從節點。
執行指令後,Redis 會自動將7000、7001、7002 配置為主節點,而7003、7004、7005 配置為對應的從節點。
3.6 驗證Redis 集群
你可以透過以下命令查看集群的狀態:
docker exec -it redis-node-1 redis-cli -c -p 7000 cluster info
還可以連接到Redis 節點並透過以下命令查看叢集的節點資訊:
docker exec -it redis-node-1 redis-cli -c -p 7000 cluster nodes
四、總結
本文詳細介紹如何使用Docker Compose 部署Redis 單機版和叢集版。在開發環境中,使用Docker Compose 能夠快速部署和管理Redis 服務,而在生產環境中,可以透過類似的配置實現更複雜的叢集管理。