Docker 数据管理
Docker 数据管理
容器管理数据的方式
ocker 内部以及容器之间管理数据,在容器中管理数据主要有两种方式:
- 数据卷(Volumes)
- 挂载主机目录 (Bind mounts)
?
数据卷
是什么发?
- 一个可供一个或多个容器使用的特殊目录,它绕过 UFS
数据卷
可以在容器之间共享和重用- 对
数据卷
的修改会立马生效 - 对
数据卷
的更新,不会影响镜像 数据卷
默认会一直存在,即使容器被删除- 类似于Linux对目录文件进行mount,镜像中指定为挂载点的目录会被隐藏掉,能看到是挂载的数据卷。
创建一个数据卷
[ ~]# docker volume create my-container_vol
查看所有的
数据卷
[ ~]# docker volume ls
在主机里使用以下命令可以查看指定
数据卷
的信息[ ~]# docker volume inspect my-container_vol
启动一个挂载数据卷的容器
- 在用
docker run
命令的时候,使用--mount
标记来将数据卷
挂载到容器里。在一次docker run
中可以挂载多个数据卷
- 创建一个名为
web
的容器,并加载一个数据卷
到容器的/webapp
目录- docker run -d -P --name web --mount source="my-contariner_vol",target=/webapp training/webapp python app.py
- 在用
查看数据卷的具体信息
在主机里使用以下命令可以查看
web
容器的信息$ docker inspect web
删除数据卷
$ docker volume rm my-vol
数据卷的作用
有点类似我们Redis里面的rdb和aof文件
? 能干嘛
? 容器的持久化,不会自动删除,没有垃圾回收处理,、? docker rm -v 删除容器时一起删除数据卷
无主的数据卷可能会占据很多空间,要清理请使用以下命令
$ docker volume prune
容器间继承+共享数据
? 数据卷
? 容器内添加
? 直接命令添加
? 命令
? docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
? 查看数据卷是否挂载成功
? 容器和宿主机之间数据共享
? 容器停止退出后,主机修改后数据是否同步
? 命令(带权限)
? docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
? DockerFile添加
? 根目录下新建mydocker文件夹并进入
? 可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷
? File构建
? build后生成镜像
? 获得一个新镜像zzyy/centos
? run容器
? 通过上述步骤,容器内的卷目录地址已经知道
对应的主机目录地址哪??
? 主机对应默认地址
? 备注
? 数据卷容器
? 是什么
? 总体介绍
? 以上一步新建的镜像zzyy/centos为模板并运行容器dc01/dc02/dc03
? 它们已经具有容器卷
? /dataVolumeContainer1
? /dataVolumeContainer2
? 容器间传递共享(--volumes-from)
? 先启动一个父容器dc01
? 在dataVolumeContainer2新增内容
? dc02/dc03继承自dc01
? --volumes-from
? 命令
? dc02/dc03分别在dataVolumeContainer2各自新增内容
? 回到dc01可以看到02/03各自添加的都能共享了
? 删除dc01,dc02修改后dc03可否访问
? 删除dc02后dc03可否访问
? 再进一步
? 新建dc04继承dc03后再删除dc03
? 结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止