🍣

[ Docker ] Redis をDocker化する & LaravelからSessionを保存する

2022/03/30に公開

はじめに

laravelの認証機能を使う際に、sessionを保存するために、redisを活用することにした。

開発環境のWebサーバー内にredisをセットアップしようと思ったが、

サーバーの環境を汚さないようにすることと、一度構築したredisの環境を容易に別サーバーに移動できるように、dockerを活用して環境構築することにした。

ディレクトリ構成

割とシンプルなディレクトリ構成になっていますね。

.
├── Dockerfile
├── docker-compose.yml
└── reids.conf
    

本題

まずは、dockerfileを書いていく。

Dockerfile
FROM        ubuntu:14.04
RUN         apt-get update && apt-get install -y redis-server
EXPOSE      6379
ENTRYPOINT  ["/usr/bin/redis-server"]

次に、docker-compose.ymlを書く。

docker-compose.yml
version: '3'
services:
  redis:
    image: "redis:latest"
    ports:
      - "6379:6379"
    volumes:
      - "./data/redis:/data"
      - "./redis.conf:/etc/redis.conf"

redisを使用するときは、詳細設定をredis.confに記述するので、こちらを設定する。
redisはmaxmemory-policyを定義していないと無尽蔵にメモリを消費して、最終的にOOM(out of memory)となりOSにkillされてしまうので、必ず設定を行うようにしましょう。

redis.conf
‥
‥

maxmemory 100MB
‥
‥
maxmemory-policy allkeys-lru

redis起動

以下、コマンドを実行すると、redisコンテナが起動されて、redisを使う準備が整う。

$ docker-compose build
$ docker-compose up -d

redis.confの詳細な設定については以下のサイトに詳しく書いてあります。
Redis Documentation (Japanese Translation)

Laravelの設定

laravelでredisを使用する際には諸々の設定を行なってやる必要があります。

1. composerでパッケージを追加

Redisのパッケージをプロジェクト内にインストールする。

$ composer require predis/predis

2. .envを編集する

.env
CACHE_DRIVER=redis ←デフォルトではfileになってます
.
.
REDIS_HOST=127.0.0.1 or localhost 
REDIS_PASSWORD=null
REDIS_PORT=6379

これでlaravelからキャッシュを保存する際には、redisに保存されるようになりましたね。

補足:redisに保存されているkeyを確認する

1. まずは以下でredisのコンテナ内に入りましょう。

$ docker-compose exec redis /bin/bash

2. client起動

redisのクライアントを起動します。以下のような出力があればOK

$ redis-cli
127.0.0.1:6379 >

3. keyを確認する

127.0.0.1:6379 > keys *

※redis-cli内のコマンド(参考記事)

https://blog.eiel.info/blog/2014/08/26/remember-redis/

※ Redisの導入方法(公式ドキュメント)
https://readouble.com/laravel/6.x/ja/redis.html

終わりに

環境構築の際にdockerを活用すると、環境構築の工数が削減できたり、構築した環境を別の環境に簡単に移動させたりすることができるため、非常に便利ですね。

ただし、何でもかんでもdocker化すれば良いという訳ではないと思うので、使い所を考えながら開発現場に導入する必要があるでしょう。

Discussion