Redis入門:DockerでRedis環境を構築する

スポンサーリンク
Redis入門:DockerでRedis環境を構築する 環境構築
Redis入門:DockerでRedis環境を構築する
この記事は約8分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、Redisの実行環境をDockerで構築する方法についてご紹介します。

スポンサーリンク

背景

Redisの実行環境をDockerで構築する方法について調査する機会があったので、そのときの内容を備忘として残しました。

今回作成したファイルは下記のGitHUBにあります。

概要

Redis(Remote Dictionary Server)は、高性能でオープンソースのインメモリデータベースおよびキャッシュストアです。以下に、Redisの主な特徴と用途について説明します。

  1. データ構造のサポート:
    Redisは、さまざまなデータ構造をサポートしています。文字列、ハッシュ、リスト、セット、ソート済みセットなどがあり、それぞれ異なる用途に利用できます。この柔軟性により、様々なアプリケーションのデータ管理に利用できます。
  2. インメモリデータベース:
    Redisはメモリ内にデータを保持するため、非常に高速な読み書きが可能です。ただし、データは通常ディスクにも永続化されます。そのため、高いパフォーマンスを提供しながらも、データの永続性も確保されます。
  3. キャッシュとしての利用:
    Redisはキャッシュとしても広く利用されています。データベースやAPIなどから取得したデータをメモリ内に保持し、高速な応答を提供することが可能です。これにより、データベースへのアクセスや計算コストを削減できます。
  4. パブサブメッセージング:
    Redisはパブサブ(Publish-Subscribe)メッセージングモデルをサポートしています。これにより、異なる部分でのイベント駆動型の通信が可能であり、リアルタイムな情報伝達に適しています。
  5. トランザクション:
    Redisは複数のコマンドをまとめて実行するトランザクションもサポートしています。これにより、複数のコマンドがアトミックに実行されることが保証されます。
  6. クラスタリング:
    Redisは、複数のサーバーをクラスターとして構成し、データを分散して格納できます。これにより、大規模かつ高可用性な環境で利用することができます。
  7. 豊富なクライアントサポート:
    Redisには多くのプログラミング言語向けのクライアントライブラリが提供されており、利用が容易です。これにより、様々なプログラミング環境でRedisを利用することができます。

Redisはこれらの特徴から、高いパフォーマンスが要求されるアプリケーションや、リアルタイムなデータ処理が必要な場面で広く利用されています。

今回はその環境をDockerで構築したときの内容を共有します。

ファイル一覧

下記のファイルを作成しました。

        new file:   Makefile
        new file:   compose.yml
        new file:   redis/Dockerfile

redis/Dockerfile

FROM redis:7.2.4-alpine

compose.yml

version: '3.8'

services:

  redis:
    build: ./redis
    container_name: redis
    ports:
      - '6379:6379'

Makefile

SHELL = /bin/bash
WOKR_DIR = ./
.DEFAULT_GOAL := help

# コンテナの状態
.PHONY: ps
ps:
	cd $(WOKR_DIR) \
	&& docker compose ps

# アプリのビルド
.PHONY: build
build:
	cd $(WOKR_DIR) \
	&& docker compose build

# アプリの起動
.PHONY: up
up:
	cd $(WOKR_DIR) \
	&& docker compose up -d

# アプリの停止
.PHONY: down
down:
	cd $(WOKR_DIR) \
	&& docker compose down

# コンテナのログ
.PHONY: log
log:
	cd $(WOKR_DIR) \
	&& docker compose logs

# コンテナの削除
.PHONY: clean
clean:
	cd $(WOKR_DIR) \
	&& docker compose down --rmi all --volumes --remove-orphans

# Redisコンテナへのログイン
.PHONY: login
login:
	cd $(WOKR_DIR) \
	&& docker compose exec -it redis sh

# help
.PHONY: help
help:
	@grep -B 2 -E '^[a-zA-Z_-]+:' Makefile \
	| grep -v '.PHONY' \
    | grep -v -E '^\s*$$' \
	| tr '\n' ',' \
	| sed 's/--,/\n/g' \
	| awk -F, '{printf "%-20s %s\n", $$2, $$1}'

動作確認

下記のコマンドを実行します。

make build

make up

make login

redis-cli --version

下図のような実行結果になっていれば成功です。

/data # redis-cli --version
redis-cli 7.2.4

解説

compose.yml

このコードは、Docker Composeと呼ばれるツールを使用して、Dockerコンテナを定義および実行するための設定ファイルです。この設定は、Redisと呼ばれるデータベースのDockerコンテナを構築し、実行するためのものです。

ここで使われている主な要素を見ていきましょう。

  1. version: ‘3.8’:
    この行は、Docker Composeのバージョンを指定しています。この例では、バージョン3.8が使用されています。
  2. services:
    services セクションは、定義するサービス(コンテナ)の設定を含みます。この例では、redis というサービスが定義されています。
  3. redis サービス:
   redis:
     build: ./redis
     container_name: redis
     ports:
       - '6379:6379'
  • build: ./redis: ./redis ディレクトリにある Dockerfile を使用して、Redisのイメージをビルドします。Dockerfileは、Redisコンテナのビルド手順を定義します。
  • container_name: redis: このコンテナの名前を redis に設定します。この名前は、Dockerネットワーク内でのコンテナの識別に使用されます。
  • ports: ポートのマッピングを行っています。6379:6379 は、ホストマシンのポート 6379 とコンテナのポート 6379 をマッピングします。これにより、ホストマシンから Redis にアクセスできます。

この設定を使用すると、docker-compose up コマンドを実行することで、定義した redis サービスが実行され、ホストマシンのポート 6379 がコンテナのポート 6379 にマッピングされます。これにより、ホストマシンから Redis にアクセスできるようになります。

Makefile

これはMakefileと呼ばれるビルドツールの設定ファイルの一例です。Makefileは主にCやC++などのソースコードをコンパイルするために使用されますが、この例ではDockerコマンドのラッパーとして使用されています。以下に各ターゲット(タスク)の概要を示します。

  1. 変数定義:
   SHELL = /bin/bash
   WOKR_DIR = ./
   .DEFAULT_GOAL := help
  • SHELL: Makefile内で使用されるシェルを指定します。
  • WOKR_DIR: ワーキングディレクトリを指定します。
  • .DEFAULT_GOAL: メイクファイルを引数なしで実行したときに実行されるデフォルトのターゲットを指定します。
  1. ターゲット定義:
  • ps: Dockerコンテナの状態を表示します。
  • build: アプリのビルドを行います。
  • up: アプリをバックグラウンドで起動します。
  • down: アプリを停止します。
  • log: Dockerコンテナのログを表示します。
  • clean: コンテナを停止し、関連するイメージ、ボリューム、孤立したコンテナを削除します。
  • login: Redisコンテナに対して対話的なシェルでログインします。
  • help: 利用可能なターゲット(タスク)の一覧を表示します。
  1. 各ターゲットの実行コマンド:
    各ターゲットの実行コマンドは、Makefile内で定義されたワーキングディレクトリに移動して、対応するDockerコマンドを実行するようになっています。
  2. helpターゲットの生成:
    help ターゲットでは、Makefile内の各ターゲットに対してコメントを追加し、make help コマンドを実行したときに利用可能なタスクの一覧を表示します。grepやawkを使用してMakefile内のコメントを抽出しています。

このMakefileは、Docker Composeを使って複数のDockerコンテナを管理するためのシンプルなラッパーとして機能します。特に、Dockerコマンドを簡略化し、一貫性を持たせるために使われています。

おわりに

今日は、Redisの実行環境をDockerで構築する方法についてご紹介しました。

よっしー
よっしー

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました