Docker容器中的数据管理

Docker容器中的数据管理



概述


用户在使用docker的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行相应的备份,甚至想把多个容器之间进行数据的共享,这必然涉及容器的数据管理操作。容器中管理数据主要有两种方式:

  • 数据卷(Data Volumes)
  • 数据卷容器(Data Volume Containers)

本部分会首先介绍如何在Docker容器中创建数据卷,并且把本地的目录或者文件挂载到哦容器内的数据卷中,接下来会介绍如何使用数据卷容器在容器和主机、容器和容器之间共享数据,并且实现数据的备份和恢复。

数据卷


数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特性:

  • 数据卷可与在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像
  • 数据卷会一直存在,直到没有容器使用

数据卷的使用,非常类似于在Linux目录下对目录或者文件进行mount操作,也就是我们经常说的在Linux中的挂载操作。

在容器内创建一个数据卷

在使用docker run 命令的时候,使用-v标记可以在容器内创建一个数据卷,多次使用-v标记可以创建多个数据卷。

  • 挂载一个主机目录作为数据卷
    也就是将一个宿主机的目录作为数据卷挂载,这样就能实现宿主机目录和docker容器目录之间的数据共享。
$ docker run -it --rm --name web -v /src/webapp:/opt/webapp training/webapp python app.py #将宿主机中的/src/webapp目录挂载到容器中的/opt/webapp中,如果宿主机中的目录不存在会自动的创建该目录的完整路径,在挂载目录时,默认容器对目录有rw权限,当然我们也可以指定:ro即为只读。
  • 挂载一个主机的本地文件作为数据卷
    -v标记也可以从主机挂载单个文件到容器中作为数据卷:
$ docker run --name jpzhu/ubuntu-it --rm -v ~/.bash_history:/.bash_history centos /bin/bash  #-rm参数主要是当容器存在时自动的删除原来的容器,主要是为了避免因为容器名重复不能成功的创建

注意:直接挂载一个文件到容器中,使用vim命令,可能会造成文件inode的改变,从docker 1.1.0开始,这会导致报错信息,所以推荐的方式是直接挂载文件所在的目录。

数据容器


如果用户需要在容器之间共享一些持续更新的数据,最简单的方式就是使用数据卷容器。数据卷容器其实就是一个普通的容器,只不过是专门用它提供数据卷供其他容器挂载,使用方法如下:

  • 首先,创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata
$ docker run --name jpzhu_centos -v /jpzhu_file --rm -it centos /bin/bash #创建一个数据容器并且挂载其中/jpzhu_file文件作为其它容器共享的数据卷

在数据容器的jpzhu_file文件中执行下面的操作:

$ vim test  #在其中写入This is test file.
  • 接着,可以在其它的容器中使用–volumes-from 来挂载dbdata中的/jpzhu_file

例如,创建两个d1、d2容器,并且从dbdata容器挂载目录。

$ docker run -it --volumes-from dbdata --name jpzhu_centos1 centos 
$ docker run -it --volumes-from dbdata --name jpzhu_centos2 centos 

说明:–volumes-from 参数可以多次使用,任何容器都可以作为数据卷容器,并且–volumes-from挂载的数据卷容器不需要处于运行状态也可实现数据的同步。

利用数据卷容器迁移数据


可以利用数据卷容器对其中的数据进行备份、恢复,以实现数据的迁移操作。

利用数据卷容器进行数据备份

使用如下命令来备份数据卷容器dbdata中的数据卷:

$ docker run --name worker -v ${pwd}:/backup --volumes-from dbdata -d centos tar cvf /backup/backup.tar /dbdata
利用数据卷容器进行数据恢复

在此不再赘述其使用,需要的时候在网络上搜索。

相关文章
相关标签/搜索