2017-04-11 31 views
0

我在使用redis数据库中的数据创建docker 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 volume ls 

会告诉您哪些数据卷已由您的计算机上的docker创建。我还没有找到一种方法来给这些卷一个平凡的名字,而不是一个很长的随机字符串。

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


好的。我现在有它的工作,但它ctrdgey。

随着

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

你可以找到本地文件系统上的泊坞窗卷的路径。 然后,您可以在一个新的容器装入此如下:

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

数据在码头工人是不是永久性的,有用的,当你重新启动容器你的数据将会消失。为防止出现这种情况,您必须在容器上共享主机上的地图。当容器重新启动时,它将从主机上的地图获取数据。

您可以在泊坞文档阅读更多关于它:https://docs.docker.com/engine/tutorials/dockervolumes/#data-volumes

从Redis的容器文档:

运行Redis的服务器

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

运行Redis的服务器与持久性数据的目录。 (创建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://github.com/dockerfile/redis

+0

我可以停止并重新启动容器,数据仍然存在。我希望将图像中的所有数据都存储起来,这样我就可以将图像发送给某人,并且可以运行它。 – ehrt1974

+0

您首先停止容器(数据放在容器上),然后提交它。也许你可以在停止之前提交? – Frenus

+0

容器停止时,数据不会消失。它(至少在我的系统上)是持久的。 – ehrt1974

1

使用的数据量和共享RDB手动档是不丑,其实这就是数据量是专为,将数据从容器分开。

但如果你真的需要/想将数据保存到图像,并分享它的方式,你可以改变Redis的从量/data工作目录到别的地方:

  • 选项1是变化--dir时启动Redis的容器:

    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并用此图片做你的工作。