よっしー
こんにちは。よっしーです(^^)
今日は、Dockerを利用してRedisのレプリケーション環境を構築した方法についてご紹介します。
背景
Redisでレプリケーション環境を構築する機会があったので、ローカルで検証用に構築したときの方法を備忘として残しました。
ファイル構成
下記のファイルを用意しました。
.
├── compose.yml
├── redis-replica
│ └── Dockerfile
└── redis-source
└── Dockerfile
redis-source/Dockerfile
FROM redis:7.2.0-alpine
redis-replica/Dockerfile
FROM redis:7.2.0-alpine
compose.yml
version: '3.7'
services:
redis-source:
build: ./redis-source
container_name: redis-source
hostname: redis-source
ports:
- '6379:6379'
networks:
- net
redis-replica:
build: ./redis-replica
container_name: redis-replica
hostname: redis-replica
ports:
- '6380:6379'
command: redis-server --slaveof redis-source 6379
networks:
- net
depends_on:
- redis-source
redis-commander:
image: rediscommander/redis-commander
container_name: redis-commander
environment:
- REDIS_HOSTS=source:redis-source:6379,replica:redis-replica:6379
ports:
- "8081:8081"
networks:
- net
networks:
net:
動作確認
下記のコマンドを実施します。
# ビルド
docker compose build
# 起動
docker compose up -d
下記のコマンドを実施します。
% docker compose exec -it redis-source redis-cli -p 6379 GET test_key
(nil)
% docker compose exec -it redis-source redis-cli -p 6379 SET test_key 1
OK
% docker compose exec -it redis-source redis-cli -p 6379 GET test_key
"1"
ブラウザで「http://localhost:8081/」にアクセスすると、replicaにtest_keyが存在することが確認できれば成功です。
解説
このDocker Composeファイルは、複数のDockerコンテナを使用してRedisデータベースのソースとレプリカをセットアップするためのものです。以下でコードのセクションごとに説明します。
version: '3.7'
: Docker Composeファイルのバージョンを指定しています。このファイルはDocker Composeバージョン3.7で記述されています。services
: このセクションでは、各個別のDockerコンテナを定義しています。redis-source
: これはRedisのソースデータベースを表すコンテナです。./redis-source
ディレクトリからビルドされるイメージを使用します。コンテナ名やホスト名が指定され、ポート6379
をコンテナの6379
ポートにマッピングして外部からアクセスできるようにします。同じネットワーク(net
)に接続されます。redis-replica
: これはRedisのレプリカデータベースを表すコンテナです。ソースデータベースをレプリケーションするため、redis-server --slaveof redis-source 6379
コマンドが実行されます。ソースコンテナに依存しており、依存関係が満たされると起動します。ポート6380
をコンテナの6379
ポートにマッピングして外部からアクセスできるようにします。redis-commander
: これはRedisデータベースを可視化するためのRedis Commanderというツールのコンテナです。公式のイメージを使用します。REDIS_HOSTS
環境変数にソースデータベースとレプリカデータベースの情報を指定しています。ポート8081
をコンテナの8081
ポートにマッピングして外部からアクセスできるようにします。
networks
: このセクションでは、Dockerコンテナ間のネットワークを定義します。net
: ネットワークの名前をnet
としています。すべてのコンテナがこのネットワークに接続され、同じネットワーク内で通信できるようになります。
このコード全体では、ソースデータベースとレプリカデータベースを起動し、Redis Commanderを使用してこれらのデータベースを可視化するための環境を構築しています。コンテナ同士の通信は同じネットワークを介して行われます。
おわりに
今日は、Dockerを利用してRedisのレプリケーション環境を構築した方法についてご紹介しました。
よっしー
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント