Composeの作成
Ubuntu24でインストール出来るRedisが7.0なのでバージョンを合わせています。開発用なのでレプリカは用意せず最小のマスター3台で構成します。
起動時にクラスタを初期化しています。
services:
redis-init:
container_name: redis-init
image: redis:7.0
depends_on:
- redis-node-1
- redis-node-2
- redis-node-3
entrypoint:
[
'/bin/sh',
'-c',
'sleep 5 && redis-cli --cluster create redis-node-1:7001 redis-node-2:7002 redis-node-3:7003 --cluster-replicas 0 --cluster-yes',
]
networks:
- redis-network
redis-node-1:
container_name: redis-node-1
image: redis:7.0
command:
[
'redis-server',
'--port',
'7001',
'--cluster-enabled',
'yes',
'--cluster-config-file',
'nodes.conf',
'--cluster-node-timeout',
'5000',
'--appendonly',
'yes',
]
ports:
- '7001:7001'
volumes:
- redis-node-1-data:/data
- ./scripts:/scripts:ro
networks:
- redis-network
redis-node-2:
container_name: redis-node-2
image: redis:7.0
command:
[
'redis-server',
'--port',
'7002',
'--cluster-enabled',
'yes',
'--cluster-config-file',
'nodes.conf',
'--cluster-node-timeout',
'5000',
'--appendonly',
'yes',
]
ports:
- '7002:7002'
volumes:
- redis-node-2-data:/data
networks:
- redis-network
redis-node-3:
container_name: redis-node-3
image: redis:7.0
command:
[
'redis-server',
'--port',
'7003',
'--cluster-enabled',
'yes',
'--cluster-config-file',
'nodes.conf',
'--cluster-node-timeout',
'5000',
'--appendonly',
'yes',
]
ports:
- '7003:7003'
volumes:
- redis-node-3-data:/data
networks:
- redis-network
volumes:
redis-node-1-data:
driver: local
redis-node-2-data:
driver: local
redis-node-3-data:
driver: local
networks:
redis-network:
external: true
driver: bridge
初回のみネットワークを作成します。
docker network create redis-network
以下のコマンドで起動します。
docker compose -f compose.redis.yml up -d
停止は-v
オプションを付けてボリュームも消すようにします。
docker compose -f compose.redis.yml down -v
読み書きテスト
適当なコードを書いて確認します。
import Redis from 'ioredis';
async function testRedisCluster() {
// Redisクラスターの設定
const cluster = new Redis.Cluster([
{ host: '127.0.0.1', port: 7000 },
{ host: '127.0.0.1', port: 7001 },
{ host: '127.0.0.1', port: 7002 }
]);
try {
// 書き込みテスト
await cluster.set('testKey', 'testValue');
console.log('書き込み成功');
// 読み込みテスト
const value = await cluster.get('testKey');
console.log('読み込み成功:', value);
// 結果の確認
if (value === 'testValue') {
console.log('Redisクラスターの読み書きテスト成功');
} else {
console.error('Redisクラスターの読み書きテスト失敗');
}
} catch (error) {
console.error('エラーが発生しました:', error);
} finally {
// クラスターのクローズ
cluster.disconnect();
}
}
// テストの実行
testRedisCluster();
export default testRedisCluster;
GUIツール Redis Insight
services:
redis-insight:
container_name: redis-insight
image: redislabs/redisinsight:latest
ports:
- '8001:5540'
volumes:
- redis-insight-data:/db
networks:
- redis-network
volumes:
redis-insight-data:
driver: local
networks:
redis-network:
external: true
driver: bridge
起動は以下です。
docker compose -f compose.redisinsight.yml up -d
http://localhost:8001/ にアクセスします。初回は利用規約が表示されます。
接続URLはコンテナ名:ポート
です。

終了は以下です。
docker compose -f compose.redisinsight.yml down
コメントを残す