Docker 数据卷
2020.03.19 09:33
2020.03.19 09:34
1. 概念
docker中的容器时很容易删除的,哪怕不容易删除,万一容器突然出现问题?那我们产生的数据怎么办?
数据卷就是用来在docker容器和宿主机之间同步文件(夹)的,然后此时对于该文件夹,所有的操作都是同步的!
那么某个容器被删除,或遭遇特殊事件导致不能使用,但是之前产生的数据任然完完全全的保存在宿主机中;
2. 数据卷的特点
- 数据卷存在于宿主机的文件系统中,独立于容器,和容器的生命周期是分离的。
- 数据卷可以是目录也可以是文件,容器可以利用数据卷与宿主机进行数据共享,实现了荣期间的数据共享和交换。
- 容器启动初始化时,如果容器使用的镜像包含了数据,这些数据会拷贝到数据卷中。
- 容器对数据卷的修改是实时进行的。
- 数据卷的变化不会影响镜像的更新。数据卷是独立于联合文件系统,镜像是基于联合文件系统。镜像与数据卷之间不会相互影响。
3. 实践
在启动容器时加上-v
参数,-v 即 --volume
:
docker run --name my_nginx \
-p 8080:80 \
-v /root/data:/data \
-d \
nginx
解释:
--name:指定该容器的名字
-p:将本地的8080端口映射到容器中的80端
-v:将本地(即宿主机)/root/data
目录和容器中的/data
目录映射起来
-d:后台运行nginx
这样,/root/data
和/data
目录的更改就是同步的了,如果某天该容器出现问题,那么容器中所有的数据都在/root/data
中!
效果:
挂载多个目录
挂载多个目录其实很简单,指定多个-v
参数就行,如:
docker run --name my_nginx \
-p 8080:80 \
-v /root/data:/data \
-v /root/data2:/data2 \
-d \
nginx
一个容器挂载另一个容器的数据卷
docker run -t -i --rm \
--volumes-from my_nginx --name my_nginx2 nginx /bin/bash
使用--volumes-from 要挂载的容器名
即可挂载其他容器中的数据卷!
即便是删除了初始的数据卷容器my_nginx,或是删除了其它容器,但只要是有容器在使用该数据卷,那么它里面的数据就不会丢失!(除非是没有容器在使用它们)
本节阅读完毕!
(分享)