一、bind mount
- 将宿主机上的目录或文件挂载到容器中
- 宿主机目录的内容会覆盖容器目录
- 可以给目录附权限,默认rw可读可写。格式
:ro
只读 - 使用-v选项指定目录
- 格式:
<host path>
:<container path>
实例:将容器的/opt目录挂在到宿主机的/data/centos目录下
docker run -d -v /data/centos:/opt/ centos /bin/bash
实例:将容器的/opt目录挂在到宿主机的/data/centos目录下,默认容器对该目录只读权限
docker run -d -v /data/centos:/opt/:ro centos /bin/bash
实例:将宿主机的yum源文件映射到容器中,设置容器只读权限
docker run -d -v /etc/yum.repos.d/CentOS7.repo:/etc/yum.repos.d/CentOS7.repo:ro centos /bin/bash
二、docker managed volume
- docker自动为容器创建数据卷目录
- 创建的路径在
${docker_home}/volume
中,yum安装的在/var/lib/docker/volumes
目录下 - 会将容器内的目录内容挂在出来,不会被覆盖
- 可多个容器挂载同一个
managed volume
docker volume prune
删除所有没有被容器使用的卷- 格式
-v 宿主机目录名:容器目录名
实例:将容器的/var/lib/mysql
目录挂载在data_mysql目录中
docker run -d -v data_mysql:/var/lib/mysql centos /bin/bash
三、数据卷共享 --volumes-from
实例:创建一个centos2容器,共享centos1的volume。
docker run -d --volumes-from centos1 --name centos2 centos /bin/bash
四、bind mount对比docker managed volume
bind mount | docker managed volume | |
---|---|---|
volume位置 | 任意指定 | 默认/var/lib/docker/volume 目录中 |
对已有mount point影响 | 隐藏并替换为volume | 原有数据复制到volume |
支持单个文件 | 是 | 否 |
权限控制 | 默认读写,可设置只读 | 无控制,均为读写 |
移植性 | 移植性弱,与主机路径绑定 | 移植性强,无需指定主机目录 |