如何保存docker redis容器

时间:2017-04-11 08:55:59

标签: docker redis

我在使用redis数据库中的数据创建docker redis容器的图像时遇到问题。目前我正在这样做:

docker pull redis
docker run --name my-redis -p 6379:6379 -d redis
redis-cli
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> save
OK
127.0.0.1:6379> exit
docker stop my-redis
docker commit my-redis redis_with_data
docker run --name my-redis2 -p 6379:6379 -d redis_with_data
redis-cli
127.0.0.1:6379> keys *
(empty list or set)

我显然不理解这里非常基本的东西。 docker commit不会从现有容器创建新图像吗?

好吧,我一直在做一些挖掘。 hub.docker上的默认redis映像使用数据卷,然后将其安装在容器中的/ data中。要在容器之间共享此卷,您必须使用以下参数启动一个新容器:

docker run -d --volumes-from <name-of-container-you-want-the-data-from> --name <new-container-name> -p 6379:6379 redis

请注意,参数的顺序很重要,否则docker run将无声地失败。

docker volume ls

将告诉您计算机上的docker已创建了哪些数据卷。我还没有找到一种方法来为这些卷提供一个简单的名称,而不是一个长的随机字符串。

我还没有找到安装数据卷的方法,而只是使用--volumes-from命令。

好。我现在有它工作,但它是笨拙的。

docker volume ls
docker volume inspect <id of docker volume>

您可以在本地文件系统上找到docker卷的路径。 然后,您可以将其安装在新容器中,如下所示:

docker run -d -v /var/lib/docker/volumes/<some incredibly long string>/_data:/data --name my-redis2 -p 6379:6379 redis

这显然不是你打算这样做的方式。我会继续挖掘。

我把我发现的所有内容放在博客文章中:my blog post on medium.com

也许这对某些人有用

2 个答案:

答案 0 :(得分:9)

docker中的数据不是持久性的,当您重新启动容器时,您的数据将会消失。为防止这种情况,您必须在主机上与容器共享地图。当容器重新启动时,它将从主机上的地图获取数据。

您可以在Docker文档中详细了解它:this book

来自redis容器文档:

运行redis-server

docker run -d --name redis -p 6379:6379 dockerfile/redis

使用持久数据目录运行redis-server。 (创建dump.rdb)

docker run -d -p 6379:6379 -v <data-dir>:/data --name redis dockerfile/redis

使用持久数据目录和密码运行redis-server。

docker run -d -p 6379:6379 -v <data-dir>:/data --name redis dockerfile/redis redis-server /etc/redis/redis.conf --requirepass <password>

来源: https://docs.docker.com/engine/tutorials/dockervolumes/#data-volumes

答案 1 :(得分:1)

手动使用数据量和共享RDB文件并不难看,实际上这就是设计用于将数据与容器分开的数据量。

但是如果您真的需要/想要将数据保存到图像并以这种方式共享,您只需将redis工作目录从卷/data更改为其他地方:

  • 启动redis容器时,选项1正在更改--dir

    docker run -d redis --dir /tmp
    

    然后,您可以按照步骤创建新图像。请注意,由于权限问题,此方法只能使用/tmp

  • 选项2正在创建一个更改为WORKDIR的新图片:

    FROM redis
    
    RUN mkdir /opt/redis && chown redis:redis /opt/redis
    WORKDIR /opt/redis
    

    然后docker build -t redis-new-image并使用此图片完成您的工作。