2017-04-11 112 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並用此圖片做你的工作。