zoukankan      html  css  js  c++  java
  • docker学习:5.容器数据卷管理

    5.容器数据卷管理

    5.1 dockers数据层概念

    容器层:可读写,容器重启以后,容器中的数据依然会保存在容器层,容器层数据会随着容器删除的时候一起被删除
    镜像层:只读

    示例:

    [root@vms41 ~]# docker ps -a
    CONTAINER ID   IMAGE                                 COMMAND                  CREATED      STATUS         PORTS                                       NAMES
    011d27f5bea6   hub.c.163.com/library/mysql:latest    "docker-entrypoint.s…"   2 days ago   Up 2 minutes   0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   db
    181c0a6691bd   hub.c.163.com/library/tomcat:latest   "catalina.sh run"        2 days ago   Up 2 days      0.0.0.0:80->8080/tcp, :::80->8080/tcp       web
    [root@vms41 ~]# docker exec -it web bash #进入容器web中创建文件aaa.txt
    root@181c0a6691bd:/usr/local/tomcat# touch aaa.txt
    [root@vms41 ~]# find / -name "aaa.txt" ##在操作系统中查找aaa.txt发现存在
    /var/lib/docker/overlay2/d00a05b0c73ca04d94b1b898860aebb456e08ac20fe451124cb2d2929a1121ea/diff/usr/local/tomcat/aaa.txt
    /var/lib/docker/overlay2/d00a05b0c73ca04d94b1b898860aebb456e08ac20fe451124cb2d2929a1121ea/merged/usr/local/tomcat/aaa.txt
    [root@vms41 ~]# docker restart web ##重启容器web后,aaa.txt依然存在
    web
    [root@vms41 ~]# find / -name "aaa.txt"
    /var/lib/docker/overlay2/d00a05b0c73ca04d94b1b898860aebb456e08ac20fe451124cb2d2929a1121ea/diff/usr/local/tomcat/aaa.txt
    /var/lib/docker/overlay2/d00a05b0c73ca04d94b1b898860aebb456e08ac20fe451124cb2d2929a1121ea/merged/usr/local/tomcat/aaa.txt
    [root@vms41 ~]# docker rm -f web ##删除容器后发现aaa.txt已经不存在了
    web
    [root@vms41 ~]# find / -name "aaa.txt"
    
    

    5.2 数据卷

    创建数据卷相当于将物理机中的目录挂载至容器中的目录,所以在容器目录中写入数据相当于在物理机目录中写入数据,当删除容器后数据卷中数据依然存在,数据不再是临时的,而是永久存在

    创建数据卷命令:

    可以通过dockers run的-v参数来指定数据卷

    docker run -dit --name=web -p 80:80 --restart=always -v /xx:/data nginx:latest

    -v 冒号之前的第一个参数是本地数据卷,冒号后的参数是虚机数据卷,如果-v后面只有一个参数则是虚机数据卷。

    docker run -dit --name=web -p 80:80 --restart=always -v /xx:/data:rw nginx:latest

    -v 后面可以有第三个选项,影响容器对数据卷的读写操作,分别为rw--可读写(默认,不添加第三个参数时即为rw),ro--只读

    示例:

    [root@vms41 _data]# docker run -dit --name=web -p 80:80 --restart=always -v /xx:/data nginx:latest #创建容器web,容器目录为/data映射至物理机/xx目录
    WARNING: IPv4 forwarding is disabled. Networking will not work.
    4ed9eb530d4ffc025d8933191b8229b67091c59f53a1287a1d36897fa1663597
    [root@vms41 _data]# ll /xx ##物理机/xx无数据
    总用量 0
    [root@vms41 _data]# docker exec -it web bash 
    [root@4ed9eb530d4f:/# touch /data/aaa.txt ##在容器/data目录创建aaa.txt文件
    [root@vms41 ~]# ll /xx ##在物理机/xx目录查看文件,aaa.txt存在
    总用量 0
    -rw-r--r-- 1 root root 0 5月   7 23:11 aaa.txt
    [root@vms41 ~]# docker rm -f web
    web
    [root@vms41 ~]# ll /xx
    总用量 0
    -rw-r--r-- 1 root root 0 5月   7 23:11 aaa.txt
    [root@vms41 _data]# docker run -dit --name=web -p 80:80 --restart=always -v /xx:/data1 nginx:latest ##重新创建web容器,将物理机/xx挂载在容器/data1目录
    WARNING: IPv4 forwarding is disabled. Networking will not work.
    b0f75d5d639431361206c8024cb1881e3ded2d18e840734f8412e8297563316c
    [root@vms41 _data]# 
    [root@vms41 _data]# 
    [root@vms41 _data]# docker exec -it web bash
    [root@b0f75d5d6394:/# ls /data1 ##查看data1发现aaa.txt文件依然存在
    aaa.txt
    
    

    注意:使用容器数据卷时,需要熟悉容器中应用的默认使用数据卷,将物理机数据卷挂载至应用使用的数据卷,应用的有效数据才能够正确的保存下来

    如:mysql的数据默认是在/var/lib/mysql,则需要将物理机数据卷挂载至/var/lib/mysql

    docker run -dit --name=web -p 3037:3036 --restart=always -v /data:/var/lib/mysql hub.c.163.com/library/mysql:latest #将物理机/data数据卷挂载在/var/lib/mysql目录下

  • 相关阅读:
    [HDU1087]Super Jumping! Jumping! Jumping!<dp>
    [codeforces]Page Numbers <模拟>
    [POJ1190]生日蛋糕<DFS>
    [HDU1029]Ignatius and the Princess IV<桶 水题>
    矩阵优化
    康复式训练
    bzoj1036 [ZJOI2008]树的统计Count
    luogu3761 [TJOI2017]城市
    bzoj2282 [SDOI2011]消防
    NOI2014
  • 原文地址:https://www.cnblogs.com/yj411511/p/14748989.html
Copyright © 2011-2022 走看看