Docker 数据管理
Docker 数据管理
-
容器管理数据的方式
ocker 内部以及容器之间管理数据,在容器中管理数据主要有两种方式:
- 数据卷(Volumes)
- 挂载主机目录 (Bind mounts)
-
数据卷
-
是什么发?
- 一个可供一个或多个容器使用的特殊目录,它绕过 UFS
数据卷
可以在容器之间共享和重用- 对
数据卷
的修改会立马生效 - 对
数据卷
的更新,不会影响镜像 数据卷
默认会一直存在,即使容器被删除- 类似于Linux对目录文件进行mount,镜像中指定为挂载点的目录会被隐藏掉,能看到是挂载的数据卷。
-
-
创建一个数据卷
[root@rbtnode1 ~]# docker volume create my-container_vol
查看所有的
数据卷
[root@rbtnode1 ~]# docker volume ls
在主机里使用以下命令可以查看指定
数据卷
的信息[root@rbtnode1 ~]# 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![1575590688473]
- docker run -d -P --name web --mount source="my-contariner_vol",target=/webapp training/webapp python app.py![1575590688473]
-
-
查看数据卷的具体信息
在主机里使用以下命令可以查看
web
容器的信息$ docker inspect web
-
删除数据卷
$ docker volume rm my-vol
-
数据卷的作用
有点类似我们Redis里面的rdb和aof文件
能干嘛
容器的持久化,不会自动删除,没有垃圾回收处理
1. docker rm -v 删除容器时一起删除数据卷
2. 无主的数据卷可能会占据很多空间,要清理请使用以下命令
```bash
$ docker volume prune
```
3. 容器间继承+共享数据
数据卷
容器内添加
直接命令添加
命令
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
结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止