五、docker数据卷
程序员文章站
2022-04-18 20:58:17
...
Docker 内部以及容器之间管理数据,在容器中管理数据主要有两种方式:
- 数据卷(Volumes)
- 挂载主机目录 (Bind mounts)
数据卷
数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:
- 数据卷可以在容器之间共享和重用
- 对数据卷的修改会立马生效
- 对数据卷的更新,不会影响镜像
- 数据卷默认会一直存在,即使容器被删除
创建一个数据卷
docker volume create my-vol
查看所有数据卷
docker volume ls
查看指定数据卷的信息
docker volume inspect my-vol
主机的挂载点为:/var/lib/docker/volumes/my-vol/_data
启动容器并挂载数据卷
docker run -d --name centoscontainer -v my-vol:/myvol centos /usr/sbin/init
或
docker run -d --name centoscontainer --mount source=my-vol,target=/myvol centos /usr/sbin/init
查看容器的挂载信息
docker inspect centoscontainer
验证效果
主机的/var/lib/docker/volumes/my-vol/_data与/myvol目录数据同步,无论哪边发生变化,数据都会同步,即使容器被删除,主机数据还在
删除数据卷
docker volume rm my-vol
删除容器时并删除数据卷
命令 docker rm -v
删除所有没有挂载容器的数据卷
docker volume prune
挂载主机目录
将主机的目录当作数据卷挂载到容器中(少了创建数据卷的步骤),该方式使用docker volume ls查询不到
docker run -d --name centoscontainer -v /hostdir:/myvol centos /usr/sbin/init
或
docker run -d --name centoscontainer type=bind,source=/hostdir,target=/myvol centos /usr/sbin/init
注意:(1)主机目录的路径必须是绝对路径,如果使用 -v 参数时如果本地目录不存在 Docker 会自动为你创建一个文件夹,而使用 --mount 参数时如果主机目录不存在,Docker 会报错
(2)如果将主机和容器目录都改为文件,则将挂载文件
查看容器的挂载信息
docker inspect centoscontainer
验证效果
在主机/hostdir、容器/myvol的数据操作将同步
Dockerfile方式挂载volume
Dockerfile文件加上
VOLUME ["/datavolume1", "/datavolume2"]
如果启动容器没有指定挂载主机的目录,则将随机挂载一个主机的目录,查看随机目录:
docker inspect 容器名/id
可以用以上的另外两种方法-v或者--mount指定主机的挂载目录来覆盖默认的随机目录
下一篇: 机器学习中的数学-期望、方差与协方差