应用程序数据
docker将数据从宿主机挂载到容器中的三种方式:
- volumes:docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)—推荐
- bind mounts:挂载宿主机文件或目录到容器中
- tmpfs:挂载存储到宿主机内存,不写入文件系统(临时存储)
volume和bind mount区别
相同点:
利用宿主机的文件系统
不同点:
- volume是docker自身管理的目录中的子目录,所以不存在权限引发的挂载的问题,并且目录路径是docker自身管理的,所以也不需要在不同的服务器上指定不同的路径
- 当容器外的对应目录是空的,volume会先将容器内的内容拷贝到容器外目录,而mount会将外部的目录覆盖容器内部目录
注意点:
- volume 会引起 docker目录膨胀,因为既要存镜像,又要存 volume,最好不要放在系统盘,将 docker 的安装目录配置到其他更大的挂载盘
- volume 还有一个不如bind mount的地方,不能直接挂载文件,例如挂载nginx容器的配置文件:nginx.conf。
这里需要说明,类似于配置文件这种单文件方式并不适合使用volume,bind mount虽然也可以解决,但由于config文件中包含一些类似于数据库密码等敏感信息,因此,最好的方式是使用tmpfs
数据卷的使用
- 创建数据卷
docker volume create nginx-vol
- 创建docker
docker run -itd --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
或
docker run -itd -v nginx-vol:/usr/share/nginx/html nginx