Docker学习笔记 — Docker Volume
Docker学习笔记 — Docker Volume
Volume可以将容器以及容器产生的数据分离开来,这样当你删除容器的时候,才不会影响相关的数据。
注意:容器并不是为了持久化。
Volume的创建
Volume可以使用两种方式创建:
- 在Dockerfile中制定VOLUME /some/dir
- 执行docker run -v /some/dir命令指定
Docker会在主机上创建一个目录,默认情况下是在/var/lib/docker下,然后将其挂载到指定的路径(/some/dir),当删除使用该Volume的容器时,Volume本身不会受到影响,可以一直保存下去。我们在主机上对/var/lib/docker目录的操作会同步到挂载该目录的容器中。
我们也可以使用-v参数来挂载指定的主机目录。例如:
$ docker run -v /opt/data:/data ubuntu
该命令将挂载主机的/opt/data目录到容器内的/data目录上,任何在/opt/data目录的文件都将会出现在容器内。这可以用来实现主机和容器之间的文件共享。
当容器中的指定的目录不存在的时候会自动创建,当已存在的时候,该目录下的文件并不会同步到主机上的Volume,然后Volume中的数据则会被复制到容器中。
Volume的删除
我们可以在删除容器的时候同时删除Volume。
$ docker rm -v my_container
不过如果当前有其他容器仍挂载该Volume时,其是不会被删除的。
因此,由于我们在删除一些容器的时候未加-v参数,导致主机的/var/lib/docker/vfs/dir目录下出现了一些僵尸目录和文件。
数据共享
我们可以在docker run的时候使用–volumes-from参数从一个容器中访问另一个容器的Volume。
$ docker run -it --name newcontainer --volumes-from container-test ubuntu /bin/bash
此时并不管容器container-test是否在运行。
数据容器
通常使用数据容器来持久化数据库和数据文件。
$ docker run --name dbdata mysql echo "data only"
创建了一个名为dbdata的数据容器,运行完echo之后就停止了。数据容器是不需要运行的,只要创建好了就可以了。
$ docker run -d --volumes-from dbdata --name db1 mysql
启动一个数据库服务容器,连接到dbdata数据容器上。
注意:
- 数据容器不需运行,纯粹是在浪费资源
- 不需为数据容器单独使用一个小的镜像,直接使用数据库镜像本身就可以了
数据备份
如果要备份mysql数据库,我们需要备份数据容器中的/var/lib/mysql文件夹。
$ docker run --rm --volumes-from dbdata -v $(pwd):/backup ubuntu tar zcvf /backup/mysql.tar.gz /var/lib/mysql
此时就会在当前目录下生成一个msql.tar.gz文件。
参考资料:
Docker入门实践 —— 深入理解Docker Volume
更多推荐
所有评论(0)