zoukankan      html  css  js  c++  java
  • docker容器数据卷(相当于持久化)

    Docker简介

    #是什么:
        类似redis的RDB和AOF,(更通俗的说相当于移动硬盘)
    
    #能干什么
        1、容器的持久化
        2、容器间继承+持久化
    
    #怎么用
        1、直接命令添加(-v)
        #docker run -v 宿主机目录:容器目录 镜像名     (docker run -it 镜像名, 对比这个记忆)
               例: docker run -it -v /myVolume:/containVolume centos  
       
           1.1给容器设置只读权限(主机可以修改,容器只读)
              docker  run  -v  宿主机目录:容器目录:ro  镜像名      read-only
              docker run -it -v /myVolume:/containVolume:ro centos  
    
        2、DockerFile添加    

    二、使用

    1、命令添加

    [root@linuxxx ~]# docker run -it -v /myVolume:/containVolume centos
    
    #可以自动新建目录
    #执行完这句话后,已经产生了绑定关系,
     可以使用docker inspect ID查看   Volumes或hostconfig
    
    
    分别在容器和host端进入相应的文件
    [root@linuxxx /]# cd myVolume/        #原生Linux端,主机
    [root@linuxxx myVolume]# cat b.txt 
    a123qwer
    
    [root@f3c17a0046ed /]# cd containVolume/       #容器端
    [root@f3c17a0046ed containVolume]# vi b.txt       
    
    #结论:无论是主机还是容器创建文件也好,修改文件也好,都能共享资源
    
    --------------------------------------
    
    #当容器退出后,重新连接之前的这段时间,主机的修改,是否对容器有效
    [root@c23bbbea6835 /]# exit
    exit
    
    #来到主机,
    [root@linuxxx myVolume]# touch c.txt
    [root@linuxxx myVolume]# vi c.txt       #添加123
    
    
    #来到容器,并重新登陆
    [root@linuxxx ~]# docker ps -l        #拿到ID,
    
    [root@linuxxx ~]# 
    [root@linuxxx ~]# docker start f3c17a0046ed     #运行容器
    f3c17a0046ed
    [root@linuxxx ~]# docker attach f3c17a0046ed     #进入容器
    [root@f3c17a0046ed /]# 
    [root@f3c17a0046ed /]# cd containVolume/         #进入绑定的文件
    [root@f3c17a0046ed containVolume]# 
    [root@f3c17a0046ed containVolume]# ll
    total 8
    -rw-r--r--. 1 root root 9 Aug  6 11:40 b.txt
    -rw-r--r--. 1 root root 4 Aug  6 11:50 c.txt
    [root@f3c17a0046ed containVolume]# cat c.txt         
    123
    
    结论:容器推出后,仍然与主机资源共享
    View Code

     

    2、DockerFile添加

    #上面的命令添加模式,只支持宿主机与容器数据的共享
    
    #由于宿主机目录依赖特定的宿主机,不能保证所有的宿主机都存在特定的目录
    
    用法:
        1、根目录下创建mydocker文件夹并进入
        2、可在Dockerfile中使用  VOLUME 指令来给镜像添加一个或多个数据卷
        3、build后生成镜像,
        4、run 容器
        
    [root@linuxxx ~]# mkdir /mydocker        #创建文件夹
    [root@linuxxx ~]# cd /mydocker/          #进入文件夹
    [root@linuxxx mydocker]# vi Dockerfile         #编写
    
    ---------------------------------------------------
    #valume test                            #编写内容
    FROM centos
    VOLUME ["/datavolume1","/datavolume2","/datavolume3",]
    CMD echo "finished,--------sucess1"
    CMD /bin/bash
    -------------------------------------------------------
    #绑定
     [root@linuxxx mydocker]# docker build -f /mydocker/Dockerfile -t  pdun/centos .
    
    [root@linuxxx mydocker]# docker images     
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    pdun/centos         latest              751b5f9475e5        3 minutes ago       202MB
    
    [root@linuxxx mydocker]# docker run -it pdun/centos
    
    #可以查看是否成功创建这两个容器
    [root@3c1a4034ed22 /]# ll
    drwxr-xr-x.   2 root root     6 Aug  6 14:02 datavolume1
    drwxr-xr-x.   2 root root     6 Aug  6 14:02 datavolume2
    
    #进入容器,创建文件
    [root@3c1a4034ed22 /]# cd /datavolume1
    [root@3c1a4034ed22 datavolume1]# pwd
    /datavolume1
    [root@3c1a4034ed22 datavolume1]# touch contioner01.txt
    
    ------------------------------------------------------------------------
    我们没有创建主机,主机从何而来
    让我们打开一个新的终端
    [root@linuxxx ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    3c1a4034ed22        pdun/centos         "/bin/sh -c /bin/bash"   8 minutes ago       Up 8 minutes                            angry_aryabhata
    c44b284600fd        redis               "docker-entrypoint.s…"   5 hours ago         Up 5 hours          6379/tcp            vibrant_spence
    [root@linuxxx ~]# 
    [root@linuxxx ~]# docker inspect 3c1a4034ed22 
    View Code

    三、数据卷容器

    #命名的容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据的共享,挂载数据卷的容器,称之为数据卷容器
    
    通俗的讲,移动硬盘去拷贝主机上的数据,其他硬盘可以拷贝这个移动硬盘的东西
    [root@linuxxx ~]# docker run -it --name c1 pdun/centos    #创建父容器
    [root@b71c77033a4a /]# ll
    total 12
    -rw-r--r--.   1 root root 12082 Mar  5 17:36 anaconda-post.log
    lrwxrwxrwx.   1 root root     7 Mar  5 17:34 bin -> usr/bin
    drwxr-xr-x.   2 root root     6 Aug  6 14:34 datavolume1
    drwxr-xr-x.   2 root root     6 Aug  6 14:34 datavolume2
    
    
    [root@b71c77033a4a /]# cd datavolume2
    [root@b71c77033a4a datavolume2]# 
     
    [root@b71c77033a4a datavolume2]# touch c1.txt
    [root@b71c77033a4a datavolume2]# [root@linuxxx ~]# 
    [root@linuxxx ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    b71c77033a4a        pdun/centos         "/bin/sh -c /bin/bash"   2 minutes ago       Up 2 minutes                            c1
    
    
    ----------------------------------------
    让c2继承c1
    [root@linuxxx ~]# docker run -it --name c2 --volumes-from c1 pdun/centos
    [root@827f2adf5e40 /]# cd datavolume2
    [root@827f2adf5e40 datavolume2]# pwd
    [root@827f2adf5e40 datavolume2]# ll               #发现有c1设置的文件
    total 0
    -rw-r--r--. 1 root root 0 Aug  6 14:36 c1.txt
    [root@827f2adf5e40 datavolume2]# 
    
    [root@827f2adf5e40 datavolume2]# [root@linuxxx ~]#        #CTRL+P+Q
    [root@linuxxx ~]# 
    
    [root@linuxxx ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    827f2adf5e40        pdun/centos         "/bin/sh -c /bin/bash"   3 minutes ago       Up 3 minutes                            c2
    b71c77033a4a        pdun/centos         "/bin/sh -c /bin/bash"   8 minutes ago       Up 7 minutes                            c1
    
    ----------------------------------------
    
    #c3同理
    [root@linuxxx ~]# docker run -it --name c3 --volumes-from c1 pdun/centos
    [root@021b3cc21d04 /]# cd datavolume2
    [root@021b3cc21d04 datavolume2]# 
    [root@021b3cc21d04 datavolume2]# ll
    total 0
    -rw-r--r--. 1 root root 0 Aug  6 14:36 c1.txt
    -rw-r--r--. 1 root root 0 Aug  6 14:41 c2.txt
    [root@021b3cc21d04 datavolume2]# touch c3.txt
    ------------------------------------------------------
    
    #子容器创建的东西,父容器,兄容器共享
    [root@linuxxx ~]# docker attach c1
    [root@b71c77033a4a datavolume2]# ll
    total 0
    -rw-r--r--. 1 root root 0 Aug  6 14:36 c1.txt
    -rw-r--r--. 1 root root 0 Aug  6 14:41 c2.txt
    -rw-r--r--. 1 root root 0 Aug  6 14:45 c3.txt
    
    
    -------------------------------
    #删除父容器,子容器间仍然可以资源共享
    
    [root@linuxxx ~]# docker attach c2
    [root@827f2adf5e40 datavolume2]# 
    [root@827f2adf5e40 datavolume2]# ll
    total 0
    -rw-r--r--. 1 root root 0 Aug  6 14:36 c1.txt
    -rw-r--r--. 1 root root 0 Aug  6 14:41 c2.txt
    -rw-r--r--. 1 root root 0 Aug  6 14:45 c3.txt
    [root@827f2adf5e40 datavolume2]# 
    [root@827f2adf5e40 datavolume2]# touch c2_update.txt
    [root@827f2adf5e40 datavolume2]# 
    [root@827f2adf5e40 datavolume2]# read escape sequence
    [root@linuxxx ~]# 
    [root@linuxxx ~]# docker attach c3
    [root@021b3cc21d04 datavolume2]# 
    [root@021b3cc21d04 datavolume2]# ll 
    total 0
    -rw-r--r--. 1 root root 0 Aug  6 14:36 c1.txt
    -rw-r--r--. 1 root root 0 Aug  6 14:41 c2.txt
    -rw-r--r--. 1 root root 0 Aug  6 14:51 c2_update.txt
    -rw-r--r--. 1 root root 0 Aug  6 14:45 c3.txt
    [root@021b3cc21d04 datavolume2]# 
    View Code
  • 相关阅读:
    二人pk答题小程序
    题解【CF911F】Tree Destruction
    题解【洛谷P5765】[CQOI2005]珠宝
    WC2021 游记
    生产环境财务BUG的排查与总结
    生产环境一个订单状态错误的排查与反思
    《HeadFirstServletAndJsp》笔记一
    Java泛型简介二
    Java泛型简介一
    在Windows环境下与Linux环境下快速计算文件Hash
  • 原文地址:https://www.cnblogs.com/pdun/p/11312243.html
Copyright © 2011-2022 走看看