docker存储

 简介

docker 提供数据卷来实现数据共享与持久化,而数据卷的挂载有两种方式:

  • 挂载主机目录(Bind mounts)
  • 挂载主机目录(Bind mounts)

数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用
  • 数据卷是目录或者文件,而非没有格式化的磁盘(块设备)
  • 对数据卷的修改会立马生效
  • 对数据卷的更新不会影响镜像
  • 卷会一直存在,只到没有容器使用

挂载主机目录

删除所有容器

docker ps -aq|xargs docker rm -f

创建一个数据卷

docker run -it --name web -v /webapp centos:7.4 /bin/bash 

选项说明:
-d : 将容器放入后台运行

-p : 将容器中的端口暴露到宿主机的一个随机端口

-v : 创建一个数据卷,这个数据卷会自动映射到宿主机的某个目录,一般在/var/lib/docker/volumes下

在上面命令中-v,选项后边的目录是容器中的目录,此目录无需提前创建,这个-v的意思就是将本地的/var/lib/docker/volumes下的每个目录挂载到容器的/webapp。即便容器删除,/var/lib/docker/volimes下的数据也不会丢失。

挂载一个宿主机目录作为数据卷

docker run -it --name web1 -v /data:/webapp centos:7.4 

#j将宿主机的/data目录挂载至容器的/webdata目录

数据卷容器

创建一个数据卷容器

docker run -it -v /dbdata --name dbdata centos:7.4 

#创建一个数据卷容器dbdata。并创建一个数据卷挂载至/dbdata

其他容器可以通过--volumes-from 来挂载dbdata容器中的数据卷:

docker run -it --volumes-from dbdata --name db1 centos:7.4 

docker run -it --volumes-from dbdata --name db2 centos:7.4 

容器db1和db2的挂载同一个数据卷到/dbdata目录,三个容器任何一方在该目录的写入其他容器都能看到

--volumes-from参数可以多次使用,从多个容器挂载多个数据卷

如果删除了挂载的容器,数据卷并不会被自动删除,如果要删除一个数据卷,必须在删最后一个还挂载着它的容器时显示的使用docker rm -v 命令来指定同时删除关联的容器。

利用数据卷容器迁移数据

备份数据

  #先创建一个容器worker,并使用--volumes-from将dbdata挂载到worker容器,然后使用-v参数将容器的/backup目录映射到宿主机的backup目录。然后在容器中执行备份操作,这样就把数据备份到宿主机的/backup目录中了

docker run -it --volumes-from dbdata -v /backup:/backup --name worker centos:7.4 

exit 

ll /backup/backup.tar.gz 

还原数据

  #创建一个新容器,并用-v 参数挂载到本地的备份目录,然后执行解压操作,将备份文件解压到/dbdata目录

docker run -it -v /dbdata --name dbdata2 centos:7.4 /bin/bash

exit 

#c创建一个容器dbdata2

docker run -it --volumes-from dbdata2 -v /backup:/backup centos:6 tar xf /backup/backup.tar.gz

删除数据盘

查看主机上现有的数据盘

docker volume ls 

默认情况下,在删除容器时,docker并不会删除其数据盘,查看没有容器在使用的数据盘方法如下:

docker volumes ls 0f dangling=true 

#如果想要删除没有使用的数据盘,使用如下指令:

docker volume rm VOLUME_NAME

#删除容器时,同时删掉数据盘,则使用

docker rm -v container_name 

挂载主机目录

把本地的一个目录挂载到容器,修改本地的目录就可以达到修改容器的目的

创建一个挂载的容器

docker run -d -p 80:80 -v /data:/usr/local/apache2/htdocs httpd:2.4 

#查看容器

docker ps -a 

访问http

在物理机写入数据

echo "Hello Dokcer" >> /data/index.html 

#在物理机目录中修改网页后再次查看容器的网页

查看

进入容器

docker exec -it <容器名称或容器ID>

cd /usr/local/apache2/htdocs/

ls -l 

cat index.html 

exit 

删除容器测试

docker rm -rf  <容器名称或容器ID>‘

docker run -d -p 80:80 -v /data:/usr/local/apache2/htdocs httpd:2.4

#进入容器查看

docker exec -it <容器名称或容器ID>

cd /usr/local/apache2/htdocs/

ls -l 

cat index.html 

exit 

访问网页测试

测试再次创建的容器数据还在

docker挂载数据卷的默认为读写(rw),用户也可以通过ro指定为只读

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值