Docker容器数据持久化
Docker容器数据卷:volumes
1、什么是数据卷?
数据卷是经过特殊设计的目录,可以绕过联合文件系统,为一个或者多个容器提供访问,数据卷设计的目的,在于数据的永久存储,它完全独立于容器的生存周期,因此,docker不会在容器删除时删除其挂载的数据卷,也不会存在类似的垃圾收集机制,对容器引用的数据卷进行处理,同一个数据卷可以只支持多个容器的访问。
volumes: 是官方比较推荐也是大型的集群比较常见的一种方式.可以在宿主机或者云端或者在某一个区域创建一块磁盘专门存放容器里的数据或文件,volumes是Docker持久化数据的最好方式,因为与容器的耦合度最低,多个容器可以同时访问一个volumes
2、数据卷的特点
- 数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会被拷贝到新初始化的数据卷中
- 数据卷可以在容器之间共享和重用
- 可以对数据卷里的内容直接进行修改
- 数据卷的变化不会影响镜像的更新
- 数据卷在宿主机是行会一直存在,即使挂载数据卷的容器已经被删除
3、数据卷常用命令
创建数据卷
[root@zch01 ~]# docker volume create test run -itd -p 8081:80 -v test01:/usr/share/nginx/html nginx
删除卷
命令格式: docker volume rm 卷名
[root@zch01 ~]# docker volume rm test
清理无用数据卷
docker volume prune
查看所有数据卷
[root@zch01 ~]# docker volume ls
查看数据卷详细信息:
命令格式: docker volume inspect 卷名
[root@zch01 ~]# docker volume inspect 5d0ffa3f7a3fd6f401f8d9cfdc46623195afce95c5c309d00d10cb65a65bb38e
容器添加数据卷
[root@zch01 ~]# docker run -v /opt/data:/data -itd centos /bin/bash
/opt/data:为宿主机目录
/data:为容器的里的目录
宿主机的opt/data目录下创建的数据会同步到容器的/data目录下
数据卷添加访问权限
[root@zch01 ~]# docker run --name test -v /opt/data:/data:ro -itd centos /bin/bash
data:ro: 添加只读权限,在容器中只能对data目录只读操作
/opt/data:宿主机目录的操作权限不限
4、数据卷的使用
编写DockerFile文件使用数据卷构建镜像
[root@zch01 ~]# vi dockerfile
FROM centos
VOLUME ["/data1","/data2"]
CMD /bin/bash
构建镜像:
[root@zch01 ~]# docker build -t="volumeimage" .
启动容器:
[root@zch01 ~]# docker run --name volumetest -it volumeimage
进入容器查看会有:data1、data2两个目录
制作数据卷容器
什么是数据卷容器:命名容器为挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器,就叫做数据卷容器。
命令格式:docker run --volumes-from [container name]
构建镜像:
[root@zch01 ~]# vi dockerfile
FROM centos
VOLUME ["/data1","/data2"]
CMD /bin/bash
[root@zch01 ~]# docker build -t="datavolume" .
创建数据卷容器
[root@zch01 ~]# docker run --name data-volume -itd datavolume
datavolume:有两个目录data1、data2
进入到数据卷中可以查看
[root@zch01 ~]# docker exec -it data-volume /bin/bash
创建容器使用数据卷容器
在前面已经创建好了数据卷容器,下面在创建新容器是直接挂在数据卷容器
使用命令选项:--volumes-from
[root@zch01 ~]# docker run --name zch01 --volumes-from data-volume -itd centos /bin/bash