将宿主机数据挂载到容器中的三种方式
• volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式。
• bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中。
• tmpfs:挂载存储在主机系统的内存中,而不会写入主机的文件系统。如果不希望将数据持久存储在任何位置,可以使用 tmpfs,同时避免写入容器可写层提高性能。
Volume数据卷管理
创建nginx的数据卷
[root@VM_0_8_centos ~]# docker volume create nginx_vol nginx_vol [root@VM_0_8_centos ~]# docker volume ls DRIVER VOLUME NAME local nginx_vol
查看数据卷
[root@VM_0_8_centos ~]# docker volume inspect nginx_vol [ { "CreatedAt": "2019-09-05T20:20:19+08:00", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/nginx_vol/_data", "Name": "nginx_vol", "Options": {}, "Scope": "local" } ]
删除所有的容器
[root@VM_0_8_centos ~]# docker rm -f $(docker ps -a |awk '{print $1}') 19fc30aa95c2 7ddab59d9cd2 df53608eeaa9 Error: No such container: CONTAINER
用数据卷创建一个容器
[root@VM_0_8_centos ~]# docker run -d --name=nginx01 --mount src=nginx-vol,dst=/usr/share/nginx/html nginx b94dd4cedf87b394619d82652473e4916d2666d7219a49a8196b30ced373398c [root@VM_0_8_centos ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b94dd4cedf87 nginx "nginx -g 'daemon of…" 10 seconds ago Up 9 seconds 80/tcp nginx01
查看有没有加载容器
[root@VM_0_8_centos ~]# docker inspect nginx01
创建数据卷并映射端口
[root@VM_0_8_centos ~]# docker run -d --name=nginx02 -p 88:80 --mount src=nginx-vol,dst=/usr/share/nginx/html nginx abbeadd98dfba460090ea693f3209c6497a3bc7ba5a7c2011937b410de994310
查看映射的端口
[root@VM_0_8_centos ~]# docker port nginx02 80/tcp -> 0.0.0.0:88
删除容器卷(删除之后里面的数据会消失)
[root@VM_0_8_centos ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES abbeadd98dfb nginx "nginx -g 'daemon of…" 6 minutes ago Up 6 minutes 0.0.0.0:88->80/tcp nginx02 b94dd4cedf87 nginx "nginx -g 'daemon of…" 10 minutes ago Up 10 minutes 80/tcp nginx01 [root@VM_0_8_centos ~]# docker rm -f nginx01 nginx01 [root@VM_0_8_centos ~]# docker rm -f nginx02 nginx02 [root@VM_0_8_centos ~]# ls /var/lib/docker/volumes/nginx-vol/_data 50x.html index.html [root@VM_0_8_centos ~]# docker volume rm nginx-vol nginx-vol [root@VM_0_8_centos ~]# ls /var/lib/docker/volumes/nginx-vol/_data ls: cannot access /var/lib/docker/volumes/nginx-vol/_data: No such file or directory
注意:
1. 如果没有指定卷,自动创建。
2. 建议使用--mount,更通用。
Bind Mounts
把你宿主机的目录或者文件挂载到容器中
[root@VM_0_8_centos ~]# docker run -d --name=nginx01 -p 88:80 --mount type=bind,src=/mnt/,dst=/usr/share/nginx/html nginx f28911367bc28b83cfff28bdfd768ca40771fe3840bfafb252e9edc4a49d9ad9 [root@VM_0_8_centos ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f28911367bc2 nginx "nginx -g 'daemon of…" 4 seconds ago Up 4 seconds 0.0.0.0:88->80/tcp nginx01
注意:
1. 如果源文件/目录没有存在,不会自动创建,会抛出一个错误。
2. 如果挂载目标在容器中非空目录,则该目录现有内容将被隐藏。
验证绑定
[root@VM_0_8_centos ~]# docker inspect nginx01 "Mounts": [ { "Type": "bind", "Source": "/mnt/", "Target": "/usr/share/nginx/html" } ],
网页验证
[root@VM_0_8_centos ~]# cd /mnt/ [root@VM_0_8_centos mnt]# echo "bbs.centoscn.vip" > index.html
Volume特点:
• 多个运行容器之间共享数据。
• 当容器停止或被移除时,该卷依然存在。
• 多个容器可以同时挂载相同的卷。
• 当明确删除卷时,卷才会被删除。
• 将容器的数据存储在远程主机或其他存储上
• 将数据从一台Docker主机迁移到另一台时,先停止容器,然后备份卷的目录(/var/lib/docker/volumes/)
Bind Mounts特点:
• 从主机共享配置文件到容器。默认情况下,挂载主机/etc/resolv.conf到每个容器,提供DNS解析。
• 在Docker主机上的开发环境和容器之间共享源代码。例如,可以将Maven target目录挂载到容器中,每次在Docker主机 上构建Maven项目时,容器都可以访问构建的项目包。
• 当Docker主机的文件或目录结构保证与容器所需的绑定挂载一致时
- 我的QQ
- QQ扫一扫
-
- 我的头条
- 头条扫一扫
-
评论