Docker的镜像是只读的,但是容器是可写的,我们可以将数据写入到容器,不过一旦容器删除数据将会丢 失,那么有什么办法能将数据进行持久化存储呢?
——在宿主机上开辟一块地方,存储内容和docker容器的存储内容一样
一、Data Volume
服务器托管网
Data Volume本质上是Docker主机文件系统中的目录或文件,能够直接被挂载到容器的文件系统中,容器可以读写Volume中的数据,Volume数据可以被永久的保存,即使容器已经被销毁停止运行。
二、三种挂载方式
【具名挂载】和【匿名挂载】这两种方式不常用,这两种方式Docker会自动在主机的/var/lib/docker/volumes下生成一个目录
如果把容器删除了,需要重新从宿主机拿到容器,直接再次执行挂载命令即可
1、指定路径挂载——宿主机和容器中路径均给出
docker run -p 33306:3306 -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
解释:
容器启动时通过 -v 参数将 docker 主机上的/my/own/datadir目录挂载到容器里/var/lib/mysql目录
宿主机的文件夹(/my/own/datadir) 和 容器中的文件夹(/var/lib/mysql)产生映射
参数:
-
-v:–Volume,数据持久化
这里不用自己新建文件夹/my/own/datadir /var/lib/mysql,没有的话会自动创建的
-
-v参数中,冒号”:”前面的目录是宿主机目录,后面的目录是容器内目录。
- -e 后面跟的环境变量,每个不同的镜像可能不一样,可以去官网查询
- 这里后面跟的是密码
结果查看:宿主机挂载的文件内容和容器内部的内容一样
1、进入容器内部,bin/bash没有,使用bin/sh
挂载目标路径可以放两(多)个位置——使用两(多)个-v 参数
docker run -t -i -v /var/run/docker.sock:/var/run/docker.sock -v /path/to/static-docker-binary:/usr/bin/docker busybox sh
2、具名挂载——宿主机路径中 只给出名字,不在前面加/
docker run -p 33306:3306 -v chenyang_mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
挂载结果:
docker/volumes文件夹下产生一个chenyang_mysql文件夹
3、匿名挂载
只给出容器里的路径,不给出宿主机的路径
docker run -p 33306:3306 -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
挂载结果
实际挂载到了宿主机的/var/lib/docker/volumes路径下——位于某个volume中,根据时间可以区分
4、结果查看
-
查看所有匿名volume
docker volume ls
-
查看数据卷信息
docker volume inspect chenyang_mysql
服服务器托管网务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
意图 将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可服务器托管网以一起工作。 适配器模式属于结构模式。 类适配器模式(通过继承的方式实现适配器模式) Adapter类,通过继承src类,实现dst类…