zoukankan      html  css  js  c++  java
  • docker 数据管理

    一、数据卷

    Docker volum 通常翻译为数据卷,用于保存持久化数据。

    当我们将数据库例如MySQL运行在Docker容器中时,一般将数据通过Docker Volume保存在主机上,这样即使删除MySQL容器,数据依然保存在主机上,有效保证了数据的安全性。

    将数据从宿主机挂载到容器中的三种方式:
      使用 docker [ container ] run 命令的时候,可以使用 -mount 选项来使用数据卷.
      -mount 选项支持三种类型的数据卷,包括:

    • volume:普通数据卷,映射到主机/var/lib/docker/volumes路径下;保存数据的最佳方式
    • bind:绑定数据卷,映射到 主机指定路径下;
    • tmpfs:临时数据卷,只存在于内存中,如果不希望将数据持久存储在任何位置,可以使用tmpfs,同时避免写入容器可写层提高性能。
    # docker volume --help
    
    Usage:    docker volume COMMAND
    Manage volumes
    Commands:
    create    创建一个数据卷
    inspect   显示一个或者多个数据卷的详细信息
    ls       列出已有数据卷
    prune     清理无用数据卷
    rm       删除一个或者多个数据卷
    
    Run 'docker volume COMMAND --help' for more information on a command.


    创建、查看数据卷:

    # 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
    上述命令等同于使用旧的-v标记可以在容器内创建一个数据卷:
    # docker run -d --name=nginx-test -v nginx-vol:/usr/share/nginx/html nginx
    上述命令的意思是:创建nginx容器,命名为nginx-test,将容器nginx-test挂载在目录/usr/share/nginx/html上

    清理数据卷:

    # docker stop nginx-test    // 停止运行容器
    # docker rm nginx-test      // 删除容器
    # docker volume rm nginx-vol    // 删除数据卷

      注意:

    • 1.如果没有指定卷,自动创建。
    • 2.建议使用–mount,更通用。

    数据持久化测试
    用卷创建一个容器:

    # docker run -d -it –name=nginx-test –mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
    # docker run -d -it –name=nginx-test -v /app/wwwroot:/usr/share/nginx/html nginx

    验证绑定:

    # docker inspect nginx-test

    二、数据卷容器

    数据卷容器也是一个容器,目的是专门提供数据卷给其他容器挂载。

    创建数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata:

    # docker run -it -v /dbdata --name dbdata ubuntu

    使用 --volumes-from 来挂载dbdata容器中的数据卷,例如创建db1和db2两个容器,并从dbdata容器挂载数据卷:

    # docker run -it --volume-from dbdata --name db1 ubuntu
    # docker run -it --volume-from dbdata --name db2 ubuntu 

    容器db1和db2都挂载同一数据卷到相同的dbdata目录下,三个容器任何一方在该目录下的写入,其他容器都可以看到。

    三、利用数据卷容器来迁移数据
    可以利用数据卷容器对其中的数据卷进行备份、回复,以实现数据的迁移。
    1、备份
    利用下面的命令来备份dbdata数据卷容器内的数据卷:

    # docker run --volume-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar dbdata

    代码分析:
    利用ubuntu镜像创建worker容器;
    --volume-from dbdata 参数让worker容器挂载dbdata容器的数据卷(即dbdata数据卷);
    -v $(pwd):/backup 参数挂载本地的当前目录到worker容器的/dbdata的目录下 ;
    worker容器启动后,使用 tar cvf /backup/backup.tar dbdata命令将/dbdata下内容备份为容器内的/backup/backup.tar,即宿主主机当前目录下的backup.tar。

    2、恢复
    恢复数据到一个容器:
    首先创建一个带有数据卷的容器dbdata2:

    # docker run -v dbdata --name dbdata2 ubuntu /bin/bash

    然后创建另一个新的容器,挂载dbdata2的容器,并使用untar解压备份文件到所挂载的容器卷中:

    # docker run --volume-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
  • 相关阅读:
    [Luogu 3794]签到题IV
    [JSOI 2015]最大公约数
    [BZOJ 5123][Lydsy1712月赛]线段树的匹配
    [BZOJ 5127][Lydsy1712月赛]数据校验
    [Codeforces Educational Round 71]Div. 2
    [NOIp 2018]all
    [BZOJ 2134]单选错位
    [hihoCoder 1384]Genius ACM
    [POJ 3233]Matrix Power Series
    [USACO 09FEB]Bullcow
  • 原文地址:https://www.cnblogs.com/carriezhangyan/p/10863801.html
Copyright © 2011-2022 走看看