docker卷(Volume)

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值