• 06容器的数据管理


    Docker数据管理

    容器中的管理数据主要有两种方式:

    方式 描述 特性
    1:数据卷(Data Volumes) 容器内数据直接映射到本地主机的目录,类似于挂载 1:数据卷可以在容器之间共享和重用
    2:对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作
    3:对数据卷的更新不会影响镜像,解耦开应用和数据
    4:卷会一直存在,直到没有容器使用,可以安全地卸载它
    2:数据卷容器(Data Volume Containers) 使用特定容器维护数据卷 1:多个容器之间共享一些会持续更新的数据

    查看帮助文档

    [root@docker ~]# docker volume --help
    
    Usage:  docker volume COMMAND
    
    Manage volumes
    
    Commands:
      create      Create a volume
      inspect     Display detailed information on one or more volumes
      ls          List volumes
      prune       Remove all unused local volumes
      rm          Remove one or more volumes
    
    或者:
    [root@docker ~]# man docker-volume-create    #查看子命令
    
    

    一:数据卷操作

    1:创建数据卷
    [root@docker ~]# docker volume create -d local  test
    test
    #-d, --driver="local" :Specify volume driver name
    
    # /var/lib/docker/volumes会有一个创建的数据卷
    [root@docker volumes]# ls -l /var/lib/docker/volumes/
    total 24
    -rw------- 1 root root 32768 Nov 16 13:37 metadata.db
    drwxr-xr-x 3 root root    18 Nov 16 13:37 test
    
    2:绑定数据卷:在创建容器的时候将主机的本地任意路径  挂载到 容器内作为数据卷
    2.1:
    [root@docker ~]# docker pull training/webapp
    Using default tag: latest
    latest: Pulling from training/webapp
    Image docker.io/training/webapp:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
    e190868d63f8: Pull complete 
    909cd34c6fd7: Pull complete 
    0b9bfabab7c1: Pull complete 
    a3ed95caeb02: Pull complete 
    10bbbc0fc0ff: Pull complete 
    fca59b508e9f: Pull complete 
    e7ae2541b15b: Pull complete 
    9dd97ef58ce9: Pull complete 
    a4c1b0cb7af7: Pull complete 
    Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d
    Status: Downloaded newer image for training/webapp:latest
    
    2.2:创建目录
    [root@docker ~]# mkdir /webapp
    
    2.3:绑定本地目录/webapp到容器的/opt/webapp目录
    [root@docker /]# docker run -d -P --name web --mount type=bind,source=/webapp,destination=/opt/webapp training/webapp python app.py
    ff6c0af55c8b73fa4b117d067280d53aca423e1bd658b65e445114e85fe6d3da
    #-P[大写]:在宿主机上通过随机端口映射容器内启用端口
    #-d:run the container in the background and print the new container ID
    #本地目录必须是绝对路径,容器路径没有就会自动创建
    
    #不建议使用training/webapp测试,创建数据卷之后,死活不能再进入容器
    #使用
    ubuntu@ubuntu:~$ sudo docker run -d -p 82:80 -v /src/webapp:/opt/webapp nginx
    245633eb9cea1a5833ff3e6b74b2905f11890f604d7c45e2fc3ec8f6aef2dfc2
    ubuntu@ubuntu:~$ docker ps -al
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
    245633eb9cea        nginx               "nginx -g 'daemon of…"   5 seconds ago       Up 4 seconds        0.0.0.0:82->80/tcp      trusting_goldberg
    ubuntu@ubuntu:~$ docker exec -it 2456 /bin/bash   #进入容器,并打开一个shell交互伪终端
    root@245633eb9cea:/# ls
    bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
    boot  etc  lib   media  opt  root  sbin  sys  usr
    root@245633eb9cea:/# cd opt/
    root@245633eb9cea:/opt# ls
    webapp
    root@245633eb9cea:/opt# cd webapp/
    root@245633eb9cea:/opt/webapp# ls
    root@245633eb9cea:/opt/webapp# touch test
    root@245633eb9cea:/opt/webapp# echo "I love you " >>test 
    root@245633eb9cea:/opt/webapp# 
    
    #重新开一个终端
    ubuntu@ubuntu:~$ cd /src/webapp/
    ubuntu@ubuntu:/src/webapp$ cat test 
    I love  you 
    
    
    下面这条命令效果一样:-v参数
    #格式: docker -it -v /宿主机绝对路径:/容器内目录  镜像
    [root@docker /]# docker run -d -P --name web -v /webapp:/opt/webapp training/webapp python app.py
               
    

    二:数据卷容器:

    1:创建一个数据卷容器dbdata,并将其中一个数据卷挂载到容器内的/dbdata
    [root@docker /]# docker run -it -v /dbdata --name dbdata  ubuntu:18.04
    root@075058f48803:/# cd /dbdata/
    root@075058f48803:/dbdata# ls
    #v|--volume[=[[HOST-DIR:]CONTAINER-DIR[:OPTIONS]]]
    #The CONTAINER-DIR must be an absolute path such
    # /dbdata 是容器内的路径  
    
    2:使用--volumes-from 来挂载dbdata容器中的数据卷
    [root@docker /]# docker run -it --volumes-from dbdata --name db1 ubuntu:18.04
    root@47a22834f404:/# ls
    bin  boot  dbdata  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    root@47a22834f404:/# cd /dbdata/
    root@47a22834f404:/dbdata# ls
    [root@docker /]# docker run -it --volumes-from dbdata --name db2 ubuntu:18.04
    
    # 容器db1和容器db2都挂载到同一个数据卷到相同的/dbdata目录,三个容器共享这个目录。
    
    
    
    [root@docker /]# docker start 47a22834f404    #启动一个退出的容器
    [root@docker /]# docker exec  -it 47a22834f404 /bin/bash      #进入一个已经运行的容器。
    

    三:利用容器来迁移数据

    1:备份:使用下面的命令来备份dbdata数据卷容器-内的-数据卷
    [root@docker /]# docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu:18.04 tar -cvf /backup/backup.tar /dbdata
    tar: Removing leading `/' from member names
    /dbdata/
    /dbdata/zz
    
    #创建一个容器,挂载,tar包到新创建的容器内,实现迁移
    #1:利用ubuntu镜像创建了一个容器worker。使用--volumes-from dbdata参数来让worker容器挂载dbdata容器的数据卷(即dbdata数据卷)
    #2:使用-v $(pwd):/backup参数来挂载本地的当前目录 到worker容器的/backup目录
    #3:worker容器启动后,使用tar cvf /backup/backup.tar /dbdata命令将/dbdata下内容备份为容器内的/backup/backup.tar
    
    2:恢复:如果要恢复数据到一个容器,可以按照下面的操作
    #首先创建一个带有数据卷的容器dbdata2
    [root@docker /]# docker run -v /dbdata --name dbdata2 ubuntu:18.04 /bin/bash
    [root@docker /]# ls -l backup.tar    #本地当前目录的文件backup.tar 
    -rw-r--r-- 1 root root 10240 Nov 16 14:35 backup.tar  
    
    [root@docker /]#  docker run -itd --volumes-from dbdata2 -v  $(pwd):/backup  busybox  tar xvf    /backup/backup.tar
    Unable to find image 'busybox:latest' locally
    latest: Pulling from library/busybox
    Digest: sha256:1303dbf110c57f3edf68d9f5a16c082ec06c4cf7604831669faf2c712260b5a0
    Status: Downloaded newer image for busybox:latest
    dbdata/
    dbdata/zz
    
    
    #使用-v $(pwd):/backup参数来挂载本地的当前目录 到busybox容器的/backup目录
    
    # 查看/验证恢复的数据,可以再启动一个容器挂载同样的容器卷来查看
    
    [root@docker /]# docker run --volumes-from dbdata2 busybox /bin/ls /dbdata
    zz
    
    
     docker run --volumes-from dbdata2 -v  $(pwd):/backup  busybox  tar xvf    /backup/backup.tar
    
    
  • 相关阅读:
    SSRS 实用技巧 ---- 为表格添加展开/折叠操作(明细报表)
    Log4J & elk 事故总结
    Java基础-反射
    Fork/Join 框架-设计与实现(翻译自论文《A Java Fork/Join Framework》原作者 Doug Lea)
    Java 泛型中的PECS原则
    Java并发编程-Executor框架集
    mongodb oplog与数据同步
    Java并发编程-移相器
    Java并发编程-信号量
    Java并发编程-闭锁
  • 原文地址:https://www.cnblogs.com/zhoujun007/p/11873383.html
Copyright © 2020-2023  润新知