这是我参与11月更文挑战的第26天,活动详情查看:2021最后一次更文挑战
数据卷
特点:
- 数据卷可以在容器之间共享或重用数据
- 数据卷中的更改可以立即生效
- 数据卷的更改不会包含在镜像的更新
- 数据卷默认一直存在,即使容器被删除
- 数据卷的生命周期一直持续到没有容器使用它为止
管理数据方式
- 数据卷: Data Volumes 容器内数据直接映射到本地主机环境
- 数据卷容器: Data Volume Containers 使用特定容器维护数据卷
# 宿主机文件复制到容器内
docker cp [options] path container:destPath
# 容器内文件复制到宿主机
docker cp [options] containe:path destPath
bind mounts
数据卷是一个可供一个或多个容器使用的特殊目录, 将主机操作系统目录直接映射进容器
数据卷类型
- 宿主机数据卷: 直接在宿主机的文件系统中但是容器可以访问(bind mount)
- 命名数据卷: Docker管理的数据卷,卷有名字
- 匿名数据卷: Docker管理的数据卷,没有名称, Docker管理这些文件
数据卷在宿主机文件系统里面的,第一种是在宿主机内的特定目录下,后两种在Docker管理的目录下, 目录一般是/var/lib/docker/volumes。推荐使用宿主机数据卷方式持久化数据。
宿主机数据卷
bind mounts: 容器内的数据被存放到宿主机文件系统的任意位置,甚至存放到一些重要的系统目录或文件中。除了docker之外的进程也可以任意对他们进行修改。
docker run -v /etc/:/ta 镜像名
ro:readonly 只读,代表只能通过宿主机操作,容器内部无法操作
rw:readwrite 可读可写
docker run -v /la:/etc/nginx:ro nginx
匿名数据卷
docker run -itd --name nginx -p 80:80 -v /etc/nginx nginx
命名数据卷
docker run -itd --name nginx -p 80:80 -v nginx: /etc/nginx nginx
- 清理数据卷
docker volumn ls
docker volumn prune #清理数据卷
docker volumn ls
数据卷容器
docker pull centos:7.8
docker pull nginx
docker pull mysql
docker run --volumes-from
多个容器共享一些持续更新的数据,最简单的方式就是使用数据卷容器。目的是专门用来提供数据卷供其他容器挂载。创建好的数据卷容器处于停止运行的状态, 使用--volumes-from 参数挂载的数据卷容器并不需要保持在运行状态。
docker run -itd --name nginx01 -p 80:80 --volume-from data-volume nignx
不过也有一些是无法直接通过数据卷容器共享的,比如docker hub官网上的mysql原始镜像等。