1、Docker 持久化存储
根据前面介绍的容器UnionFS写时复制的特点,可知在容器里增加、删除或修改文件,其实都是对可写层里的文件副本进行了操作。在容器关闭后,该可写层也会被删除,对容器的所有修改都会失效,因此需要解决容器内文件持久化的问题。Docker提供了两种方案来实现:
把宿主机文件系统里的目录映射到容器内的目录, 如此一来,容器内在该目录里创建的所有文件,都存储到宿主机的对应目录中,在关闭容器后,宿主机的目录依然存在,再次启动容器时还能读取到之前创建的文件,因此实现了容器的文件持久化。当然同时要明白,如果是对镜像自带文件进行了修改,由于镜像是只读的,该修改操作无法在关闭容器时保存下来,除非在修改了文件后构建一个新的镜像。
把多台宿主机的磁盘目录通过网络联合为共享存储,然后把共享存储中的特定目录映射给特定的容器,这样容器在重启时,还是能读取到关闭前创建的文件。生产环境中常用NFS作为共享存储方案
2、Docker 挂载时创建卷
1、Docker 挂载卷
[root@docker01 ~]docker run -d -p 80:80 -v /data:/usr/share/nginx/html nginx:latest
079786c1e297b5c5031e7a841160c74e91d4ad06516505043c60dbb78a259d09
容器内站点目录: /usr/share/nginx/html
2、宿主机写入数据验证
[root@docker01 ~]echo "http://www.qianfeng.com" >/data/index.html
[root@docker01 ~]curl 10.0.0.100
http://www.qianfeng.com
3、设置共享卷
使用同一个卷启动一个新的容器
[root@docker01 ~]# docker run -d -p 8080:80 -v /data:/usr/share/nginx/html nginx:latest
351f0bd78d273604bd0971b186979aa0f3cbf45247274493d2490527babb4e42
[root@docker01 ~]# curl 10.0.0.100:8080
http://www.qianfeng.com
4、查看卷列表
[root@docker01 ~] docker volume ls
DRIVER
VOLUME NAME
3、Docker 创建卷后挂载
1、创建一个简单卷
[root@docker01 ~] docker volume create
f3b95f7bd17da220e63d4e70850b8d7fb3e20f8ad02043423a39fdd072b83521
[root@docker01 ~]docker volume ls
DRIVER
VOLUME NAME
local
f3b95f7bd17da220e63d4e70850b8d7fb3e20f8ad02043423a39fdd072b83521
2、创建指定卷名的卷
[root@docker01 ~] docker volume create --name nginx
[root@docker01 ~] docker volume ls
3、查看卷路径
[root@docker01 ~] docker volume inspect nginx
[
{
"CreatedAt": "2018-02-01T00:39:25+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/nginx/_data",
"Name": "clsn",
"Options": {},
"Scope": "local"
}
]
4、创建 Docker 时挂载卷
[root@docker01 ~] docker run -d -p 9000:80 -v clsn:/usr/share/nginx/html
nginx:latest
1434559cff996162da7ce71820ed8f5937fb7c02113bbc84e965845c219d3503
# 宿主机测试
[root@docker01 ~]echo 'blog.qf.com'>/var/lib/docker/volumes/nginx/_data/index.html
[root@docker01 ~]curl 10.0.0.100:9000
blog.qf.com
5、实现 Docker 共享卷挂载# 共享卷
[root@docker01 ~]docker run -d -P --volumes-from 079786c1e297 nginx:latest
b54b9c9930b417ab3257c6e4a8280b54fae57043c0b76b9dc60b4788e92369fb
--volumes-from # 指定共享卷的容器