docker数据卷应用场景
- 在多个容器之间共享数据,多个容器可以同时以只读或者读写的方式挂载统一个数据卷,从而共享数据卷中的数据
- 当宿主机不能保证一定存在某一个目录或一些固定的文件路径时,使用数据卷可以规避这种限制带来的问题
- 当想把容器中的数据存储在宿主机之外的地方时,比如远程主机上和云存储上
- 当你需要把容器数据在不同宿主机之间备份、恢复或迁移时,数据卷是很好的选择
数据覆盖问题
- 如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中
- 如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录会显示数据卷中的数据。如果原来容器中的目录有数据,那么原始数据会被隐藏掉
这两个规则都非常重要,灵活利用第一个规则可以帮助我们初始化数据卷中的内容。掌握第二个规则可以保证挂载数据卷后的数据总是你期望的结果。
创建一个数据卷,然后将其挂载
$ docker volume create my-vol
$ docker run -d -p 80:80 -name webserver # -v my-vol:/webapp
--mount source=my-vol, target=/webapp nginx:latest
使用mount挂载数据卷
除了使用--volume(-v)挂载数据卷,现在docker提供了更强大的--mount选项来管理数据卷。mount选项可以通过都好分隔的多个键值对一次提供多个配置项,因此mount选项可以提供比volume选项更详细的配置:
- type: 指定挂载方式,这里我们用到是volume, 其实还可以是bind和tmpfs
- volume-dirver 指定挂载数据卷的驱动程序,默认是local
- source 指定挂载的源,对于一个命名的数据卷,治理应该指定这个数据卷的名称,在使用时可以写source, 也可以简写为src
- destination 指定挂载的数据在容器中的路径。在使用时可以写destination,也可以简写为dst和target
- readonly 指定挂载的数据为只读
- volume-opt 可以指定多次,用来提高更多的mount相关的配置
使用 volume driver把数据存储到其它地方
除了默认的把数据卷中的数据存储在宿主机,docker还允许我们通过指定volume driver的方式把数据卷中的数据存储在其它地方,比如Azru Storage 或 AWS 的S3。
简单起见,我们接下来的demo演示如何通过演示如何通过vieux/sshfs驱动把数据卷的存储在其它的主机上。
docker默认时不安装vieux/sshfs插件的,我们可以通过下面的命令进行安装
$ docker plugin install --grant-permissions vieux/sshfs
然后通过vieux/sshfs创建数据卷,并指定远程主机的登陆用户名,密码和数据存放目录
$ docker volume create --driver vieux/sshfs -o [email protected]:/home/nick/sshvolume -o password=yourpassword mysshvolume
注意,请确保你指定的远程主机上的挂载点目录是存在的(demo中是/home/nik/sshvolume), 否则在容器启动时会报错。
最后,在启动容器时指定挂载这个数据卷
$ docker run -d --name sshfs --mount type=volume,volume-driver=vieux/sshfs, source=mysshvolume, targe=myworld ubuntu /bin/bash
挂载主机目录
$ docker run -d -p 80:80 --name webserver --mount type=bind,src=/data/docker,dst=/usr/share/nginx/html nginx
原文地址:http://blog.51cto.com/idweb/2322087
时间: 2024-10-08 15:29:59