Docker で Redis コンテナを作る方法

この記事は最終更新日から 1年以上 が経過しています。

Web アプリではキャッシュやセッションを保存する際に、Redis がよく使われていたりします。 Docker で Redis のコンテナを作成してみましょう。 XAMPP では Redis をインストールするのはかなり大変でしたが、Docker なら簡単に作成することができます。

Docker で Redis コンテナを作る

コンテナのイメージは、下記の公式イメージを使用します。 イメージのバージョン(タグ)はいろいろありますが、特にこだわりが無いなら最新版(latest)で良いと思います。

docker-compose.yml
version: "3.8"
services:

  # Redis コンテナ
  redis:
    image: redis:latest

ポートを公開する

Redis のデフォルトのポート番号は 6379 番です。

ホスト側から Another Redis Desktop Manager などの管理ツールで接続したい場合は、コンテナ側のポート 6379 番へのマッピングを設定しましょう。 ホスト側のポート番号は、他で使用されていないものなら何番でも良いと思います。

なお、ホスト側から接続しないのであれば、この設定は必要はありません。 Another Redis Desktop Manager などの管理ツールをホストにインストールするのが面倒なのであれば、 後述の Redis Commander コンテナを作成して利用してみましょう。

例:ホスト側のポート 63790 番と、コンテナ側のポート 6379 番をマッピングする場合
docker-compose.yml
version: "3.8"
services:

  # Redis コンテナ
  redis:
    image: redis:latest
    ports:
      - 63790:6379

データが消えないようにする

Redis の中に入っているデータは、大抵キャッシュやセッションのような、消えてしまっても良いような一時的なデータのような気がしますが、 Redis コンテナのデータが消えてしまっては困るという場合は、データが消えないようにボリュームを設定しておきましょう。 ボリュームを設定しない場合は、勝手にハッシュ名のボリュームが作成されるようなのですが、わかりづらいのでちゃんと設定した方が良いと思います。

Redis のデータは、デフォルトでは "/data" ディレクトリ配下に保存されています。

例:名前付きボリューム "redis-data" にデータを保存する場合
docker-compose.yml
version: "3.8"
services:

  # Redis コンテナ
  redis:
    image: redis:latest
    volumes:
      - redis-data:/data

volumes:
  redis-data:

設定ファイルを使用する

Redis の設定を変更したい場合は、Redis の設定ファイルである redis.conf を使用すると良いでしょう。

例:認証を必須にして、そのパスワードを "password" に変更する場合
redis.conf
requirepass password

とはいえ、Redis は設定ファイルを自動で読み込んでくれません。 設定ファイルを使用するには、Redis サーバーの起動時のコマンドで、使用する設定ファイルを指定してあげる必要があります。

解決策は下記の2つです。

解決策1:docker-compose.yml ファイルの command で指定する

1つ目の方法は、docker-compose.yml ファイルの command 項目を使用する方法です。 Redis の設定ファイルをバインドマウントしてコンテナ内に配置し、 Redis サーバーがそのファイルを使用するように command 項目で指定します。 なお、Redis の設定ファイルを変更した場合は、反映させるためにコンテナの再起動(正確には Redis サーバーの再起動)が必要になります。

例:ホストの "./redis.conf" を、コンテナの "/usr/local/etc/redis/redis.conf" にバインドマウントする場合
docker-compose.yml
version: "3.8"
services:

  # Redis コンテナ
  redis:
    image: redis:latest
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    volumes:
       - ./redis.conf:/usr/local/etc/redis/redis.conf

解決策2:Dockerfile を使用してビルドする

2つ目の方法は、Dockerfile を使用してコンテナイメージをビルドする方法です。 Dockerfile の中で、Redis の設定ファイルをコンテナにコピーします。 ついでに chmod コマンドでパーミッションを設定しておくと良いでしょう。 そして Redis サーバーがそのファイルを使用するように CMD コマンドで指定します。 なお、Redis の設定ファイルを変更した場合は、反映させるためにコンテナをビルドし直す必要があります。

例:ホストの "./redis-custom/redis.conf" を、コンテナの "/usr/local/etc/redis/redis.conf" にコピーする場合
./redis-custom/Dockerfile
FROM redis:latest

COPY ./redis.conf /usr/local/etc/redis/redis.conf
RUN chmod 644 /usr/local/etc/redis/redis.conf
CMD ["redis-server", "/usr/local/etc/redis/redis.conf"]
docker-compose.yml
version: "3.8"
services:

  # Redis コンテナ
  redis:
    build: ./redis-custom

Docker で Redis Commander コンテナを作る

Redis のコンテナが作成できたので、今度はその Redis を管理するためのツールである Redis Commander のコンテナを作成してみましょう。 Docker なら簡単に作成することができます。

rediscommander.png

コンテナのイメージは、下記のイメージを使用します。 イメージのバージョン(タグ)はいろいろありますが、特にこだわりが無いなら最新版(latest)で良いと思います。

Redis Commander の Web サーバーのコンテナ側のポート番号は 8081 番です。 80 番ではないので注意してください。 ホスト側から Web ブラウザ(Chrome など)で接続できるよう、コンテナ側のポート 8081 番へのマッピングを設定しましょう。 ホスト側のポート番号は、他で使用されていないものなら何番でも良いと思います。

Redis Commander コンテナは、接続先の Redis コンテナが起動していない状態だと意味が無いと思いますので、 depends_on の項目で、Redis コンテナの後に起動するように設定しておくと良いでしょう。

Redis コンテナへの接続情報は、環境変数 REDIS_HOSTS で設定できます。 値の書式は下記の5つです。 複数接続したい場合は、カンマ区切りで指定できます。

  • hostname
  • label:hostname
  • label:hostname:port
  • label:hostname:port:dbIndex
  • label:hostname:port:dbIndex:password
項目 説明
hostname 接続先のホスト。 docker-compose.yml で定義しているサービス名(つまり、services 項目で指定しているキー)をホスト名として使用できます。
label 接続情報を区別するための名前のようなもので、わかりやすければ何でも良いです。
port 接続先のポート番号。 未指定の場合は 6379 番になります。
dbIndex 接続先のデータベースのインデックス番号。 未指定の場合は 0 番になります。
password 認証用のパスワード。

例えば、1つの Redis コンテナでデータベースを2つ使っていて、 データベース0番をキャッシュ用、データベース1番をセッション用として使用していると仮定しましょう。 その場合は環境変数で REDIS_HOSTS=cache:redis:6379:0,session:redis:6379:1 のように指定して接続します。

例:ホスト側のポート 18081 番と、コンテナ側のポート 8081 番をマッピングする場合
docker-compose.yml
version: "3.8"
services:

  # Redis コンテナ
  redis:
    (省略)

  # Redis Commander コンテナ
  rediscommander:
    image: rediscommander/redis-commander:latest
    ports:
      - 18081:8081
    depends_on:
      - redis
    environment:
      - REDIS_HOSTS=local:redis:6379

参考サイト

関連記事

ほとんどの Web アプリではデータを保存する際に、データベースを使用しています。XAMPP では、データベースとして MySQL と互換性のある MariaDB が採用されていますが、Docker を使用するのであればせっかくなので MySQL のコンテナを作成してみましょう。Docker で MySQL コンテナを ...
データベースのソフトウェアとしては MySQL(MariaDB)が人気だと思いますが、PostgreSQL を使用しているサービスを見かけることもあるでしょう。Docker で PostgreSQL のコンテナを作成してみましょう。Docker で PostgreSQL コンテナを作るコンテナのイメージは、下記の公式イ ...
Docker は、構成を気軽に組み替えたりできるので、とても便利ですよね。Windows で Docker を使って開発している方も多いと思うのですが、個人的にはどうしても気が乗らない理由がありました。それは処理速度です。遅い。遅すぎる。めちゃくちゃ遅い。つらい。耐えられない。。。ということで調査しました。いろいろと調 ...
最近では、アプリケーションの実行環境の構築に Docker を使うことも珍しくなくなりました。Docker は便利ではあるのかもしれませんが、難しく感じて敬遠されている人もいるのではないでしょうか。その感覚はおそらく間違っていません。実際、知れば知るほど奥が深い技術だと感じてしまいます。もはや沼というか深淵を覗いている ...
最近のWebアプリでは、キャッシュやセッションを保存する際に、Redis がよく使われていたりします。しかしながら Redis は XAMPP には含まれていないため、XAMPP から Redis を使うためには XAMPP の環境に少し手を加える必要があります。そこで、その手順を記載しておきます。いまさら感も多々あり ...

記事検索

最新記事

人気記事

RSSフィード

お知らせ

フィードバック

要望などあれば、お気軽にどーぞ。 不具合やバグを発見した場合も、連絡をいただけると助かります。

匿名でフィードバックする
匿名でフィードバックする

要望などあれば、お気軽にどーぞ。 不具合やバグを発見した場合も、連絡をいただけると助かります。

なお、このフォームから入力された内容について、管理者から返信はできませんので注意してください。 もし、管理者からの返信が必要であれば、X(Twitter) もしくは、お問い合わせより、お願いします。

  • フィードバックの送信が完了しました。