docker卷(Volume)

xiaoxiao2021-02-28  153

1、准备镜像

我这里用的是ubuntu:latest镜像和docker.paddlepaddle.org/book:0.10.0 ubuntu:

docker pull ubuntu

由于我直接用名字默认版本是latest,所以命令如此。 paddlepaddle:

docker run -d -p 8888:8888 docker.paddlepaddle.org/book:0.10.0

这个镜像会自动下载,比较特殊点。

2、生成卷

这里以ubuntu镜像作为卷,paddlepaddle挂在上去。 ubuntu:

docker run -dit --name datastore -v /data ubuntu

-v代表需要不被改变的目录。 其实,这样子就是普通的生成一个可以改变的目录而已,这就可以当成一个卷用了,但为什么可以这么做呢? 因为根据镜像生成的container,会缓存下来,通过docker ps -a就可以查看到。 paddlepaddle:

docker run -d --rm -p 8888:8888 --name book --volumes-from datastore docker.paddlepaddle.org/book:0.10.0 其中-d代表后台运行并detach, --rm就是容器停止后自动删除缓存(不让它出现在docker ps -a的列表中), -p 8888:8888表示将容器的8888端口映射到本地的8888端口, --name book是给容器实例起别名, --volumes-from datastore表示挂在一个名叫datastore卷(即我们的上面的ubuntu卷)

这里挂在了datastore卷,所以当你访问book的时候会发现,多了一个/data目录,在这个卷中,改写、录入数据都不会消失 ,即使你重启了机器,这样看,卷真的很美好。

但是呢?事实不是这样子的,我上面提到过缓存,如果这个缓存删除了,会怎样?对的,这个目录的内容没了,再次运行第二条命令时,会提示:

docker: Error response from daemon: No such container: datastore.

此时你只能再运行多一次,生成卷的命令,但是这个已经是,新的容器了,你的数据已经不在了。但是真的是说没就没么?也是不是的,在宿主机/var/lib/docker/volumes目录下,你可以找到数据。 具体你可以查看博客:Docker容器学习梳理–Volume数据卷使用

在我看来,还不如直接把数据直接绑定到宿主机的本地目录,既然数据在本机,还在那么深的目录,还不如自己挂载到本地某目录上去,因为单机,我也只能想到那么多了,也许,规模大就有用了吧。

所以呢?改一下第二条命令:

docker run -d --rm -p 8888:8888 --name book -v /data:/data docker.paddlepaddle.org/book:0.10.0

-v 宿主机目录:容器里目录 或者是 宿主机文件:容器里文件

PS:你想docker attach book是不行的,需要通过浏览器访问localhsot:8888通过网页新建一个终端才能访问,如果你按着我的敲,你想attach 的话,使用如下命令:

docker run --rm -dit -p 8888:8888 --name book -v /data:/data docker.paddlepaddle.org/book:0.10.0 /bin/bash

PS2:还有一种创建容器的方法:

docker run -dit --name datastore -v /data:/data ubuntu

这样子即时你删了docker ps -a的容器,数据还在,因为数据本来就在本地的,但是会不会多次一举,我一个-v选项直接挂在到目标容器,比这个经过容器,再共享简单多了吧,还是想不到为什么要这么做,知道的欢迎评论,解答一下。

这里推荐一篇比较齐全的文章:理解Docker(8):Docker 存储之卷(Volume)

转载请注明原文地址: https://www.6miu.com/read-20207.html

最新回复(0)