【问题标题】:redis docker - create a container with dataredis docker - 创建一个包含数据的容器
【发布时间】:2019-08-27 18:40:10
【问题描述】:
我想运行一个包含初始数据的 redis 容器。
在镜像的documentation中,我可以使用一个卷挂载到/data。
我的问题是:redis 是否能够从中读取数据并加载它?
如果是这样,我挂载的目录中应该有什么?
我(非常天真)的尝试是放置一个名为“someFile”的文件,并希望redis 知道将其保存为“someFile”键并将文件的内容作为数据。显然它没有工作。
任何帮助将不胜感激。
【问题讨论】:
标签:
docker
redis
docker-compose
【解决方案1】:
根据您的初始数据集的大小以及如果您的初始数据没有太大变化,可能更容易让干净的 docker 容器在启动时使用 redis-cli (@987654321) 从 *.redis 文件加载它@)。
创建您的种子命令文件 (my-data.redis):
SET key1 val1
SET key2 val2
...
...
创建一个redis启动shell脚本(my-redis.sh):
# 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
使用您的 shell 脚本作为 CMD 创建一个自定义 redis docker 映像,类似这样(更好的解决方案是破解入口点,但谁有时间呢?):
FROM redis:latest
COPY my-data.redis /my-dir/
COPY start-redis.sh /my-dir/
CMD ["sh", "/my-dir/my-redis.sh"]
完成。不需要外部卷或构建器容器。构建并运行:
docker build -t my-redis:latest .
docker run -p 6379:6379 my-redis:latest
【解决方案2】:
您可以在第一次运行 redis 容器时设置一个空目录作为数据卷,然后使用 redis CLI 填充 redis 数据。
停止容器后,数据目录将包含一个工作的 redis 数据集。
如果您运行另一个指定相同目录的容器实例,redis 将使用该数据。
请注意,您需要配置 redis 以便将数据相应地持久保存到文件系统(请查看 https://redis.io/topics/persistence)