DockerでRedisを実行する
永続化、パスワード認証、カスタム設定、メモリ制限を備えたRedisをDockerで実行する方法を学びます。一般的なキャッシングとセッションストアのパターンについて解説します。
詳細な説明
Dockerでコンテナ化されたRedisキャッシュ
Redisはインメモリキャッシュ、セッションストア、メッセージブローカーとして頻繁に使用されます。公式Docker imageで簡単に実行できます:
docker run -d --name redis -p 6379:6379 redis:7-alpine
これによりデフォルト設定でRedisが起動します:パスワードなし、永続化なし、port 6379でリッスン。
パスワード認証の追加
docker run -d \
--name redis \
-p 6379:6379 \
redis:7-alpine \
redis-server --requirepass mysecretpassword
クライアントはコマンド実行前にAUTH mysecretpasswordで認証する必要があります。接続URLではredis://:mysecretpassword@localhost:6379のようになります。
データ永続化の有効化
Redisは2つの永続化メカニズムをサポートしています:
RDBスナップショット(定期的なポイントインタイムスナップショット):
docker run -d \
--name redis \
-v redis-data:/data \
-p 6379:6379 \
redis:7-alpine \
redis-server --save 60 1000 --save 300 100
これにより1000キー以上が変更された場合60秒ごと、または100キー以上が変更された場合300秒ごとにスナップショットが保存されます。
AOF(Append Only File) でより良い耐久性を実現:
docker run -d \
--name redis \
-v redis-data:/data \
-p 6379:6379 \
redis:7-alpine \
redis-server --appendonly yes --appendfsync everysec
AOFはすべての書き込み操作をログに記録し、ディスクI/Oのコストでより良い耐久性を提供します。
メモリ制限
Redisは利用可能なすべてのRAMを消費することを防ぐため、最大メモリ制限を設定する必要があります:
docker run -d \
--name redis \
--memory 512m \
-v redis-data:/data \
-p 6379:6379 \
redis:7-alpine \
redis-server --maxmemory 256mb --maxmemory-policy allkeys-lru
注意:Dockerのメモリ制限(--memory 512m)は、Redisのオーバーヘッドとオペレーティングシステムのための余裕を残すため、Redisのmaxmemoryよりも高く設定する必要があります。
エビクションポリシー
| ポリシー | 動作 |
|---|---|
noeviction |
メモリ制限に達した時にエラーを返す |
allkeys-lru |
最も最近使用されていないキーを削除(キャッシュに推奨) |
volatile-lru |
有効期限が設定されたキーの中からLRUで削除 |
allkeys-random |
ランダムにキーを削除 |
volatile-ttl |
有効期限が最も近いキーを削除 |
カスタム設定ファイル
完全な制御のためにカスタムredis.confをマウントします:
docker run -d \
--name redis \
-v redis-data:/data \
-v $(pwd)/redis.conf:/usr/local/etc/redis/redis.conf:ro \
-p 6379:6379 \
redis:7-alpine \
redis-server /usr/local/etc/redis/redis.conf
本番環境のDocker Run
docker run -d \
--name redis \
--restart unless-stopped \
--memory 1g \
--cpus 1 \
--network app-net \
-v redis-data:/data \
redis:7-alpine \
redis-server \
--requirepass "${REDIS_PASSWORD}" \
--maxmemory 768mb \
--maxmemory-policy allkeys-lru \
--appendonly yes \
--appendfsync everysec
アプリケーションContainerからの接続
docker network create app-net
docker run -d --name redis --network app-net redis:7-alpine
docker run -d \
--name app \
--network app-net \
-e REDIS_URL=redis://redis:6379 \
my-app-image
ユースケース
パスワード認証、LRUエビクション、containerの再起動に耐える永続ストレージを備えた高性能キャッシングレイヤーとしてRedisをWebアプリケーション向けにデプロイする場合に使用します。