什么是Docker数据持久化
容器在运行时会在镜像层上加上一层:可写层。
当删除容器时,可写层就会一起被删除,数据丢失。
数据持久化就是就是将数据持久化保存,删除容器之后,数据仍然存在。
方法1-挂载本地目录到容器中
- 挂载方法
docker run -d -p 8080:80 -v /html:/usr/share/nginx/html nginx #-v参数将本地的/html挂载到容器中的/usr/share/nginx/html
- 实验-nginx容器的数据持久化
mkdir /html
vim /html/index.html
<h1>Hello eagle<h1>
docker run -d -p 8080:80 -v /html:/usr/share/nginx/html nginx
firewall-cmd --add-port=8080/tcp
firewall-cmd --add-port=8080/tcp --per
#测试:http://192.168.191.131:8080/
- 挂载为只读模式
-v /a:/b:ro #挂载为只读模式(read only)
方法2-数据卷
数据卷和本机被挂载目录相似,同样使用-v挂载容器中。
数据卷集中保存在/var/lib/docker/volumes中。
创建数据卷
docker volume create -d local test #创建一个名为test的数据卷
创建之后,/var/lib/docker/volumes就会出现test的目录。
test目录中有一个目录:_data。这个目录由于保存所有数据。
查看数据卷
docker volume ls #列出所有数据卷
docker volume inspect test #查看详细信息
删除数据卷
docker volume prune #删除无用数据卷
docker volume rm test #删除数据卷test
使用数据卷
docker run -d -it -p 8800:80 -v test:/usr/share/nginx/html nginx
解释:
和挂载一样,使用-v命令指定数据卷
删除容器之后,数据卷不会丢失内容
若数据卷中有数据,将数据卷中的_data目录 挂载到 容器目录。
若数据卷中无数据,将容器目录中的数据 复制到 数据卷中的_data目录,然后挂载。
数据卷容器
数据卷可以被挂载到多个容器中,这时候数据卷中的数据被共享。
如果要共享数据卷,需要使用--volumes-from
参数。
实验
docker volume create -d local volume1
vim index.html
<h1>hello eagle</h1>
docker run -d -it -p 8080:80 -v volume1:/usr/share/nginx/html nginx
docker run -d -it -p 8081:80 --volumes-from a215 nginx #共享容器a215的数据卷
firewall-cmd --add-port=8080-8081/tcp
firewall-cmd --add-port=8080-8081/tcp --per
- 测试
访问http://192.168.191.131:8080/
访问http://192.168.191.131:8081/
结果一样则正确
- 进一步测试
cd /var/lib/docker/volumes/volume1/_data
vim index.html
<h1>hello world</h1>
访问http://192.168.191.131:8080/
访问http://192.168.191.131:8081/
结果由hello eagle
变成了hello world
。