Docker学习笔记10-----Docker数据持久化

Docker数据持久化

默认情况下,在容器内创建的所有文件都存储在可写容器层上。这意味着:

  • 当该容器不再存在时,数据将不会持久保存,并且如果另一个进程需要它,则可能很难从容器中取出数据。
  • 容器的可写层与运行容器的宿主主机紧密耦合。不能轻易地将数据移动到其他地方。
  • 写入容器的可写层需要 存储驱动程序来管理文件系统。存储驱动程序使用Linux内核提供联合文件系统。与使用直接写入主机文件系统的数据卷相比,这种额外的抽象降低了性能 。

Docker为容器提供了两个选项来将文件存储在主机中,以便即使容器停止后文件也可以持久存储:volumes和bind mounts。如果在Linux上运行Docker,则还可以使用tmpfs mount。如果在Windows上运行Docker,则可用使用named pipe。

选择正确的mount类型

无论选择哪种mount类型,容器内的数据看起来都是相同的,在容器的文件系统中都是文件或目录。

volumes、bind mount和tmpfs mount仅仅是数据存放在宿主主机的位置不同。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bmgmgdq2-1615188118287)(8A190F3773D746F4BAD87F50C20D4D62)]

  • Volumes 存储在宿主主机文件系统上,该文件系统由Docker管理,保存在Linux的/var/lib/docker/volumes/路径下。非Docker进程不应该修改这部分文件系统。Volumes是持久化存储数据的最佳方式。

  • Bind mounts 存储在宿主主机的任何位置。他们甚至可能是重要的文件或文件夹。Docker主机或Docker容器上的非Docker进程可以随时对其进行修改。

  • tmpfs mounts 仅存储在宿主主机系统的内存中,并且永远不会写入宿主主机系统的文件系统中。

volume实操
创建MySQL容器
[root@localhost ~]# docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=root mysql
查看volume
[root@localhost ~]# docker volume ls
DRIVER              VOLUME NAME
local               e91d972f5be6402a063963e6d803243dc9f42469a43a2045389d13c183a6da9d
查看volume详情
[root@localhost ~]# docker volume inspect e91d972f5be6402a063963e6d803243dc9f42469a43a2045389d13c183a6da9d
[
    {
        "CreatedAt": "2021-03-07T12:06:18Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/e91d972f5be6402a063963e6d803243dc9f42469a43a2045389d13c183a6da9d/_data",
        "Name": "e91d972f5be6402a063963e6d803243dc9f42469a43a2045389d13c183a6da9d",
        "Options": null,
        "Scope": "local"
    }
]
映射volume名字

通过-v 命令进行映射-v mysql_volume:/var/lib/mysql

docker run -d --name mysql01 -v mysql_volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql
查看volume
[root@localhost ~]# docker volume ls
DRIVER              VOLUME NAME
local               e91d972f5be6402a063963e6d803243dc9f42469a43a2045389d13c183a6da9d
local               mysql_volume
查看volume详情
[root@localhost ~]# docker volume inspect mysql_volume 
[
    {
        "CreatedAt": "2021-03-07T12:11:00Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/mysql_volume/_data",
        "Name": "mysql_volume",
        "Options": null,
        "Scope": "local"
    }
]
bind mounts实操
创建tomcat容器
[root@localhost ~]# docker run -d --name my-tomcat -v /tmp/tomcat/test:/usr/local/tomcat/webapps/test -p 8080:8080 tomcat:8.5.32
查看目录
  • Linux: /tmp/tomcat/test
  • tomcat容器:/usr/local/tomcat/webapps/test
分别在两个目录中修改文件,查看是否同时变动
Linux
[root@localhost test]# ls
index.html
tomcat容器
root@e81c97397dac:/usr/local/tomcat/webapps/test# ls
index.html

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lTvpnhSm-1615188118289)(D5A3E1DE4EB8450BA06D4702954212EA)]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

itmrl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值