docker之数据存储
2017-12-08 16:52
148 查看
1 简介
docker镜像是一个只读的文件系统,容器是镜像的运行环境,即在镜像基础上再加一层可读写的层,因此所有容器中的数据写入时均写到容器中,会随着容器的销毁而消失。为确保容器可以存储数据,docker引入数据卷volume来处理此情况。volume就是目录或者文件,它可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。
2 使用
volume 存储在宿主机的默认路径为/var/lib/docker/volumes/。2.1 分类
数据卷分为只读和可读写两种属性,默认为可读写,在定义时添加ro则表明为只读。数据卷有如下几种:
l 无名数据卷
docker会默认分配一个唯一的名字。在compose文件中定义时不写冒号前的内容,就是无名数据卷。
l 有名数据卷
在compose文件中定义时冒号前的内容必须只是一个名称,不是路径。
l 映射数据卷
直接将宿主机的目录、文件映射到容器中。在compose文件中定义时冒号前的内容必须是路径名称。
2.2 创建
(1) 命令创建docker volume create --name yourname
创建后可以使用命令docker volume ls查看到。
(2) 容器创建时指定
可以在docker run -v 来指定,格式为:A:/path_to_container,
如果A是一个绝对路径,则是一个“映射数据卷”,如果A是一个名称,则是一个有名数据卷,如果A为空则是一个无名数据库。
(3) compose文件指定
其格式与容器创建时非常类似,只是支持A为相对路径。
2.3 查看
可以直接在宿主机上查看有名、无名数据库内容,默认路径为/var/lib/docker/volumes/。同时还需要查看某容器当前正在使用的数据卷,可以使用docker inspect container_name,返回信息中的Mounts就会显示所有正在使用的数据卷内容。2.4 备份、恢复、迁移
比如mysql镜像启动的容器中,需要将mysql存储的数据库放置到数据卷中,必须支持数据库的备份、恢复、迁移。直接运行一个docker 容器,并挂载需要操作的数据卷,然后对其进行备份即可。
恢复、迁移时操作类似。
2.5 删除
可以使用命令docker volume rm删除数据卷,当且仅当此数据卷没有容器引用时才可以删除。3 配合compose
所有docker容器均使用compose来启动,如此既可以减少输入的命令参数,记录所有的配置,同时在重启时可以利用原来的容器,不会随着容器创建销毁导致容器越来越多。对于某个应用来说,都有配置、数据两个内容,配置区直接映射到当前compose目录下的某个子目录,如此可以动态修改应用的配置;数据区也映射到当前compose目录下的某个子目录,如此可以在宿主机上直接查看应用日志,比如nginx的日志。
nginx:
restart:always
image:dockerreg.maxnetsys.com:5000/maxnet-nginx
ports:
-"5000:5000"
links:
-registry
volumes:
-./auth:/etc/nginx/conf.d/
-./auth/nginx.conf:/etc/nginx/nginx.conf:ro
-./log:/var/log/nginx
上述为nginx的一个compose配置。定义了三个数据卷,当前目录下的auth目录映射到容器中的/etc/nginx/conf.d,如此nginx容器可以直接使用宿主机的这些内容,对于nginx.conf是只读状态映射到nginx容器,log目录下记录了nginx容器的所有日志。
相关文章推荐
- Docker 在容器中存储数据 - 选择存储驱动程序
- docker数据存储方式(bind--mount)
- Docker mysql 把数据存储在本地目录
- docker数据存储方式(tmpfs)
- Docker 管理应用数据 - 存储概述
- Docker镜像存储相关数据结构
- Docker 在容器中存储数据 - 关于存储驱动程序
- Docker mysql 把数据存储在本地目录
- 『中级篇』docker的数据持久化存储和数据共享(32)
- 11: docker存储之 数据卷以及数据卷容器
- Docker 持久化存储和数据共享_Volume
- Docker 存储之数据卷(Volume)
- Swarm 如何存储数据?- 每天5分钟玩转 Docker 容器技术(103)
- 详解Docker的持久化存储和数据共享
- Docker 在容器中存储数据 - 使用 Device Mapper 存储驱动程序
- Swarm 如何存储数据?- 每天5分钟玩转 Docker 容器技术(103)
- Docker mysql 把数据存储在本地目录
- docker解决数据存储问题的方案
- Swarm 如何存储数据?- 每天5分钟玩转 Docker 容器技术(103)
- 修改Docker数据存储目录