Docker(三)存储持久化

发布时间 2023-06-09 19:23:19作者: vorn

一、存储持久化

docker容器不保存任何数据

重要数据可以使用外部卷存储(数据持久化)

容器可以映射真实主机目录或共享存储为卷

将外部卷映射到容器中提供持久化存储(规则:目录不存在就自动创建;目录存在就直接覆盖掉。语法:docker run -v 外部目录:容器目录 -it 容器名:标签 bash)

外部卷可以给多个容器映射使用,这种方式可以解决容器间共享问题

因此,可以使用以下方式实现不同宿主机上的容器之间文件共享问题:

部署NFS服务:

[root@node1 ~]# yum install -y nfs-utils

root@node1 ~]# mkdir /var/webroot

[root@node1 ~]# chmod 777 /var/webroot/

[root@node1 ~]# vim /etc/exports  #表示将本地/var/webroot目录作为共享磁盘,使用权限为可读可写

/var/webroot    *(rw)

[root@node1 ~]# systemctl start nfs

[root@node1 ~]# systemctl enable nfs

挂载并使用nfs(Docker1节点):

[root@docker1 ~]# yum install -y nfs-utils

[root@docker1 ~]# showmount -e 192.168.0.30  #查看192.168.0.30上可挂载的nfs

Export list for 192.168.0.30:
/var/webroot *

[root@docker1 ~]# mount -t nfs 192.168.0.30:/var/webroot /mnt  #挂载远程磁盘到/mnt

[root@docker1 ~]# docker run -itd -v /mnt:/var/www/html myos:httpd  #将宿主机/mnt目录映射到容器的/var/www/html目录

[root@docker1 ~]# vim /mnt/index.html  #在宿主机的/mnt下新建一个index页面,内容为akakak

akakak

[root@docker1 ~]# curl 172.17.0.2  #查看容器发布的http内容变为了akakak

akakak

挂载并使用nfs(Docker2节点):

[root@docker2 ~]# yum install -y nfs-utils

[root@docker2 ~]# mount -t nfs 192.168.0.30:/var/webroot /mnt

[root@docker2 ~]# docker run -itd -v /mnt:/var/www/html 192.168.0.30:50000/myos:httpd  #从镜像仓库创建并运行http容器

[root@docker2 ~]# echo bsbsbs>/mnt/index.html

[root@docker2 ~]# curl 172.17.0.2

bsbsbs

因此,如果有多个http容器的话,只需要在一个Docker节点改变挂载目录下的index文件内容就可以改变所有http容器发布的内容,同时这个index还可以永久保存到nfs服务器上,即使容器坏了也不会消失。