zoukankan      html  css  js  c++  java
  • Docker:容器数据卷(命令方式、DockerFile方式)

    1、容器数据卷

    (1)概念

    主要作用是做持久化,如果不使用docker的commit生成新的镜像使得数据做为镜像的一部分保存下来,那么容器删除之后数据就会丢失(关闭Docker之后数据也会消失)

    (2)特点

    数据卷可在容器之间共享或重用数据
    卷中的更改可以直接生效(在服务器中修改,容器中的文件也会被修改)
    数据卷中的更改不会包含在镜像的更新中
    数据卷的生命周期一直持续到没有容器使用它为止

    2、容器数据卷的运用(命令方式)

    (1)绑定目录

     在运行这条命令的过程中在宿主机上创建了myDataVolume目录并在centos镜像的容器中生成了dataVolumeContainer目录

    -i 选项指示 docker 要在容器上打开一个标准的输入接口,-t 指示 docker 要创建一个伪 tty 终端,it 交互式tty是交互式,-d是后台运行

    (2)运行docker inspect命令

           "Mounts": [
                {
                    "Type": "bind",
                    "Source": "/myDataVolume",
                    "Destination": "/dataVolumeContainer",
                    "Mode": "",
                    "RW": true,
                    "Propagation": "rprivate"
                }
            ],

    (3)容器和宿主之间数据共享

    在宿主机中创建一个文件:

    [root@aubin /]# ls
    bin  boot  dev  etc  home  lib  lib64  media  mnt  myDataVolume  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    [root@aubin /]# cd myDataVolume
    [root@aubin myDataVolume]# touch host.txt
    [root@aubin myDataVolume]# ls
    host.txt

    在容器中查看相应的目录:在宿主机中存在文件该文件是可读可写的

    [root@a81d9e1a475d /]# ls 
    bin  dataVolumeContainer  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    [root@a81d9e1a475d /]# cd dataVolumeContainer
    [root@a81d9e1a475d dataVolumeContainer]# ls
    host.txt

    相反,如果在容器中创建文件,宿主机中也能看到该文件

    (4)容器停止退出,主机修改数据,绑定的容器目录中依旧进行数据的同步

    (5)权限

    [root@aubin /]# docker run -it -v /myDataVolume:/dataVolumeContainer:ro  centos

    添加了只读权限,例如:主机新建了文件后,容器内就只有读权限

    3、容器数据卷的运用(DockerFile方式)

    (1)什么是DockerFile

     DockerFile是对镜像的描述

    (2)新建一个目录,在目录中创建一个文件

    [root@aubin mydocker]# ls
    myfile.txt

    (3)File构建(在文件中书写配置)

    (4)build

    [root@aubin ~]# docker build -f /mydocker/myfile.txt -t zhai/centos .
    Sending build context to Docker daemon  13.87kB
    Step 1/4 : from centos
     ---> 0d120b6ccaa8
    Step 2/4 : VOLUME ["/dataVolumeContainer","/dataVolumeContainer2"]
     ---> Using cache
     ---> d75e63d723c5
    Step 3/4 : CMD echo "success"
     ---> Using cache
     ---> 4f2ed3ad8394
    Step 4/4 : CMD /bin/bash
     ---> Using cache
     ---> 8f28e3fd97da
    Successfully built 8f28e3fd97da
    Successfully tagged zhai/centos:latest

    指明文件路径以及命名空间,点代表的是当前的centos模板

    查看镜像:

    [root@aubin ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    zhai/centos         latest              8f28e3fd97da        7 minutes ago       215MB
    tomcat              latest              625b734f984e        7 hours ago         648MB
    redis               latest              bd571e6529f3        9 days ago          104MB
    mongo               latest              ba0c2ff8d362        3 weeks ago         492MB
    centos              latest              0d120b6ccaa8        2 months ago        215MB
    hello-world         latest              bf756fb1ae65        9 months ago        13.3kB
    tomcat              8.5.32              5808f01b11bf        2 years ago         463MB

    查看新生成的镜像的目录:

    [root@aubin /]# docker run -it zhai/centos
    [root@8f013888a738 /]# ls
    bin                  dataVolumeContainer2  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
    dataVolumeContainer  dev                   home  lib64  media       opt  root  sbin  sys  usr

    (5)数据共享

    在宿主机中没有指定目录,但是会有一个默认的目录,如:在容器中创建一个目录

    [root@8f013888a738 dataVolumeContainer2]# mkdir mydir
    [root@8f013888a738 dataVolumeContainer2]# ls
    mydir

    在宿主机上查看是否有与容器相同的目录:

    [root@aubin data]# cd /
    [root@aubin /]# cd var
    [root@aubin var]# cd lib
    [root@aubin lib]# ls
    alternatives  authconfig  containerd  dbus  dhclient  docker  games  initramfs  logrotate  machines  misc  NetworkManager  os-prober  plymouth  polkit-1  postfix  rpm  rpm-state  rsyslog  selinux  stateless  systemd  tuned  vmware  yum
    [root@aubin lib]# cd docker
    [root@aubin docker]# ls
    builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes
    [root@aubin docker]# cd volumes
    [root@aubin volumes]# ls
    546e5ee0423c12c98d41e5194221e12be66285e4a78b2d0f29af4f802b2ce395  8723facb75d49a8a20e0f70e3ecabd3b44709405d990fcff1ef130e19b82c389  metadata.db
    [root@aubin volumes]# cd 546e5ee0423c12c98d41e5194221e12be66285e4a78b2d0f29af4f802b2ce395
    [root@aubin 546e5ee0423c12c98d41e5194221e12be66285e4a78b2d0f29af4f802b2ce395]# ls
    _data
    [root@aubin 546e5ee0423c12c98d41e5194221e12be66285e4a78b2d0f29af4f802b2ce395]# cd _data
    [root@aubin _data]# ls
    mydir
    [root@aubin _data]# 

    4、容器间的数据共享

    (1)启动一号容器并在目录中创建一个文件

    [root@aubin /]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@aubin /]# docker run -it --name dc01 zhai/centos
    [root@64649475991d /]# ls
    bin                  dataVolumeContainer2  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
    dataVolumeContainer  dev                   home  lib64  media       opt  root  sbin  sys  usr
    [root@64649475991d /]# cd  dataVolumeContainer2
    [root@64649475991d dataVolumeContainer2]# ls
    [root@64649475991d dataVolumeContainer2]# touch dc01.txt
    [root@64649475991d dataVolumeContainer2]# ls
    dc01.txt

    (2)创建二号容器

    [root@aubin /]# docker run -it --name dc02 --volumes-from dc01 zhai/centos
    [root@a5ece78ac702 /]# ls
    bin                  dataVolumeContainer2  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
    dataVolumeContainer  dev                   home  lib64  media       opt  root  sbin  sys  usr
    [root@a5ece78ac702 /]# cd  dataVolumeContainer2
    [root@a5ece78ac702 dataVolumeContainer2]# ls
    dc01.txt

    一号容器创建的文件在二号容器中也存在,二号容器是继承自一号容器的。在二号容器中创建文件后一号容器中也会存在文件,实现了容器间的数据共享。即使将一号容器删除,一号容器创建的文件依旧会在二号容器中

    数据卷的生命周期一直持续到没有容器使用它为止

    每个人都会有一段异常艰难的时光 。 生活的压力 , 工作的失意 , 学业的压力。 爱的惶惶不可终日。 挺过来的 ,人生就会豁然开朗。 挺不过来的 ,时间也会教你 ,怎么与它们握手言和 ,所以不必害怕的。 ——杨绛
  • 相关阅读:
    2010年8月18日周三_Migrating from 1.3 to 2.0_5
    2010年8月12日_周四_UserControlTask control
    2010年8月18日周三_insideTheAPI_overView_6.1
    一个Flex事件的简单的例子
    2010年8月13日_周五_PrintTask control
    如何发布一个GeometryService服务
    lua分割字符串
    lua字符串合并
    lua 类型转换
    linux 下 svn 冲突解决办法
  • 原文地址:https://www.cnblogs.com/zhai1997/p/13865288.html
Copyright © 2011-2022 走看看