前言

No-SQL 在目前的系統設計上面已經逐漸佔有舉足輕重的地位,當中有人使用老牌的 memcache 當然也有人選擇目前比較流行的 Redis,而這一篇就是要來記錄一下如何在 Windows 環境上安裝 Redis 並運行在 Docker 之中。

Why Run In Docker

在 Redis 官網中你是找不到有任何一個連結是 Windows 的安裝檔。沒錯!Redis 官方並不支援這樣裝,不過你可以在 Github 中找到微軟針對此提供的一個安裝方式,可以看到他其實也是從 Redis 官方的 repo fork 一份出來,版本可以從這邊選擇,但是可以看到從 2016 年後就已經沒有新的版本了,目前上面最新的載點是 3.2.1 這個版本,但是官方最新的穩定版本已經來到 6.0.8!官方載點清單可以在這邊找到,也因為 Windows 的版本是 2016 年 6 月推出的,已經是個過老的版本,於情於理都不再適合繼續用它來開發。不過官方對於 Windows 的支援度根本是零,難道 Windows 就是命賤嗎?

不!其實只要你的 Windows 可以安裝 Docker (container 記得要選 Linux 的不要用 Windows 自己的 Container)那你就還是可以開心的使用 Redis,而且靈活性更大。

Redis with Docker

要在 Windows 下讓 Redis run 在 Docker 裡除了需要先安裝好 Docker 之外,就是要把 image 從 DockerHub 下載下來。這邊提供的下載選項滿多的,這篇就指明 5.0 版本號,因為 AWS ElastiCache 目前提供最新的版本就是 5.0,當然若是自建 Redis cluster 的話就可以直上最新版 image 來試試。

若是要先下載 image 來試試並沒有要 run 在 container 裡的話可以先執行以下指令:

docker pull redis:5.0-alpine

docker pull

不過底下的指令應該是更多人看過的,這個指令會看本機是否有相符的 image 若沒有預設會去 DockerHub 抓指定的 image ,抓下來後就會丟入 container 裡執行。

docker run redis:5.0-alpine

Docker run 指令的參考。這裡指定要去抓 5.0 本版且 OS 以 Alpine 為基底,使用 Alpine 的好處就是他真的夠小,配合這個版本號抓下來的話也才 3xMB 的空間,非常迷你。

執行以下指令確認一下 image 有確實抓下來

docker image ls

然後應該就可以看到 container 已經在執行,大致如下圖:

不過這樣因為沒有設定 Port 的關係所以若你嘗試在 Local 端連線想用管理工具看需要特別注意 Port 的設定否則應該會失敗,所以需要再調整一下執行的指令,讓一些行為走預設的方式就可以通。

docker run –name my-redis-local -p 6379:6379 redis:5.0-alpine

這樣的話就會把 container 內的 6379 port 跟 host 的 6379 port 做對應,因為 redis 預設吃的 port number 就是 6379。這樣的話前置作業就算完成了,剩下就是去選一套順手又好用的 Redis 管理工具,最好還要是免費的。

這邊推薦 NodeJS 寫的 redis-commander

安裝 npm install -g redis-commander,然後直接執行 redis-commander (這樣的話會直接吃 Port 6379,若 port number 不是這個的話就需要另外下參數去調整),另外就是本機若是 8081 已經被使用的話也可以另帶參數來指定使用別的 port。

其實安裝好後除了在 command line 裡直接輸入 redis-commander 可以啟動 service 之外也是可以直接點擊位於 AppData -> Roaming -> npm 裡的 redis-commander.cmd 或是 redis-commander.ps1

若是在本機環境做管理的話,這套工具其實很夠用了,除了可以看到 data 之外也可以修改資料內容,以開發時測試來講還滿方便的。

redis-commander_01

redis-commander_02

開啟管理介面後為了驗證這個資料確實是吃到 container 內的 Redis 我們就先進到 container 內用指令來新增資料,並在管理介面中觀察資料。

首先嘗試先進入 container 內,執行以下指令來進入 container

docker exec -it my-redis-local sh

set myTestKey ‘my_value’

redis-commander_02

redis-commander_03

我們已經可以在 redis-commander 的 web 介面看到剛剛在 container 內用指令新增的資料,至此我們到現在就已經把本機開發 redis 相關應用的環境都準備好了。

Reference