<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Redis on heppoko blog</title><link>https://blog-0847c6.gitlab.io/tags/redis/</link><description>Recent content in Redis on heppoko blog</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><lastBuildDate>Thu, 27 Jun 2024 00:00:00 +0900</lastBuildDate><atom:link href="https://blog-0847c6.gitlab.io/tags/redis/index.xml" rel="self" type="application/rss+xml"/><item><title>redis コンテナでの redis-server の起動方法による違い</title><link>https://blog-0847c6.gitlab.io/posts/2024/06/27/redis/</link><pubDate>Thu, 27 Jun 2024 00:00:00 +0900</pubDate><guid>https://blog-0847c6.gitlab.io/posts/2024/06/27/redis/</guid><description>&lt;p&gt;redis の公式のイメージを docker compose で動かしていたのですが、&lt;code&gt;command&lt;/code&gt; を指定しない場合のデフォルトの実行コマンドは &lt;code&gt;redis-server&lt;/code&gt; で、この場合、コンテナを再起動してもデータが残っていました。&lt;/p&gt;
&lt;p&gt;しかし、コマンドを &lt;code&gt;command: sh -c &amp;quot;redis-server&amp;quot;&lt;/code&gt; としたところ、コンテナ再起動でデータがクリアされたので、両者の違いについて ChatGPT に聞いてみました。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;command: &amp;quot;redis-server&amp;quot;:&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;この設定では、単純に redis-server コマンドが実行されます。Docker はこのコマンドを直接実行し、Redis サーバーが起動します。この場合、Redis サーバーが直接起動されるため、Redis のデフォルトの動作が適用され、データが残ります。再起動してもデータがクリアされないのは、Redis サーバーが正しく起動し、データをインメモリに保持しているためです。&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;code&gt;command: sh -c &amp;quot;redis-server&amp;quot;:&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;一方、この設定では、sh -c コマンドを使用してシェルでコマンドを実行します。sh -c コマンドは、指定されたコマンドをシェル経由で実行します。この場合、redis-server コマンドがシェル経由で実行されるため、Docker はシェルプロセスを起動し、そのシェルプロセスが redis-server コマンドを実行します。この場合、シェルプロセスがメインプロセスとなり、redis-server がそのサブプロセスとして実行されます。そのため、正しくプロセスが管理されない可能性があり、コンテナの再起動時にデータがクリアされる可能性があります。&lt;/p&gt;</description></item></channel></rss>