docker挂载数据到容器的方法

目录

    • 1. 三种挂载数据的方法
      • - volumes
      • - bind mounts
      • - tmpfs
    • 2. 管理卷
      • Volume:
        • 创建一个卷
        • 如何挂载
        • 删除卷
    • Bind Mounts
        • 创建一个Bind 卷
        • 删除Bind卷
    • Volume 与 Bind 特点

PS:关于卷的官方文档:https://docs.docker.com/storage/

1. 三种挂载数据的方法

- volumes

docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。
保存数据的最佳方式。

- bind mounts

将宿主机上的任意位置文件或者目录挂载到容器中。

- tmpfs

挂载存储在主机的内存中,不持久存储。

常用为 volumes,bind mounts,tmpfs并不常用

在这里插入图片描述

2. 管理卷

Volume:

volume属于管理命令
在这里插入图片描述
命令下的参数比较少,也比较好理解

1
2
3
4
5
create      //创建
inspect     //查看卷详情
ls          //列出卷
rm          //删除卷
prune       //删除所有未使用的卷

在这里插入图片描述

创建一个卷

1
$ docker volume create web_01_vol

创建的卷在这个目录下:
/var/lib/docker/volumes
在这里插入图片描述

如何挂载

如何挂载这个卷到容器中

1
$ docker container run -itd --name=web_01 -p 8080:80 --mount src=web_01_vol,dst=/usr/share/nginx/html nginx

在这里插入图片描述

容器创建成功后,该目录也会挂载到 /var/lib/docker/volumes/web_01_vol/_data
在这里插入图片描述
修改index.html文件 验证

在这里插入图片描述
在这里插入图片描述
如果没有指定挂载卷,会自动挂载一个卷
在这里插入图片描述
重新创建一个卷积,共用一个卷,卷积的文件通用,数据卷不会因为容器的删除而丢失,它会长期保留。

1
$ docker container run -d --name=test_01 --mount src=web_01_vol,dst=/usr/share/nginx/html nginx

在这里插入图片描述
在这里插入图片描述

删除卷

1
2
3
$ docker container stop 7740ca246029 f11f0c5fbcf5       //关机
$ docker container rm f11f0c5fbcf5 7740ca246029         //删除容器
$ docker volume rm web_01_vol                           //删除卷

Bind Mounts

它是将宿主机的某个文件挂载到容器中
其命令格式都一样

实例:

创建一个Bind 卷

假如宿主机 /home/目录下有个1.txt文件需要挂载到容器中

1
$ docker container run -itd --name=test_01 --mount type=bind,src=/home/test/123.txt,dst=/home/1.txt centos

在这里插入图片描述

验证
如果没有指定卷,会报错。

1
$ docker container inspect c4a1deeb58d2

在这里插入图片描述

删除Bind卷

跟Volume一样

1
2
3
$ docker container stop 7740ca246029 f11f0c5fbcf5       //关机
$ docker container rm f11f0c5fbcf5 7740ca246029         //删除容器
$ docker volume rm web_01_vol                           //删除卷

Volume 与 Bind 特点

Volume

  • 多个运行容器之间共享数据,多个容器可以同时挂载相同的卷。
  • 当容器停止或被移除时,该卷依然存在。
  • 当明确删除卷时,卷才会被删除。
  • 将容器的数据存储在远程主机或其他存储上(间接)
  • 将数据从一台Docker主机迁移到另一台时,先停止容器,然后备份卷的目(/var/lib/docker/volumes/)

Bind

  • 从主机共享配置文件到容器。默认情况下,挂载主机/etc/resolv.conf到每个容器,提供DNS解析。
  • 在Docker主机上的开发环境和容器之间共享源代码。例如,可以将Maven target目录挂载到容器中,每次在Docker主机
  • 上构建Maven项目时,容器都可以访问构建的项目包。
  • 当Docker主机的文件或目录结构保证与容器所需的绑定挂载一致时