【Docker】数据持久化 挂载

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文件夹

【Docker】数据持久化 挂载_第1张图片

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

你可能感兴趣的:(docker,docker,容器,运维)