Docker数据挂载-数据卷介绍

在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中。目前Docker提供了三种不同的方式将数据从宿主机挂载到容器中:

  1. volumes:Docker管理宿主机文件系统的一部分,默认位于 /var/lib/docker/volumes 目录中;(最常用的方式)
  2. bind mounts:意为着可以存储在宿主机系统的任意位置;(比较常用的方式)
    但是,bind mount在不同的宿主机系统时不可移植的,比如Windows和Linux的目录结构是不一样的,bind mount所指向的host目录也不能一样。这也是为什么bind mount不能出现在Dockerfile中的原因,因为这样Dockerfile就不可移植了。
  3. tmpfs:挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统;(一般都不会用的方式)

Volumes

创建数据卷

docker volume create edc-nginx-vol # 创建一个自定义容器卷
docker volume ls # 查看所有容器卷
docker volume inspect edc-nginx-vol # 查看指定容器卷详情信息

启动容器时挂载数据卷

docker run -d -it --name=edc-nginx -p 8800:80 -v edc-nginx-vol:/usr/share/nginx/html nginx

其中,edc-nginx-vol指的是创建数据卷的名称,/usr/share/nginx/html指的是要挂载到的容器中的路径名,如果不填写edc-nginx-vol:即省略数据卷名称,则会分配一个匿名的数据卷。

需要注意的是:

  • 数据卷是宿主机中的一个目录或文件
  • 当容器目录和数据卷目录绑定后,对方的修改会立即同步
  • 一个数据卷可以被多个容器同时挂载
  • 一个容器也可以被挂载多个数据卷
  • 如果目录不存在,会自动创建

清理卷

docker stop edc-nginx # 暂停容器实例
docker rm edc-nginx # 移除容器实例
docker volume rm edc-nginx-vol # 删除自定义数据卷

bind mounts

bind mounts可以挂载宿主机的任意位置,语法:

docker run -d -it --name=edc-nginx -v /app/wwwroot:/usr/share/nginx/html nginx

其中/app/wwwroot指的是宿主机中的路径,/usr/share/nginx/html指的是要挂载到容器中的路径。

注意: 必须是绝对路径

通过docker inspect edc-nginx可以看到容器相关信息,包括binds信息。

数据卷挂载的另一个应用是可以多个容器挂载同一个数据卷从而实现容器间的数据交换。

数据卷容器

为了有效地维护多容器的数据共享,可以维护一个数据卷容器,挂载数据卷,其他容器通过--volumes-from从该容器获取数据卷配置。

Docker数据挂载-数据卷介绍

例:

docker run –it --name=c3 –v /volume centos:7 /bin/bash 
docker run –it --name=c1 --volumes-from c3 centos:7 /bin/bash

docker run –it --name=c2 --volumes-from c3 centos:7 /bin/bash  

有点像继承c3的数据卷配置,当c3的数据卷配置修改时c1和c2也会修改。

原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/docker%e6%95%b0%e6%8d%ae%e6%8c%82%e8%bd%bd-%e6%95%b0%e6%8d%ae%e5%8d%b7%e4%bb%8b%e7%bb%8d/

发表评论

电子邮件地址不会被公开。