RedisをDockerコンテナとして迅速にデプロイする方法
Redisは、高速なパフォーマンスで抽象データ構造を保存できるインメモリのキーバリューストアです。このオープンソースソフトウェアは、通常、データベース、メッセージング、キャッシング機能に使用されます。
Dockerは、アプリケーションをコンテナにパッケージ化するための主要なツールキットです。それにより、ソフトウェアコンポーネントを独自のファイルシステムを持つ独立した環境に隔離することができます。
このガイドでは、Docker Hubの公式イメージを使用してRedisを迅速にデプロイする方法を説明します。ベアメタルインストールと比較して、Dockerはより簡単なセットアップ手順を提供し、新しいパッケージでホストを汚染することはありません。続行する前に、ホストに正しく機能するDockerインストールがあることを確認してください。
始めに
Redisイメージには、サーバーコンポーネントと公式CLIの両方が含まれています。新しいコンテナを起動すると、機能するデフォルトの設定値でサーバーを起動するように事前に設定されています。
異なるRedisのバージョン(5.0および6.0)とオペレーティングシステム(AlpineおよびDebian)をカバーするために、画像のバリエーションが利用可能です。タグリストをブラウズして、あなたの環境に最適なオプションを見つけてください。
最も簡単なデプロイメントは次のようになります:
docker run --name redis -d -p 6379:6379 redis:6.0これは、Redis 6.0を実行している新しいコンテナをredisという名前で作成します。-dフラグは、コンテナから切り離すために使用されます。サーバーは、docker stop redisでコンテナを停止するまでバックグラウンドで動作し続けます。
Redisはデフォルトでポート6379で待機します。-pフラグはこのポートをホストにバインドします。あなたのアプリケーションはlocalhost:6379でRedisにアクセスできるようになります。ただし、これは安全ではないので注意してください - あなたのマシンがインターネットに公開されている場合、誰でもあなたのRedisデータにアクセスできる可能性があります!
データストレージ
Redisは、インメモリデータベースをディスクに保存できるいくつかの永続化メカニズムをサポートしています。データはコンテナの/dataディレクトリに保存されます。Dockerコンテナは一時的なため、このディレクトリにボリュームをマウントする必要があります。そうしないと、コンテナが停止したときにデータが失われます。
docker run --name redis -d
-v redis-data:/data
redis:6.0 --save 60 1--save フラグが Redis サーバーに渡されます。これは、使用する永続性戦略を設定します。この例では、データベースのスナップショットを毎 60 秒ごとに書き込みます。最後のスナップショット以来、1 回のデータベース書き込みが行われていない限り、この操作はスキップされます。
redis-dataという名前のDockerボリュームは、-vフラグによって作成されます。これにより、コンテナの外にデータが保存され、再起動後もアクセス可能な状態が保たれます。このボリュームは、docker volumes rm redis-dataを実行して削除されるまで持続します。
サーバーの設定
設定パラメータを追加する最も簡単な方法は、docker runコマンドの一部としてRedisサーバーにCLI引数を渡すことです。これは上記の--saveの例で示されています。docker runでイメージ名の後にあるものはすべて、コンテナ内で実行されるコマンドに渡されます。Redisイメージの場合、そのコマンドはRedisサーバーです。
CLIフラグの使用はすぐに繰り返しになります。Redisがサーバーの最初の引数としてパスを渡すことで、設定ファイルを使用するようにすることができます。このファイルは通常/usr/local/etc/redis/redis.confにあります。Dockerのバインドマウントを使用して、ローカルファイルシステムからコンテナ内にredis.confをマウントします:
docker run --name redis -d
-v redis-data:/data
-v ./redis-conf:/usr/local/etc/redis
redis:6.0 /usr/local/etc/redis.confredis.conf を作業ディレクトリの redis-conf 内に置いてください。Docker はこのパスをコンテナにマウントし、Redis に docker run コマンドで指定したファイルへのアクセスを提供します。
Redisのセキュリティ管理
Redis の Docker 画像は、デフォルトで保護されていないモードで Redis を実行するように設定されています。これにより、他の Docker コンテナから Docker ネットワークを使用して Redis サーバーにアクセスしやすくなります。ただし、これにより、コンテナに到達できるものは何でもデータに完全にアクセスできることを意味します。
保護モードは、あなたのホストのループバックアドレス(例えば、localhost)から送信される未認証のクエリにのみ応答するRedisの機能です。これを有効にするには、redis.confにprotected-mode yesを追加します。Docker化されたインストールと併用すると、Redisは自分のコンテナ内でのみアクセス可能になり、通常は理想的ではありません。
代わりに、redis.confにrequirepass exampleを追加することで、基本的なパスワード認証を設定できます。Redisは、設定されたパスワードを提示するクライアントからのクエリのみを受け入れます。Redis 6は、異なる特権を持つ複数のユーザーアカウントを設定できる、より機能的なアクセス制御もサポートしています。
認証を使用するには、前のセクションのガイダンスに従ってRedisの設定ファイルを作成し、それをコンテナにマウントします。パスワードを設定したくない場合は、アプリケーションに必要なDockerネットワークのみに参加させて、インストールを安全に保ってください。認証を設定せずにポート6379をホストにバインドしないでください。
Redisのインストールを使用する
Redisが完全にセットアップされたので、クライアントからアクセスする準備が整いました。ホストから接続する場合は、DockerコンテナのIP(docker inspect redisを実行して、コンテナの名前に合わせて調整できます)とポート6379を使用できます。
別のDockerコンテナからRedisにアクセスするには、両方のコンテナをDockerネットワークに参加させるのが最適です:
docker network create redis
docker run --name redis --network redis -d redis:6.0
docker run --name api --network redis -d my-api:latestこれで、アプリケーションコンテナは redis ホスト名のポート6379を介してRedisに接続できるようになります。Dockerは、コンテナがDockerネットワークを共有しているとき、コンテナ名をホスト名として利用できるようにします。
コンテナイメージに含まれているredis-cliバイナリを使用して、手動でデータベースと対話できます。バックグラウンドで実行するために、コンテナをデタッチモード(-d)で起動します。その後、docker execを使用してredis-cliコマンドを実行します:
docker exec -it redis-container redis-cliこれにより、コンテナ内のRedis CLIセッションに入ります。
要約
Dockerを使用すると、ソフトウェアを自分のマシンにインストールすることなく、新しいRedisインスタンスを迅速かつ簡単に開始できます。公式のDockerイメージを使用してコンテナを起動し、必要に応じてコマンドフラグを追加したり、設定ファイルをマウントしたりしてください。
常に心に留めておくべき二つのことは、ストレージとセキュリティです。Redisの永続性機能を使用する必要がある場合は、データを失わないためにDockerボリュームを使用するべきです。Docker化されたRedisはデフォルトで認証なしの保護されていないモードになっているため、ポート6379を公開すると最悪のシナリオでは壊滅的な結果をもたらす可能性があることを忘れないでください。

