有些容器在运行的时候是会产生数据的;
这种容器就叫做有状态容器;
比如说 MySQL 容器;
我们在创建镜像的时候希望保留的是 MySQL 各种配置以及扩展;
并不想把 MySQL 的数据也打包到镜像中;
数据卷就是为此场景而生的;
数据卷分为两种类型:
绑定挂载的 volume (bind mount volume)
受管理的 volume (managed volume)
绑定挂载的 volume (bind mount volume)
先来讲绑定挂载的 volume ;
创建一个测试数据卷;
docker run -it -v /root/test:/test baijunyao/test /bin/bash
-v : 创建数据卷
/root/test:/test : 把本地的 /root/test 目录加载到容器的 /test 目录;
在容器的 test 目录中创建一个 a.php 文件;
touch /test/a.php
我们退出容器回到宿主机可以发现 /root/test 目录下也有了 a.php 文件;
受管理的 volume (managed volume)
绑定挂载的 volume 的方案并不优雅;
因为它将宿主机和容器进行了强耦合;
我们来创建一个受管理的 volume ;
docker run -it -v /test baijunyao/test /bin/bash
命令中我们没有指定宿主机的目录;
Docker 会创建到 /var/lib/docker/volumes 目录下;
也可以通过命令查看:
docker volume ls
但是这个 VOLUME NAME 非常不方便记录;
如果要自定义 VOLUME NAME 可以使用 volume create 命令;
docker volume create vm_test
再次查看数据卷
docker volume ls
挂载数据卷
接着把刚创建的数据卷挂载到容器上;
docker run -it --mount source=vm_test,target=/test baijunyao/test /bin/bash
在容器中创建个文件;
touch /test/volume.txt
退出容器在宿主机的 volume 目录查看;
删除数据卷
docker volume rm vm_test