Redis Docker Compose 構築:永続化・監視・TLS まで 1 ファイルで
Redis をプロダクション環境で運用する際、永続化設定、監視、セキュリティ対策が不可欠です。これらを 1 つの docker-compose.yml ファイルで完結させることで、環境構築の手間を大幅に削減できます。
本記事では、Redis Server の構築から永続化設定、Redis Insight による監視、TLS 通信の実装まで、実務で使える構成を段階的に解説していきますね。初めて Redis を Docker Compose で構築する方でも、この記事を読めば本番運用レベルの環境を作れるようになります。
背景
Redis の役割と Docker 化のメリット
Redis はインメモリデータベースとして Web アプリケーションのキャッシュ、セッション管理、リアルタイムデータ処理に広く活用されています。高速なデータアクセスが求められるモダンなアプリケーションでは、Redis は欠かせない存在となっていますね。
Docker Compose を使うことで、開発環境と本番環境の差異を最小化し、チーム全体で同じ環境を共有できます。また、バージョン管理やスケーリングも容易になるため、DevOps 実践においても重要な技術です。
以下の図は、一般的な Web アプリケーションにおける Redis の位置づけを示しています。
mermaidflowchart TB
client["クライアント<br/>(ブラウザ)"]
app["Webアプリケーション<br/>(Next.js/Node.js)"]
redis["Redis<br/>(キャッシュ層)"]
db[("MySQL/PostgreSQL<br/>(永続化層)")]
client -->|HTTPリクエスト| app
app -->|1. キャッシュ確認| redis
redis -->|キャッシュヒット| app
app -->|2. キャッシュミス時| db
db -->|データ取得| app
app -->|3. キャッシュ保存| redis
app -->|HTTPレスポンス| client
図から読み取れる要点:
- Redis はアプリケーションとデータベースの間に位置するキャッシュ層
- 頻繁にアクセスされるデータをメモリに保持し、データベースへの負荷を軽減
- レスポンス時間の短縮に貢献
Redis の永続化とセキュリティの必要性
Redis はインメモリデータベースですが、データの永続化機能も備えています。RDB(スナップショット)と AOF(Append Only File)の 2 つの方式があり、用途に応じて使い分けることが重要です。
また、本番環境では TLS/SSL による通信の暗号化が求められます。クレデンシャル情報やセッションデータを扱う場合、暗号化なしでは情報漏洩のリスクが高まりますね。
監視機能も見逃せません。Redis Insight を導入することで、メモリ使用量、接続数、コマンド実行状況をリアルタイムで可視化でき、パフォーマンスチューニングや障害対応がスムーズになります。
課題
本番運用を想定した構築の複雑さ
Redis を単に Docker で起動するだけなら簡単ですが、本番運用を見据えた構成は複雑になりがちです。具体的には以下の課題があります。
データ永続化の課題:
- コンテナ再起動時にデータが消失してしまう
- RDB と AOF の設定を適切に行わないと、データ損失のリスクがある
- スナップショット取得のタイミングやファイルサイズの管理が必要
セキュリティの課題:
- デフォルト設定では認証なしでアクセス可能
- 平文通信のため、ネットワーク盗聴のリスクがある
- TLS 証明書の生成と設定が煩雑
監視・運用の課題:
- コマンドラインツールだけではメトリクスの可視化が困難
- メモリ使用量の監視やアラート設定が別途必要
- 複数のツールを組み合わせると設定ファイルが分散する
以下の図は、これらの課題がどのように関連しているかを示しています。
mermaidflowchart TD
start["Redis構築開始"]
basic["基本的な起動"]
issues["本番運用の課題"]
persist["データ永続化"]
security["セキュリティ"]
monitor["監視・運用"]
risk1["データ損失リスク"]
risk2["情報漏洩リスク"]
risk3["障害検知遅延"]
start --> basic
basic --> issues
issues --> persist
issues --> security
issues --> monitor
persist --> risk1
security --> risk2
monitor --> risk3
図で理解できる要点:
- 基本的な起動だけでは本番運用の課題をカバーできない
- 永続化、セキュリティ、監視の 3 つの柱が重要
- それぞれの課題が異なるリスクに直結
設定ファイルの分散と管理コスト
Redis 本体の設定、TLS 証明書の生成スクリプト、監視ツールの設定を別々に管理すると、環境構築の手順が複雑化します。新しいメンバーがプロジェクトに参加した際の学習コストも増大しますね。
理想的には、1 つの docker-compose.yml ファイルで全ての設定を完結させ、docker compose upコマンド 1 つで環境が立ち上がる状態が望ましいです。
解決策
1 ファイルで完結する Docker Compose 構成
本記事で紹介する構成では、以下の要素を 1 つの docker-compose.yml ファイルに集約します。
| # | 構成要素 | 役割 |
|---|---|---|
| 1 | Redis Server | データストア本体、永続化設定を含む |
| 2 | Redis Insight | Web UI による監視・管理ツール |
| 3 | TLS 証明書生成 | 自己署名証明書の自動生成 |
| 4 | Docker Volume | データとログの永続化 |
| 5 | Docker Network | サービス間の安全な通信 |
この構成により、以下のメリットが得られます。
環境構築の簡素化:
- 複雑な手順書が不要になる
docker compose up -dだけで全てのサービスが起動- チーム全体で同一環境を即座に再現可能
運用の効率化:
- 設定変更が 1 ファイルで完結
- バージョン管理が容易
- 環境のポータビリティが向上
以下の図は、Docker Compose によるサービス構成を示しています。
mermaidflowchart LR
compose["docker-compose.yml"]
subgraph services["Docker Services"]
redis["redis<br/>(Redis Server)"]
insight["redis-insight<br/>(監視UI)"]
cert["cert-generator<br/>(証明書生成)"]
end
subgraph volumes["Volumes"]
data["redis-data"]
logs["redis-logs"]
certs["redis-certs"]
end
subgraph network["Network"]
redisnet["redis-network"]
end
compose --> services
redis --> data
redis --> logs
redis --> certs
insight --> certs
cert --> certs
redis -.->|TLS通信| redisnet
insight -.->|TLS通信| redisnet
図で理解できる要点:
- 3 つのサービスが連携して動作
- Volume によりデータが永続化
- 専用ネットワークで安全に通信
RDB + AOF によるハイブリッド永続化
Redis の永続化は、RDB と AOF を組み合わせることで信頼性が高まります。
RDB(スナップショット)の特徴:
- 定期的にメモリ内のデータをディスクに保存
- ファイルサイズが小さく、復旧が高速
- スナップショット間のデータは失われる可能性がある
AOF(Append Only File)の特徴:
- 全ての書き込みコマンドをログとして記録
- データ損失のリスクが最小限
- ファイルサイズが大きくなる傾向がある
これら 2 つを併用することで、高速な復旧と高いデータ保護を両立できます。
TLS による通信暗号化
自己署名証明書を使用し、Redis クライアントと Redis Server 間の通信を TLS/SSL で暗号化します。本番環境では認証局から取得した証明書を使用しますが、開発環境やプライベートネットワークでは自己署名証明書が有効です。
証明書の生成は Docker コンテナ内で自動化し、手動での作業を不要にします。
Redis Insight による可視化
Redis Insight は、RedisLabs が提供する公式の GUI ツールです。以下の機能を備えています。
| # | 機能 | 説明 |
|---|---|---|
| 1 | データブラウザ | キーと値をグラフィカルに表示・編集 |
| 2 | パフォーマンス監視 | メモリ使用量、接続数、コマンド統計 |
| 3 | CLI 統合 | Web 上で Redis CLI を実行可能 |
| 4 | プロファイリング | スロークエリの検出 |
これにより、運用時の可視性が大幅に向上します。
具体例
全体のディレクトリ構成
プロジェクトのディレクトリ構成は以下のようになります。
bashredis-docker/
├── docker-compose.yml # メインの設定ファイル
├── redis/
│ └── redis.conf # Redis設定ファイル
├── certs/ # TLS証明書(自動生成)
│ ├── ca.crt
│ ├── redis.crt
│ └── redis.key
├── data/ # Redisデータ(永続化)
└── logs/ # Redisログ
このシンプルな構成で、全ての機能を実現します。
Docker Compose 設定ファイルの作成
まず、docker-compose.yml ファイルを作成します。このファイルには 3 つのサービスを定義します。
バージョンとネットワーク定義
最初に、Docker Compose のバージョンとネットワークを定義します。
yamlversion: '3.8'
networks:
redis-network:
driver: bridge
Volume 定義
データ永続化のための Volume を定義します。
yamlvolumes:
redis-data:
driver: local
redis-logs:
driver: local
redis-certs:
driver: local
これらの Volume により、コンテナを削除してもデータが保持されます。
TLS 証明書生成サービス
証明書を自動生成するサービスを定義します。このサービスはワンショットで実行され、証明書生成後に終了します。
yamlservices:
cert-generator:
image: alpine:latest
container_name: redis-cert-generator
volumes:
- redis-certs:/certs
command: >
sh -c "
apk add --no-cache openssl &&
cd /certs &&
if [ ! -f redis.key ]; then
echo 'Generating TLS certificates...' &&
openssl genrsa -out ca.key 4096 &&
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj '/CN=Redis CA' &&
openssl genrsa -out redis.key 4096 &&
openssl req -new -key redis.key -out redis.csr -subj '/CN=redis' &&
openssl x509 -req -days 3650 -in redis.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out redis.crt &&
chmod 644 redis.crt ca.crt &&
chmod 600 redis.key &&
echo 'Certificates generated successfully';
else
echo 'Certificates already exist';
fi
"
このサービスの処理内容:
- Alpine Linux を使用し軽量化
- OpenSSL で自己署名証明書を生成
- CA(認証局)証明書、サーバー証明書、秘密鍵を作成
- ファイルパーミッションを適切に設定
- 既存の証明書がある場合はスキップ
証明書の有効期限は 10 年(3650 日)に設定しています。
Redis Server 設定
次に、Redis Server のサービスを定義します。このサービスが中核となります。
yamlredis:
image: redis:7.2-alpine
container_name: redis-server
restart: unless-stopped
ports:
- '6379:6379'
volumes:
- redis-data:/data
- redis-logs:/var/log/redis
- redis-certs:/certs:ro
- ./redis/redis.conf:/usr/local/etc/redis/redis.conf:ro
networks:
- redis-network
depends_on:
cert-generator:
condition: service_completed_successfully
設定のポイント:
- Redis 7.2 を使用(最新の安定版)
restart: unless-stoppedで自動再起動を設定- ポート 6379 を公開
- 証明書は読み取り専用(
:ro)でマウント - 証明書生成完了後に起動
Redis 起動コマンドの設定
Redis の起動コマンドを設定し、認証と TLS を有効にします。
yamlcommand: >
redis-server
--requirepass your_strong_password_here
--tls-port 6379
--port 0
--tls-cert-file /certs/redis.crt
--tls-key-file /certs/redis.key
--tls-ca-cert-file /certs/ca.crt
--tls-auth-clients no
--save 900 1
--save 300 10
--save 60 10000
--appendonly yes
--appendfsync everysec
--dir /data
--logfile /var/log/redis/redis-server.log
コマンドオプションの説明:
| # | オプション | 説明 |
|---|---|---|
| 1 | --requirepass | パスワード認証を設定(本番では必ず変更) |
| 2 | --tls-port 6379 | TLS ポートを 6379 に設定 |
| 3 | --port 0 | 非暗号化ポートを無効化 |
| 4 | --tls-cert-file | サーバー証明書のパス |
| 5 | --tls-key-file | 秘密鍵のパス |
| 6 | --tls-ca-cert-file | CA 証明書のパス |
| 7 | --tls-auth-clients no | クライアント証明書を要求しない |
| 8 | --save | RDB スナップショットの保存間隔 |
| 9 | --appendonly yes | AOF を有効化 |
| 10 | --appendfsync everysec | 1 秒ごとにディスクに同期 |
RDB 保存ポリシーの詳細:
900 1:900 秒(15 分)で 1 件以上の変更があれば保存300 10:300 秒(5 分)で 10 件以上の変更があれば保存60 10000:60 秒(1 分)で 10000 件以上の変更があれば保存
このハイブリッド設定により、高頻度の書き込みにも対応しながらデータ保護を実現します。
Redis Insight 設定
最後に、監視ツールの Redis Insight を設定します。
yamlredis-insight:
image: redis/redisinsight:latest
container_name: redis-insight
restart: unless-stopped
ports:
- '5540:5540'
volumes:
- redis-certs:/certs:ro
networks:
- redis-network
depends_on:
- redis
environment:
- REDIS_HOSTS=local:redis:6379
設定のポイント:
- ポート 5540 で Web UI にアクセス可能
- Redis サービスの起動後に開始
- 証明書を共有して TLS 接続に対応
Redis Insight には、ブラウザでhttp://localhost:5540にアクセスすることで利用できます。
完全な docker-compose.yml ファイル
以下が完全な設定ファイルです。このファイル 1 つで全ての機能が動作します。
yamlversion: '3.8'
networks:
redis-network:
driver: bridge
volumes:
redis-data:
driver: local
redis-logs:
driver: local
redis-certs:
driver: local
services:
# TLS証明書生成サービス
cert-generator:
image: alpine:latest
container_name: redis-cert-generator
volumes:
- redis-certs:/certs
command: >
sh -c "
apk add --no-cache openssl &&
cd /certs &&
if [ ! -f redis.key ]; then
echo 'Generating TLS certificates...' &&
openssl genrsa -out ca.key 4096 &&
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj '/CN=Redis CA' &&
openssl genrsa -out redis.key 4096 &&
openssl req -new -key redis.key -out redis.csr -subj '/CN=redis' &&
openssl x509 -req -days 3650 -in redis.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out redis.crt &&
chmod 644 redis.crt ca.crt &&
chmod 600 redis.key &&
echo 'Certificates generated successfully';
else
echo 'Certificates already exist';
fi
"
# Redis Server
redis:
image: redis:7.2-alpine
container_name: redis-server
restart: unless-stopped
ports:
- '6379:6379'
volumes:
- redis-data:/data
- redis-logs:/var/log/redis
- redis-certs:/certs:ro
networks:
- redis-network
depends_on:
cert-generator:
condition: service_completed_successfully
command: >
redis-server
--requirepass your_strong_password_here
--tls-port 6379
--port 0
--tls-cert-file /certs/redis.crt
--tls-key-file /certs/redis.key
--tls-ca-cert-file /certs/ca.crt
--tls-auth-clients no
--save 900 1
--save 300 10
--save 60 10000
--appendonly yes
--appendfsync everysec
--dir /data
--logfile /var/log/redis/redis-server.log
# Redis Insight(監視UI)
redis-insight:
image: redis/redisinsight:latest
container_name: redis-insight
restart: unless-stopped
ports:
- '5540:5540'
volumes:
- redis-certs:/certs:ro
networks:
- redis-network
depends_on:
- redis
environment:
- REDIS_HOSTS=local:redis:6379
環境の起動と確認
作成した docker-compose.yml を使って環境を起動します。
サービスの起動
以下のコマンドで全てのサービスを起動します。
bash# バックグラウンドで起動
docker compose up -d
# ログを確認しながら起動(初回推奨)
docker compose up
初回起動時は、証明書の生成プロセスが実行されます。ログに「Certificates generated successfully」と表示されれば成功です。
サービスの状態確認
起動したサービスの状態を確認します。
bash# サービス一覧と状態を表示
docker compose ps
# 各サービスのログを確認
docker compose logs redis
docker compose logs redis-insight
正常に起動していれば、以下のような出力が得られます。
bashNAME IMAGE STATUS
redis-cert-generator alpine:latest Exited (0)
redis-server redis:7.2-alpine Up 2 minutes
redis-insight redis/redisinsight:latest Up 2 minutes
cert-generator は証明書生成後に終了するため、Exited (0)となるのが正常です。
Redis 接続テスト
redis-cli での接続
TLS を有効にした Redis に接続するには、redis-cli で TLS オプションを指定します。
bash# Dockerコンテナ内でredis-cliを実行
docker exec -it redis-server redis-cli \
--tls \
--cert /certs/redis.crt \
--key /certs/redis.key \
--cacert /certs/ca.crt \
-a your_strong_password_here
接続成功後、以下のコマンドでテストできます。
bash# 疎通確認
127.0.0.1:6379> PING
PONG
# データ書き込みテスト
127.0.0.1:6379> SET test_key "Hello Redis"
OK
# データ読み取りテスト
127.0.0.1:6379> GET test_key
"Hello Redis"
Node.js からの接続例
アプリケーションから接続する場合の例を示します。まず、必要なパッケージをインストールします。
bash# ioredisパッケージのインストール
yarn add ioredis
次に、TLS 接続の設定を含むクライアントコードを作成します。
javascript// redis-client.js
const Redis = require('ioredis');
const fs = require('fs');
// TLS証明書を読み込み
const tls = {
ca: fs.readFileSync('./certs/ca.crt'),
cert: fs.readFileSync('./certs/redis.crt'),
key: fs.readFileSync('./certs/redis.key'),
rejectUnauthorized: false, // 自己署名証明書の場合
};
次に、Redis 接続設定とエラーハンドリングを実装します。
javascript// Redis接続の設定
const redis = new Redis({
host: 'localhost',
port: 6379,
password: 'your_strong_password_here',
tls: tls,
retryStrategy: (times) => {
const delay = Math.min(times * 50, 2000);
return delay;
},
});
接続イベントとエラーハンドリングを設定します。
javascript// 接続イベント
redis.on('connect', () => {
console.log('✓ Redis接続成功');
});
redis.on('error', (err) => {
console.error('✗ Redis接続エラー:', err);
});
redis.on('ready', () => {
console.log('✓ Redisが使用可能になりました');
});
最後に、実際のデータ操作を実行します。
javascript// データ操作の例
async function testRedis() {
try {
// データ書き込み
await redis.set(
'user:1001',
JSON.stringify({
name: 'Tanaka Taro',
email: 'tanaka@example.com',
})
);
console.log('✓ データ書き込み成功');
// データ読み取り
const data = await redis.get('user:1001');
console.log('✓ データ読み取り:', JSON.parse(data));
// TTL付きデータ
await redis.setex(
'session:abc123',
3600,
'session_data'
);
console.log('✓ セッションデータ保存(TTL: 1時間)');
} catch (error) {
console.error('エラー:', error);
}
}
// テスト実行
testRedis();
このコードを実行すると、TLS 経由で Redis に安全に接続できます。
Redis Insight での監視
ブラウザでhttp://localhost:5540にアクセスし、Redis Insight を開きます。初回アクセス時は接続設定が必要です。
接続設定手順
- 「Add Redis Database」をクリック
- 以下の情報を入力します:
| # | 項目 | 値 |
|---|---|---|
| 1 | Host | redis |
| 2 | Port | 6379 |
| 3 | Database Alias | Redis Docker |
| 4 | Username | (空欄) |
| 5 | Password | your_strong_password_here |
| 6 | Use TLS | ✓ チェックを入れる |
- 「Test Connection」で接続を確認
- 「Add Redis Database」で保存
接続後、以下の情報を可視化できます。
ダッシュボードで確認できる項目:
- メモリ使用量とピーク値
- 接続中のクライアント数
- 実行されたコマンド数
- キーの総数とデータ型の分布
- ヒット率とミス率
ブラウザ機能:
- キーの一覧表示と検索
- 値の表示・編集・削除
- データ型に応じたビューアー(JSON、Hash、List 等)
以下の図は、Redis Insight と Redis Server の監視フローを示しています。
mermaidsequenceDiagram
participant User as ユーザー
participant Insight as Redis Insight
participant Redis as Redis Server
User->>Insight: ブラウザでアクセス<br/>(port 5540)
Insight->>Redis: TLS接続確立<br/>(認証情報送信)
Redis-->>Insight: 認証成功
Insight->>Redis: INFO コマンド
Redis-->>Insight: サーバー情報
Insight->>Redis: DBSIZE コマンド
Redis-->>Insight: キー数
Insight->>Redis: MEMORY USAGE
Redis-->>Insight: メモリ使用量
Insight-->>User: ダッシュボード表示
図で理解できる要点:
- Redis Insight は Redis 標準コマンドで情報を取得
- TLS 接続により安全に通信
- リアルタイムで統計情報を更新
データ永続化の確認
永続化が正しく機能しているかを確認します。
データ書き込みとコンテナ再起動
以下の手順でデータが保持されることを確認します。
bash# 1. テストデータを書き込む
docker exec -it redis-server redis-cli \
--tls \
--cert /certs/redis.crt \
--key /certs/redis.key \
--cacert /certs/ca.crt \
-a your_strong_password_here \
SET persistent_test "This data should survive restart"
次に、コンテナを再起動してデータの永続性を確認します。
bash# 2. Redisコンテナを再起動
docker compose restart redis
# 3. 再起動後にデータを確認
docker exec -it redis-server redis-cli \
--tls \
--cert /certs/redis.crt \
--key /certs/redis.key \
--cacert /certs/ca.crt \
-a your_strong_password_here \
GET persistent_test
「This data should survive restart」が返ってくれば、永続化が正常に機能しています。
RDB と AOF ファイルの確認
永続化ファイルが生成されているか確認します。
bash# Redisデータディレクトリの内容を確認
docker exec -it redis-server ls -lh /data
# 出力例:
# -rw-r--r-- 1 redis redis 245K Jan 15 12:30 appendonly.aof.1.incr.aof
# -rw-r--r-- 1 redis redis 88 Jan 15 12:30 appendonly.aof.1.base.rdb
# -rw-r--r-- 1 redis redis 110 Jan 15 12:30 appendonly.aof.manifest
# -rw-r--r-- 1 redis redis 1.2M Jan 15 12:30 dump.rdb
RDB ファイル(dump.rdb)と AOF ファイル群が存在していれば、ハイブリッド永続化が機能しています。
エラー処理とトラブルシューティング
実際の運用で遭遇する可能性のあるエラーと対処法を紹介します。
Error 1: 認証エラー
エラーコード: NOAUTH Authentication required
エラーメッセージ:
go(error) NOAUTH Authentication required.
発生条件:
- パスワードを指定せずに接続した場合
- 間違ったパスワードを使用した場合
解決方法:
- 正しいパスワードを確認する
bash# docker-compose.ymlの--requirepassの値を確認
grep "requirepass" docker-compose.yml
-aオプションでパスワードを指定して再接続
bashdocker exec -it redis-server redis-cli \
--tls \
--cert /certs/redis.crt \
--key /certs/redis.key \
--cacert /certs/ca.crt \
-a your_strong_password_here
Error 2: TLS 接続エラー
エラーコード: Error: 139693121169216:error
エラーメッセージ:
vbnetError: Connection lost with error "Error: 139693121169216:error:
1408F10B:SSL routines:ssl3_get_record:wrong version number"
発生条件:
- TLS ポートに非 TLS クライアントで接続した場合
- 証明書ファイルのパスが間違っている場合
解決方法:
- 証明書ファイルの存在を確認
bash# 証明書が生成されているか確認
docker exec -it redis-server ls -l /certs
# 出力例:
# -rw-r--r-- 1 root root 2049 Jan 15 12:25 ca.crt
# -rw-r--r-- 1 root root 2094 Jan 15 12:25 redis.crt
# -rw------- 1 root root 3272 Jan 15 12:25 redis.key
- TLS オプションを正しく指定して接続
bash# 必ず--tlsオプションと証明書パスを指定
docker exec -it redis-server redis-cli \
--tls \
--cert /certs/redis.crt \
--key /certs/redis.key \
--cacert /certs/ca.crt
- 証明書の再生成が必要な場合
bash# 証明書Volumeを削除
docker compose down -v
docker volume rm redis-docker_redis-certs
# 再起動して証明書を再生成
docker compose up -d
Error 3: メモリ不足エラー
エラーコード: OOM command not allowed when used memory > 'maxmemory'
エラーメッセージ:
vbnet(error) OOM command not allowed when used memory > 'maxmemory'.
発生条件:
- Redis のメモリ使用量が上限に達した場合
- maxmemory ポリシーが適切に設定されていない場合
解決方法:
- 現在のメモリ使用状況を確認
bash# Redis内でメモリ情報を確認
docker exec -it redis-server redis-cli \
--tls \
--cert /certs/redis.crt \
--key /certs/redis.key \
--cacert /certs/ca.crt \
-a your_strong_password_here \
INFO memory
- maxmemory とエビクションポリシーを設定
docker-compose.yml の command セクションに以下を追加します。
yamlcommand: >
redis-server
--requirepass your_strong_password_here
--maxmemory 2gb
--maxmemory-policy allkeys-lru
# ... 他のオプション
maxmemory-policy の選択肢:
| # | ポリシー | 説明 | 推奨用途 |
|---|---|---|---|
| 1 | allkeys-lru | 全てのキーから LRU で削除 | キャッシュ用途 |
| 2 | allkeys-lfu | 全てのキーから LFU で削除 | アクセス頻度重視 |
| 3 | volatile-lru | TTL 付きキーから LRU で削除 | 混在用途 |
| 4 | volatile-ttl | TTL が短いキーから削除 | TTL 管理重視 |
| 5 | noeviction | エビクションしない(エラー) | データ損失厳禁 |
- 設定変更後はサービスを再起動
bashdocker compose restart redis
Error 4: ポート競合エラー
エラーメッセージ:
perlError response from daemon: Ports are not available:
exposing port TCP 0.0.0.0:6379 -> 0.0.0.0:0: listen tcp 0.0.0.0:6379:
bind: address already in use
発生条件:
- 他のプロセスが既にポート 6379 または 5540 を使用している場合
解決方法:
- ポートを使用しているプロセスを確認
bash# macOS/Linuxの場合
lsof -i :6379
lsof -i :5540
# Windowsの場合
netstat -ano | findstr :6379
- ポートを変更する
docker-compose.yml の ports セクションを変更します。
yamlservices:
redis:
ports:
- '6380:6379' # ホスト側のポートを6380に変更
redis-insight:
ports:
- '5541:5540' # ホスト側のポートを5541に変更
Error 5: Volume 権限エラー
エラーメッセージ:
vbnetCan't open the log file: Permission denied
発生条件:
- Docker ボリュームのパーミッションが不適切な場合
解決方法:
- ログディレクトリの権限を確認
bashdocker exec -it redis-server ls -ld /var/log/redis
- 必要に応じて権限を修正
bash# Redisコンテナ内で権限修正
docker exec -it redis-server chmod 755 /var/log/redis
- 環境を再起動
bashdocker compose restart redis
パフォーマンスチューニング
本番環境でのパフォーマンス最適化の設定例を紹介します。
メモリ最適化設定
docker-compose.yml に以下のオプションを追加します。
yamlcommand: >
redis-server
--maxmemory 4gb
--maxmemory-policy allkeys-lru
--maxmemory-samples 5
--tcp-backlog 511
--timeout 300
# ... 他のオプション
各オプションの意味:
maxmemory-samples:LRU アルゴリズムのサンプル数(精度と速度のバランス)tcp-backlog:TCP 接続のバックログキュー(高負荷時の接続待ち)timeout:アイドル接続のタイムアウト秒数
AOF 書き込み戦略の調整
データの重要度に応じて AOF の同期頻度を調整します。
yaml# 高速優先(データ損失リスク増)
--appendfsync no
# バランス型(推奨)
--appendfsync everysec
# 安全優先(パフォーマンス低下)
--appendfsync always
用途に応じて選択してください。
まとめ
本記事では、Redis Docker Compose による本番運用レベルの環境構築を解説しました。1 つの docker-compose.yml ファイルで、以下の機能を実現できます。
実装した主要機能:
- 永続化:RDB + AOF のハイブリッド方式でデータ保護
- セキュリティ:TLS/SSL 通信とパスワード認証による多層防御
- 監視:Redis Insight によるリアルタイムな GUI 監視
- 運用性:1 コマンドで起動・停止可能な簡素化された構成
本記事の構成がもたらすメリット:
| # | メリット | 効果 |
|---|---|---|
| 1 | 環境構築の迅速化 | 新規メンバーも数分で環境を再現可能 |
| 2 | 設定の一元管理 | バージョン管理とレビューが容易 |
| 3 | セキュリティの担保 | TLS 暗号化で盗聴リスクを軽減 |
| 4 | データ保護 | コンテナ障害時もデータ損失を防止 |
| 5 | 可視性の向上 | パフォーマンス問題の早期発見 |
この構成をベースに、本番環境では以下の追加対応を検討してください。
本番環境への展開時の追加検討事項:
- 認証局発行の正式な TLS 証明書の導入
- 環境変数や Secrets マネージャーでのパスワード管理
- レプリケーション構成による高可用性の実現
- Sentinel/Cluster による自動フェイルオーバー
- 監視アラートの設定(Prometheus + Grafana 等)
- バックアップ戦略の策定(RDB 定期取得、AOF アーカイブ)
Redis はシンプルながら強力なツールです。適切な設定と運用体制を整えることで、アプリケーションのパフォーマンスと信頼性を大きく向上させることができます。
今回紹介した構成をそのまま使うことも、プロジェクトの要件に合わせてカスタマイズすることもできます。まずは開発環境で試してみて、チームの運用フローに合わせて調整していくのが良いでしょう。
関連リンク
articleRedis Docker Compose 構築:永続化・監視・TLS まで 1 ファイルで
articleRedis Pub/Sub vs Redis Streams:配信保証とスケーラビリティ比較
articleRedis 遅延の原因を特定:Latency Monitor と Slowlog の読み方
articleRedis 7 の新機能まとめ:ACL v2/I/O Threads/RESP3 を一気に把握
articleRedis 監視と可観測性:Prometheus Exporter と Grafana の実践ダッシュボード
articleRedis 使い方:Next.js で Cache-Tag と再検証を実装(Edge/Node 両対応)
articleRedis Docker Compose 構築:永続化・監視・TLS まで 1 ファイルで
articleDocker Compose v2 と k8s(skaffold/tilt)比較検証:ローカル開発どれが最速?
articleDocker イメージ署名と検証:cosign でサプライチェーンを防衛する運用手順
articleDocker で DNS 解決に失敗する時の原因と対処:overlay2・systemd-resolved・WSL2 対応
articleDocker を用いた統一ローカル環境:新人オンボーディングを 1 日 → 1 時間へ
articleDocker で Dev Container を構築:VS Code/Codespaces で即戦力環境を配布
articleTauri vs Electron vs Flutter デスクトップ:UX・DX・配布のしやすさ徹底比較
articleRuby と Python を徹底比較:スクリプト・Web・データ処理での得意分野
articleshadcn/ui のバンドルサイズ影響を検証:Tree Shaking・Code Split の実測データ
articleRedis Docker Compose 構築:永続化・監視・TLS まで 1 ファイルで
articleRemix を選ぶ基準:認証・API・CMS 観点での要件適合チェック
articleReact で管理画面を最短構築:テーブル・フィルタ・権限制御の実例
blogiPhone 17シリーズの発表!全モデルiPhone 16から進化したポイントを見やすく整理
blogGoogleストアから訂正案内!Pixel 10ポイント有効期限「1年」表示は誤りだった
blog【2025年8月】Googleストア「ストアポイント」は1年表記はミス?2年ルールとの整合性を検証
blogGoogleストアの注文キャンセルはなぜ起きる?Pixel 10購入前に知るべき注意点
blogPixcel 10シリーズの発表!全モデル Pixcel 9 から進化したポイントを見やすく整理
blogフロントエンドエンジニアの成長戦略:コーチングで最速スキルアップする方法
review今の自分に満足していますか?『持たざる者の逆襲 まだ何者でもない君へ』溝口勇児
reviewついに語られた業界の裏側!『フジテレビの正体』堀江貴文が描くテレビ局の本当の姿
review愛する勇気を持てば人生が変わる!『幸せになる勇気』岸見一郎・古賀史健のアドラー実践編で真の幸福を手に入れる
review週末を変えれば年収も変わる!『世界の一流は「休日」に何をしているのか』越川慎司の一流週末メソッド
review新しい自分に会いに行こう!『自分の変え方』村岡大樹の認知科学コーチングで人生リセット
review科学革命から AI 時代へ!『サピエンス全史 下巻』ユヴァル・ノア・ハラリが予見する人類の未来