目录
- 将数据从宿主机挂载到容器中的三种方式
- Volume
- Bind Mounts
将数据从宿主机挂载到容器中的三种方式
Docker提供三种方式将数据从宿主机挂载到容器中:
• volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式。
• bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中。
• tmpfs:挂载存储在主机系统的内存中,而不会写入主机的文件系统。如果不希望将数据持久存储在任何位置,可以使用 tmpfs,同时避免写入容器可写层提高性能。
Volume
案例:两个nginx共享一个数据卷
#创建数据卷
[root@k8s-master ~]# docker volume create nginx_vol
nginx_vol
#查看数据卷
[root@k8s-master ~]# docker volume ls
DRIVER VOLUME NAME
local nginx_vol
#查看某数据卷详情
[root@k8s-master ~]# docker volume inspect nginx_vol
[
{
"CreatedAt": "2020-06-07T16:54:52+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/nginx_vol/_data",
"Name": "nginx_vol",
"Options": {},
"Scope": "local"
}
]
挂载的位置
Mountpoint:/var/lib/docker/volumes/nginx_vol/_data
#创建两个容器指定数据卷
[root@k8s-master ~]# docker run -d -p 80:80 --name mynginx01 --mount src=nginx_vol,dst=/usr/share/nginx/html nginx
80efb55b67c7352aba2acd9a8312678fb7f1de676dfcfc6ea330024f3bdff865
[root@k8s-master ~]# docker run -d -p 81:80 --name mynginx02 --mount src=nginx_vol,dst=/usr/share/nginx/html nginx
a9064351c75c7ef776a4f728160ab875adfff5f7c08aa3a1b53d1f42e97e09ee
#进入挂载的目录下,更新index.html目录
[root@k8s-master ~]# cd /var/lib/docker/volumes/nginx_vol/_data
[root@k8s-master _data]# ll
总用量 8
-rw-r--r--. 1 root root 494 5月 26 23:00 50x.html
-rw-r--r--. 1 root root 612 5月 26 23:00 index.html
#删除其中一个容器,不影响另一个容器的使用,因为两个容器公用同一份数据,如果不挂载数据卷,每个容器的数据都是独立的,一旦出现容器启动异常,数据拿取失败就得不偿失了.
Bind Mounts
案例与上同理
挂载方式默认是volume,需要指定挂在类型为bind
此挂载方式适合用于产生临时文件场景
注意:
- 如果源文件/目录没有存在(src),不会自动创建,会抛出一个错误。
- 如果挂载目标在容器中非空目录,则该目录现有内容将被隐藏
[root@k8s-master ~]# docker run -d -p 80:80 --name=nginx-test --mount type=bind,src=/mnt,dst=/usr/share/nginx/html nginx
总结两种常用数据卷:
Volume特点:
• 多个运行容器之间共享数据。
• 当容器停止或被移除时,该卷依然存在。
• 多个容器可以同时挂载相同的卷。
• 当明确删除卷时,卷才会被删除。
• 将容器的数据存储在远程主机或其他存储上
• 将数据从一台Docker主机迁移到另一台时,先停止容器,然后备份卷的目录(/var/lib/docker/volumes/)
Bind Mounts特点:
• 从主机共享配置文件到容器。默认情况下,挂载主机/etc/resolv.conf到每个容器,提供DNS解析。
• 在Docker主机上的开发环境和容器之间共享源代码。例如,可以将Maven target目录挂载到容器中,每次在Docker主机 上构建Maven项目时,容器都可以访问构建的项目包。
• 当Docker主机的文件或目录结构保证与容器所需的绑定挂载一致时