Dockerfile,使用VOLUME持久化数据

米尔

当我学习有关docker的方法时,请多多包涵。我正在使用v1.11.1

我正在制作一个Dockerfile,并希望指定该容器的文件夹应该保留,这仅应针对每个用户(运行该容器的计算机)保留。我最初以为包括:

VOLUME /path/to/dir/to/persist

足够了,但是当我使用启动容器docker run -t -i myimage:latest bash并手动添加文件时,exit我希望能够再次找到我的文件。但是当我再次运行映像时(如上所述),添加的文件不再存在。

我读过一些书,但是关于VOLUMES的使用,答案似乎已经过时,或者建议我不想做的事情是:

  • 我不想-v在运行命令中使用
  • 我宁愿不做一个卷容器(似乎对我的一个小文件夹来说太过分了)

我做错了什么事?任何帮助将不胜感激。

干杯们。

更新:我可以使用命名卷来持久化数据,即:docker run -v name:/path/to/persist -t -i myimage:latest bash但是,使用包含的Dockerfile进行构建是VOLUME name:/path/to/persist行不通的。

马克·奥康纳

不是很明显的是,您每次执行“ docker run”时都在创建一个全新的容器。每个新的容器将具有一个新的体积。

因此,您的数据得以保留,但您没有从写入它的容器中读取数据。

示例来说明问题

样本Dockerfile

FROM ubuntu
VOLUME /data

正常建造

$ docker build . -t myimage
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM ubuntu
 ---> bd3d4369aebc
Step 2 : VOLUME /data
 ---> Running in db84d80841de
 ---> 7c94335543b8

现在运行两次

$ docker run -ti myimage echo hello world
$ docker run -ti myimage echo hello world

看看卷

$ docker volume ls
DRIVER              VOLUME NAME
local               078820609d31f814cd5704cf419c3f579af30672411c476c4972a4aad3a3916c
local               cad0604d02467a02f2148a77992b1429bb655dba8137351d392b77a25f30192b

“ docker rm”命令具有特殊的“ -v”选项,该选项将清除与容器关联的所有卷。

$ docker rm -v $(docker ps -qa)

如何使用数据容器

使用上一个示例中构建的相同docker镜像创建一个容器,其唯一目的是通过其卷来持久化数据

$ docker create --name mydata myimage

启动另一个将一些数据保存到“ / data”卷中的容器

$ docker run -it --rm --volumes-from mydata myimage bash
[email protected]:/# echo hello world > /data/helloworld.txt
[email protected]:/# exit

启动另一个容器以检索数据

$ docker run -it --rm --volumes-from mydata myimage cat /data/helloworld.txt
hello world

清理,只需删除容器并指定“ -v”选项以确保清理其体积。

$ docker rm -v mydata

笔记:

  • “ volumes-from”参数表示所有数据都保存到与“ mydata”容器关联的基础卷中
  • 运行容器时,“ rm”选项将确保将其自动删除,这对一次性容器很有用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章