DockerでRedisを実行する

永続化、パスワード認証、カスタム設定、メモリ制限を備えたRedisをDockerで実行する方法を学びます。一般的なキャッシングとセッションストアのパターンについて解説します。

Real-World Stacks

詳細な説明

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アプリケーション向けにデプロイする場合に使用します。

試してみる — Docker Run Command Builder

フルツールを開く