redis docker - 使用数据创建容器

时间:2017-07-24 11:30:59

标签: docker redis docker-compose

我想运行一个带有初始数据的redis容器。 在图片的documentation中,我可以使用卷装入/data。 我的问题是:redis能否从中读取数据并加载它? 如果是这样,我挂载的目录应该是什么? 我(非常天真)的尝试是将一个名为" someFile"并且希望redis能够知道用关键字来保存它#some; someFile"以及文件的内容作为数据。显然它没有用。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以首次运行redis容器,将空目录设置为数据卷,并使用redis CLI填充redis数据。 停止容器后,数据目录将包含一个可用的redis数据集。

如果您运行另一个指定同一目录的容器实例,redis将使用该数据。

请注意,您需要配置redis以便相应地将数据保存到文件系统(请查看https://redis.io/topics/persistence

答案 1 :(得分:0)

取决于初始数据集的大小以及初始数据的变化不大,在启动时使用{{1}从*.redis文件将干净的docker容器加载它可能会更容易}(link)。

创建种子命令文件(redis-cli):

my-data.redis

创建Redis启动Shell脚本(SET key1 val1 SET key2 val2 ... ... ):

my-redis.sh

使用shell脚本CMD创建自定义redis docker映像,类似这样(更好的解决方案是破解入口点,但谁有时间这样做?)

# start server in background and wait for 1 sec
redis-server --daemonize yes && sleep 1 
# slurp all data from file to redis in memory db (note the dir)
redis-cli < /my-dir/my-data.redis 
# persist data to disk
redis-cli save 
# stop background server
redis-cli shutdown 
# start the server normally
redis-server 

完成。无需外部卷或构建器容器。构建并运行:

FROM redis:latest
COPY my-data.redis /my-dir/
COPY start-redis.sh /my-dir/
CMD ["sh", "/my-dir/my-redis.sh"]