[ Docker ] Redis をDocker化する & LaravelからSessionを保存する
はじめに
laravelの認証機能を使う際に、sessionを保存するために、redisを活用することにした。
開発環境のWebサーバー内にredisをセットアップしようと思ったが、
サーバーの環境を汚さないようにすることと、一度構築したredisの環境を容易に別サーバーに移動できるように、dockerを活用して環境構築することにした。
ディレクトリ構成
割とシンプルなディレクトリ構成になっていますね。
.
├── Dockerfile
├── docker-compose.yml
└── reids.conf
本題
まずは、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を書く。
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されてしまうので、必ず設定を行うようにしましょう。
‥
‥
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を編集する
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内のコマンド(参考記事)
※ Redisの導入方法(公式ドキュメント)
終わりに
環境構築の際にdockerを活用すると、環境構築の工数が削減できたり、構築した環境を別の環境に簡単に移動させたりすることができるため、非常に便利ですね。
ただし、何でもかんでもdocker化すれば良いという訳ではないと思うので、使い所を考えながら開発現場に導入する必要があるでしょう。
Discussion