19-Docker数据持久化

什么是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


发布了129 篇原创文章 · 获赞 57 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/NetRookieX/article/details/105023269
今日推荐