前面学习了镜像的管理、容器的管理,今天学习数据的管理,毕竟一个服务或一个程序的发布是离不开数据的,数据才是企业的核心。html
# 1、数据的存放形式
咱们在部署容器的时候每每将数据是存放宿主机目录的,你想若是把数据存放容器上,一不当心删除了容器,就哭瞎眼了;并且放宿主机更便于维护和管理。将数据从宿主机挂载到容器中的三种方式:
一、 Volume:Docker会管理宿主机文件系统的一部分(/var/lib/docker/volumes),保存数据的最佳方式。nginx
二、Bind Mounts:将宿主机上的任意位置的文件或目录挂载到容器中,说白了就是将宿主机的目录映射到容器的目录。docker
三、 tmpfs:挂载存储在主机系统的内存中,而不会写入主机的文件系统。若是不但愿将数据持久存储在何人位置,可使用tmpfs,同时避免写入容器可写层提升性能(此方法基本不用考虑)。app
# volume:
# 管理数据卷:
#docker volume create nginx-vol 建立数据卷
#docker volume ls 查看数据卷
#docker volume inspect nginx-vol 查看数据卷详细信息
# 用已有卷建立一个容器:
#docker run -d --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
#docker run -d --name=nginx-test -v nginx-vol:/usr/share/nginx/html nginx
解释:--name=nginx-test ,给容器起名字
--mount 挂载数据卷,docker-ce版本新增的参数
src=nginx-vol 宿主机的数据卷
dst=/** 容器对应的路径
-v 是旧版本中宿主机和容器目录映射的参数
# 清理:**
#docker stop nginx-test
#docker rm nginx-test
#docker volume rm nginx-vol
注意:
一、若是没有指定卷,自动建立
二、建议使用--mount, 更通用。ide
# Bind Mounts
用卷建立一个容器:
#docker run -d --name=nginx-test --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
#docker run -d --name=nginx-test -v /app/wwwroot:/usr/share/nginx/html nginx
验证绑定:
#docker inspect nginx-test
清理:
#docker stop nginx-test
#docker rm nginx-test
注意:
一、若是源文件/目录没有存在,建立容器时报错
二、若是挂载目标在容器中非空目录,则该目录现有容器将被隐藏
三、不会自动建立,会抛出一个错误。性能
Volume特色:
多个运行容器之间共享数据,多个容器能够同时挂载相同的卷。
当容器中止或被移除时,该卷依然存在。
当明确删除卷时,卷才会被删除。
将容器的数据存储咋i远程主机或其余存储上。
将数据从一台docker主机迁移到另外一台时,先中止容器,而后容器备份卷的目录(/var/lib/docker/volumes)
Bind Mount特色:
从主机共享配置文件到容器。默认状况下,挂载主机/etc/resolv.conf到每一个容器,提供DNS解析。
在docker主机上的开发环境和容器之间共享源代码。例如,能够将Maven target目录挂载到容器中,每次在docker主机上构建Maven项目时,容器均可以访问构建的项目包。
当docker主机的文件或目录机构保证与容器所需的绑定挂载一致时学习