使用docker时往往需要对数据进行持久化,或者需要在多个容器之间进行数据传输
1、数据卷
简单理解就是先在本地创建一个目录,然后容器去挂载这个目录,无论哪边修改这个目录内容哪边都能看见(类似于 mount 挂载,推荐挂载文件所在的目录,不推荐只挂载一个文件)
| 特性 |
|---|
| 数据卷可以在容器之间共享和重用 |
| 无论在容器内还是在本地主机上进行操作都会立刻对数据卷内数据生效 |
| 对数据卷的更新不会影响到镜像 |
| 卷会一直存在,知道没有容器使用时可以安全的卸载它 |
| /var/lib/docker/volumes/ 路径下保存所创建的数据卷位置 |
①创建数据卷
# volume
# -d 指定卷驱动程序名称(默认为“本地”)
docker volume create -d local test_docker_volume_path
# ls 列出已有数据卷
# inspect 查看详细信息
# rm 删除数据卷

②绑定数据卷
在创建容器时将本地主机的任意路径挂载到容器内作为数据卷,以这种形式创建的数据称为绑定数据卷
在docker container run 命令时可以使用 --mount 来使用数据卷, --mount 支持三种类型的数据卷:
Ⅰ volume:普通数据卷,在/var/lib/docker/volumes/ 路径下
Ⅱ bind:绑定数据卷,映射到主机指定路径下
Ⅲ tmpfs:临时数据卷,只存在于内存中
# 例如
# 下面使用 training/web 镜像创建一个web容器,并创建一个数据卷挂载到容器的/opt/webapp 目录
docker container run -d -P --name web --mount type=bind,source=/webapp,destination=/opt/webapp training/webapp python app.py
# 等价于↓ -d 后台运行 -P 通过nat机制将容器标记暴露的端口自动映射到本地主机的临时端口 -v 挂载主机上的文件卷到容器内
docker run -d -P --name web -v /webapp:/opt/webapp training/webapp python app.py
测试:
# -v 挂载主机上的文件卷到容器内
# docker container run -it -d --name centos1 -v /var/lib/docker/volumes/test_volume/:/TEST_VOLUME centos:latest
docker container run -it -d --name nihao -v /var/lib/docker/volumes/test_docker_volume_path/:/mount_docker_path 646f1785266a
本地路径必须是绝对路径,容器内路径可以为相对路径,如果目录不存在,docker会自动创建



Docker挂载数据卷默认是读写权限(rw),用户也可以设置为只读(ro),但是加了ro后容器内对所挂载数据卷内数据就无法修改
# -v 挂载主机上的文件卷到容器内
docker container run -it -d --name centos1 -v /var/lib/docker/volumes/test_volume/:/TEST_VOLUME:ro centos:latest
2、数据卷容器
如果用户需要在多个容器之间共享一些持久更新的数据,最简单的方式就是使用数据卷容器
数据卷容器也是一个容器,目的就是专门提供数据卷给其他容器挂载
| 特征 |
|---|
| 该数据卷容器不需要保持 运行状态 |
| 删除挂载的容器后数据卷并不会被删除 |
① 创建数据卷容器
创建一个容器并在容器内创建一个数据卷挂载到/data_container
# -v 挂载主机上的文件卷到容器内 如果目录不存在,docker会自动创建
docker container run -it -v /data_container --name data centos:latest


② 挂载数据卷容器
创建两个容器使用 --volumes-from 来挂载 data 容器中的 /data_container 数据卷
docker container run -d -it --volumes-from 578c5c38e302 --name db1 ubuntu:18.04
docker container run -d -it --volumes-from 578c5c38e302 --name db2 ubuntu:18.04

随机进入其中一个容器


1998

被折叠的 条评论
为什么被折叠?



