Docker で Redis コンテナを作る方法
Web アプリではキャッシュやセッションを保存する際に、Redis がよく使われていたりします。 Docker で Redis のコンテナを作成してみましょう。 XAMPP では Redis をインストールするのはかなり大変でしたが、Docker なら簡単に作成することができます。
Docker で Redis コンテナを作る
コンテナのイメージは、下記の公式イメージを使用します。
イメージのバージョン(タグ)はいろいろありますが、特にこだわりが無いなら最新版(latest
)で良いと思います。
version: "3.8" services: # Redis コンテナ redis: image: redis:latest
ポートを公開する
Redis のデフォルトのポート番号は 6379 番です。
ホスト側から Another Redis Desktop Manager などの管理ツールで接続したい場合は、コンテナ側のポート 6379 番へのマッピングを設定しましょう。 ホスト側のポート番号は、他で使用されていないものなら何番でも良いと思います。
なお、ホスト側から接続しないのであれば、この設定は必要はありません。 Another Redis Desktop Manager などの管理ツールをホストにインストールするのが面倒なのであれば、 後述の Redis Commander コンテナを作成して利用してみましょう。
version: "3.8" services: # Redis コンテナ redis: image: redis:latest ports: - 63790:6379
データが消えないようにする
Redis の中に入っているデータは、大抵キャッシュやセッションのような、消えてしまっても良いような一時的なデータのような気がしますが、 Redis コンテナのデータが消えてしまっては困るという場合は、データが消えないようにボリュームを設定しておきましょう。 ボリュームを設定しない場合は、勝手にハッシュ名のボリュームが作成されるようなのですが、わかりづらいのでちゃんと設定した方が良いと思います。
Redis のデータは、デフォルトでは "/data" ディレクトリ配下に保存されています。
version: "3.8" services: # Redis コンテナ redis: image: redis:latest volumes: - redis-data:/data volumes: redis-data:
設定ファイルを使用する
Redis の設定を変更したい場合は、Redis の設定ファイルである redis.conf を使用すると良いでしょう。
requirepass password
とはいえ、Redis は設定ファイルを自動で読み込んでくれません。 設定ファイルを使用するには、Redis サーバーの起動時のコマンドで、使用する設定ファイルを指定してあげる必要があります。
解決策は下記の2つです。
解決策1:docker-compose.yml ファイルの command で指定する
1つ目の方法は、docker-compose.yml ファイルの command
項目を使用する方法です。
Redis の設定ファイルをバインドマウントしてコンテナ内に配置し、
Redis サーバーがそのファイルを使用するように command
項目で指定します。
なお、Redis の設定ファイルを変更した場合は、反映させるためにコンテナの再起動(正確には Redis サーバーの再起動)が必要になります。
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 の設定ファイルを変更した場合は、反映させるためにコンテナをビルドし直す必要があります。
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"]
version: "3.8"
services:
# Redis コンテナ
redis:
build: ./redis-custom
Docker で Redis Commander コンテナを作る
Redis のコンテナが作成できたので、今度はその Redis を管理するためのツールである Redis Commander のコンテナを作成してみましょう。 Docker なら簡単に作成することができます。
コンテナのイメージは、下記のイメージを使用します。
イメージのバージョン(タグ)はいろいろありますが、特にこだわりが無いなら最新版(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
のように指定して接続します。
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