docker之数据存储

1     简介

docker镜像是一个只读的文件系统,容器是镜像的运行环境,即在镜像基础上再加一层可读写的层,因此所有容器中的数据写入时均写到容器中,会随着容器的销毁而消失。为确保容器可以存储数据,docker引入数据卷volume来处理此情况。

volume就是目录或者文件,它可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。

2     使用

volume 存储在宿主机的默认路径为/var/lib/docker/volumes/。

2.1    分类

数据卷分为只读和可读写两种属性,默认为可读写,在定义时添加ro则表明为只读。

数据卷有如下几种:

无名数据卷

docker会默认分配一个唯一的名字。在compose文件中定义时不写冒号前的内容,就是无名数据卷。

有名数据卷

在compose文件中定义时冒号前的内容必须只是一个名称,不是路径。

映射数据卷

直接将宿主机的目录、文件映射到容器中。在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容器的所有日志。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值