docker数据卷应用场景

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker数据卷应用场景相关的知识,希望对你有一定的参考价值。

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

以上是关于docker数据卷应用场景的主要内容,如果未能解决你的问题,请参考以下文章

Docker 网络及数据卷设置 [三]

Docker-使用数据卷在宿主机和容器间的数据共享

docker容器数据卷

黑马二Docker容器的数据卷 & Docker应用部署

黑马二Docker容器的数据卷 & Docker应用部署

如何使用 docker swarm 扩展具有多个暴露端口和多个卷的应用程序?