精华内容
下载资源
问答
  • 主要介绍了 Docker 数据卷,数据卷容器详细介绍的相关资料,这里对Docker 数据卷数据卷容器的感念及相关操作进行了介绍,需要的朋友可以参考下
  • 如何在容器内创建数据卷,并且把本地的目录或文件挂载到容器内的数据卷中。 2.数据卷容器(Data Volume Containers):使用特定容器维护数据卷。如何使用数据卷容器在容器和主机、容器和容器之间共享数据,并实现...
  • Docker:数据卷&数据卷容器

    千次阅读 2019-05-27 21:37:56
    1,数据卷数据卷就是在宿主中可以在容器之间进行共享和重用的一系列和文件和文件夹,通过docker run -v命令可以将数据卷挂载到对应的容器目录空间,进行文件读取,容器卷特性如下 *数据卷可以在容器之间共享和...

    一,概念解析

        1,数据卷:数据卷就是在宿主中可以在容器之间进行共享和重用的一系列和文件和文件夹,通过docker run -v命令可以将数据卷挂载到对应的容器目录空间,进行文件读取,容器卷特性如下

            * 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效方便

            * 对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作

            * 对数据卷的更新不会影响镜像,解耦了应用和数据

            * 卷会一直存在,直到没有容器使用,可以安全地卸载它

        2,数据卷容器:接数据卷,已经存在一个挂载了数据卷的容器;由于数据卷在容器之前是可以共享的,所以此时如果存在其他容器通过docker run --volumes-from [容器别名]命令挂载到该容器上,则该容器可以被称之为数据卷容器,其主要功能是提供数据卷供其他容器挂载。当数据卷容器宕机后,并不会造成数据卷的回收卸载,数据卷会继续挂载在其他容器中。当全部挂载该数据卷的容器全部宕机后,该数据卷才会卸载

    二,数据卷

        1,创建需要挂载的文件和文件夹

        2,创建容器,启动镜像

    docker run -itd -p 8080:8080 \
    # 挂载index.html文件到/docs/index.html并覆盖,
    > -v /usr/develop/index.html:/usr/local/tomcat/webapps/docs/index.html \
    # 挂载self文件夹到webapps文件夹下
    > -v /usr/develop/self:/usr/local/tomcat/webapps/docs/ \
    --name tomcat_1 tomcat

        3,进入容器,查看文件内容,文件内容已经被全部更改

        4,页面访问

        5,实时性验证,此时往宿主机的self文件下添加forth.html文件

        6,查看docker容器数据是否已经同步

        7,页面访问

    三,数据卷容器

        1,数据卷操作完成后,docker容器中存在一个已经启动的tomcat镜像。并命名为tomcat_1

        2,现在,以该容器为数据卷容器,重新启动tomcat镜像,以该容器为数据卷进行挂载

    docker run -itd -p 9090:8080 --volumes-from tomcat_1 --name tomcat_2 tomcat

        3,进入该容器文件路径查看对应文件及文件内容

        4,从上一步可以看到文件已经同步,现在进行数据访问

        5,数据卷容器宕机演示

            * 数据卷容器宕机

            * 进入挂载容器查看数据

            * 并且界面运行正常

    展开全文
  • Docker的数据卷数据卷容器

    万次阅读 2017-03-24 14:59:09
    容器中数据管理主要有两种方式:数据卷数据卷容器。 数据卷(Data Volumes) 容器内数据直接映射到本地宿主机。 数据卷容器(Data Volume Containers) 使用特定容器维护数据卷数据卷数据卷是一个特殊的目录,...

    在Docker的使用过程中往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,所以这就涉及到Docker容器的数据操作。
    容器中数据管理主要有两种方式:数据卷和数据卷容器。

    1. 数据卷(Data Volumes) 容器内数据直接映射到本地宿主机。
    2. 数据卷容器(Data Volume Containers) 使用特定容器维护数据卷。

    数据卷

    数据卷是一个特殊的目录,它将主机目录直接映射进容器。可供一个或多个容器使用。

    数据卷设计的目的就是为了 数据的持久化,它完全独立与容器的生命周期。因此,容器删除时,不会删除其挂载的数据卷,也不会存在类似的垃圾机制对容器存在的数据卷进行处理。

    数据卷的特性:

    • 数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中
    • 数据卷可以在容器之间共享和重用
    • 可以对数据卷里的内容直接修改,修改回马上生效,无论是容器内操作还是本地操作
    • 对数据卷的更新不会影响镜像的更新
    • 数据卷会一直存在,即使挂载数据卷的容器已经被删除

    在容器中创建一个数据卷
    使用的命令如:

    [root@localhost ~]# docker run -v /root/datavolume:/data -it hub.c.163.com/library/ubuntu /bin/bash

    其中-v,表示在容器中创建一个数据卷。
    /root/datavolume:/data,表示主机的目录/root/datavolume映射到容器中的/data目录。
    示例:

    [root@localhost ~]# docker run -v /root/datavolume:/data -it hub.c.163.com/library/ubuntu /bin/bash
    root@c863c5094922:/# ll
    total 24
    drwxr-xr-x.  22 root root 4096 Mar 24 02:30 ./
    drwxr-xr-x.  22 root root 4096 Mar 24 02:30 ../
    -rwxr-xr-x.   1 root root    0 Mar 24 02:30 .dockerenv*
    drwxr-xr-x.   2 root root 4096 Jan 19 16:33 bin/
    drwxr-xr-x.   2 root root    6 Apr 12  2016 boot/
    drwxr-xr-x.   2 root root   15 Mar 22 11:30 data/
    drwxr-xr-x.   5 root root  380 Mar 24 02:30 dev/
    drwxr-xr-x.  42 root root 4096 Mar 24 02:30 etc/
    drwxr-xr-x.   2 root root    6 Apr 12  2016 home/
    drwxr-xr-x.   8 root root   90 Sep 13  2015 lib/
    drwxr-xr-x.   2 root root   33 Jan 19 16:32 lib64/
    drwxr-xr-x.   2 root root    6 Jan 19 16:31 media/
    drwxr-xr-x.   2 root root    6 Jan 19 16:31 mnt/
    drwxr-xr-x.   2 root root    6 Jan 19 16:31 opt/
    dr-xr-xr-x. 223 root root    0 Mar 24 02:30 proc/
    drwx------.   2 root root   35 Jan 19 16:33 root/
    drwxr-xr-x.   6 root root   68 Mar 24 02:30 run/
    drwxr-xr-x.   2 root root 4096 Jan 20 21:43 sbin/
    drwxr-xr-x.   2 root root    6 Jan 19 16:31 srv/
    dr-xr-xr-x.  13 root root    0 Mar  3 18:56 sys/
    drwxrwxrwt.   2 root root    6 Jan 19 16:33 tmp/
    drwxr-xr-x.  10 root root   97 Jan 20 21:43 usr/
    drwxr-xr-x.  11 root root 4096 Jan 20 21:43 var
    root@c863c5094922:/# [root@localhost ~]# 
    [root@localhost ~]# ll
    总用量 4
    -rw-------. 1 root root 1209 34 02:52 anaconda-ks.cfg
    drwxr-xr-x. 3 root root   39 323 13:51 backup
    drwxr-xr-x. 2 root root   15 322 19:30 datavolume
    drwxr-xr-x. 4 root root   34 323 10:01 dockerfile
    [root@localhost ~]# pwd
    /root
    [root@localhost ~]# 

    下面使用touch命令创建一个文件vo_file1

    root@c863c5094922:/data# touch vo_file1
    root@c863c5094922:/data# ls -l
    -rw-r--r--. 1 root root  0 Mar 24 02:49 vo_file1
    root@c863c5094922:/data# 

    如果出现类似与权限的问题,如:
    touch: cannot touch xxxx': Permission denied
    可以使用
    su -c “setenforce 0”`
    下面在文件中写点内容,测试下,容器和主机是否同步。

    root@c863c5094922:/data# echo "this is a test datavolume" > vo_file1 
    root@c863c5094922:/data# cat vo_file1 
    this is a test datavolume
    root@c863c5094922:/data# [root@localhost datavolume]# 
    [root@localhost datavolume]# cat /root/datavolume/vo_file1 
    this is a test datavolume
    [root@localhost datavolume]# 

    可以看到容器中的vo_file1和宿主机中的vo_file1内容一样。
    使用docker inspect 容器id/容器名可以查看具体信息,其中mounts的具体信息如下:

    [root@localhost datavolume]# docker inspect c863c5094922
    "Mounts": [
                {
                    "Source": "/root/datavolume",
                    "Destination": "/data",
                    "Mode": "",
                    "RW": true,
                    "Propagation": "rprivate"
                }
            ],

    Docker挂载数据卷的默认权限是读写(rw),通过上面的 “RW”: true可以看到,我们也可以在创建的时候进行设置为只读,使用ro

    docker run -v /root/datavolume:/data:ro -it hub.c.163.com/library/ubuntu /bin/bash

    示例:

    root@localhost datavolume]# docker run -v /root/datavolume:/data:ro -it hub.c.163.com/library/ubuntu /bin/bash
    root@2a8706e63796:/# touch /data/vo_file2
    touch: cannot touch '/data/vo_file2': Read-only file system

    通过docker inspect可以查看容器的信息:

    "Mounts": [
                {
                    "Source": "/root/datavolume",
                    "Destination": "/data",
                    "Mode": "ro",
                    "RW": false,
                    "Propagation": "rprivate"
                }
            ],

    这里”RW”就为false.
    使用Dockerfile构建包含数据卷的镜像:
    我创建了一个Dockerfile,如下:

    [root@localhost vo_test]# cat Dockerfile 
    FROM hub.c.163.com/library/ubuntu
    VOLUME ["/datavolume1","/dockervolume2"]
    CMD /bin/bash
    [root@localhost vo_test]# pwd
    /root/dockerfile/vo_test
    [root@localhost vo_test]# 

    下面构建镜像:

    [root@localhost vo_test]# docker build -t df_vo .
    Sending build context to Docker daemon 2.048 kB
    Step 1 : FROM hub.c.163.com/library/ubuntu
     ---> f49eec89601e
    Step 2 : VOLUME /datavolume1 /dockervolume2
     ---> Running in 39ce6de3a943
     ---> 4921812de13d
    Removing intermediate container 39ce6de3a943
    Step 3 : CMD /bin/bash
     ---> Running in f9afdbaf2471
     ---> 2ee7e110e18d
    Removing intermediate container f9afdbaf2471
    Successfully built 2ee7e110e18d
    [root@localhost vo_test]# docker images
    REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
    df_vo                          latest              2ee7e110e18d        6 seconds ago       129.5 MB

    下面利用这个镜像创建容器votest1:

    [root@localhost vo_test]# docker run --name votest1 -it df_vo
    root@a98bbf9dbfae:/# ls
    bin  boot  datavolume1  dev  dockervolume2  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    root@a98bbf9dbfae:/# 

    可以看到这个容器中已经包含了datavolume1和datavolume2两个数据卷。
    再使用这个镜像运行一个容器votest2:

    [root@localhost _data]# docker run --name votest2 -it df_vo
    root@9501be4f50d4:/# 
    root@9501be4f50d4:/# ls
    bin  boot  datavolume1  dev  dockervolume2  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    root@9501be4f50d4:/# [root@localhost _data]#

    通过docker inspect 分别查看这两个容器的信息。可以发现两个容器内数据卷对应到主机的地址(docker自己创建的)并不一样
    如下:
    votest1的容器信息:

    [root@localhost vo_test]# docker inspect votest1
    "Mounts": [
                {
                    "Name": "4ae9914bc4bd127e669b89ee6b703a0c9cc91f18c8dfe5034dbb838de2ca8062",
                    "Source": "/var/lib/docker/volumes/4ae9914bc4bd127e669b89ee6b703a0c9cc91f18c8dfe5034dbb838de2ca8062/_data",
                    "Destination": "/datavolume1",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                },
                {
                    "Name": "753a10fd08491a41aa953427a4cf7b30276604175b8e237cfea2aed0ddbeaf48",
                    "Source": "/var/lib/docker/volumes/753a10fd08491a41aa953427a4cf7b30276604175b8e237cfea2aed0ddbeaf48/_data",
                    "Destination": "/dockervolume2",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                }
            ],

    votest2的容器信息:

    [root@localhost _data]# docker inspect votest2
    "Mounts": [
                {
                    "Name": "a455e9d38eb656375316c0a96ec0dd69d900f3477d39752a417dac725d8b6854",
                    "Source": "/var/lib/docker/volumes/a455e9d38eb656375316c0a96ec0dd69d900f3477d39752a417dac725d8b6854/_data",
                    "Destination": "/dockervolume2",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                },
                {
                    "Name": "449d3f7c271d0f6ab8f3cd7df0fc4f79510ebeeee888b65283db58c77031d66c",
                    "Source": "/var/lib/docker/volumes/449d3f7c271d0f6ab8f3cd7df0fc4f79510ebeeee888b65283db58c77031d66c/_data",
                    "Destination": "/datavolume1",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                }
            ],

    对应的主机数据卷位置:

     [root@localhost _data]# cd /var/lib/docker/volumes/
    [root@localhost volumes]# ll
    总用量 32
    drwxr-xr-x. 3 root root    18 37 11:48 122d96164df0f84b6132c67cb7db1368b67df81420b03c48ccd0bce682241e4b
    drwxr-xr-x. 3 root root    18 37 09:46 174a0ebf6f790834a04d7dda48b1e24702e9a98f805c0c6331aa49e294736143
    drwxr-xr-x. 3 root root    18 37 09:47 335c944921f8ec1f4d96fe8a0a15802f69f591549461710fea4bc9c92cd13018
    drwxr-xr-x. 3 root root    18 37 10:03 3893ab8ce0aca2128bd3847488f57431285a943ded814843f1aaf993e64b902e
    drwxr-xr-x. 3 root root    18 324 11:53 449d3f7c271d0f6ab8f3cd7df0fc4f79510ebeeee888b65283db58c77031d66c
    drwxr-xr-x. 3 root root    18 324 11:48 4ae9914bc4bd127e669b89ee6b703a0c9cc91f18c8dfe5034dbb838de2ca8062
    drwxr-xr-x. 3 root root    18 323 10:12 6cd6a34adf1fe157cf813a0016011966f97c866874ad10137728ebf824b76e01
    drwxr-xr-x. 3 root root    18 324 11:48 753a10fd08491a41aa953427a4cf7b30276604175b8e237cfea2aed0ddbeaf48
    drwxr-xr-x. 3 root root    18 322 20:02 7764cd58f82d0d782e97c9b719825c42dc34806ae995257f0082342396b4a630
    drwxr-xr-x. 3 root root    18 324 11:53 a455e9d38eb656375316c0a96ec0dd69d900f3477d39752a417dac725d8b6854
    drwxr-xr-x. 3 root root    18 37 10:07 a4af7ebbb3da863176fe4db6234d9e69b2e47ce628b0f3770854ed75c40e3604
    drwxr-xr-x. 3 root root    18 322 20:02 abecf3deb59ded6262a20ddc94f0e6505ea3dd1c717260594fa4a8b0260c136c
    drwxr-xr-x. 3 root root    18 36 15:27 db6529f59f1ceb789047f7c340951c48c463c840e74974d7cfd04d7fad2a3468
    drwxr-xr-x. 3 root root    18 37 09:58 e33c562f6e4beb2711ba50cb188ba51faf670b2aa56e571749fc96ce876c0d5c
    drwxr-xr-x. 3 root root    18 323 10:12 e82ea714065869185dad3e50703ed44f877794a0a201143679c4b40dc2af4a4d
    -rw-------. 1 root root 65536 324 11:53 metadata.db
    [root@localhost volumes]# 

    数据卷容器
    用户需要在多个容器之间共享一些数据,就可以使用数据卷容器。

    命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器,就叫数据卷容器。

    1.先创建一个容器
    2.然后挂载。
    挂载数据卷容器的方法:

    docker run --volumes-from 容器名

    示例:

    首先创建一个容器votest3:

    [root@localhost volumes]# docker run --name votest3 -it df_vo
    root@c31f85a96a68:/# ls
    bin  boot  datavolume1  dev  dockervolume2  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    root@c31f85a96a68:/#

    可以看到里面有数据卷datavolume1和dockervolume2,然后在datavolume1中创建一个文件vo_file:

    root@c31f85a96a68:/# touch datavolume1/vo_file
    root@c31f85a96a68:/# ls datavolume1/
    vo_file

    然后再创建一个容器votest4挂载votest3,可以看到里面也包含同样的数据卷,然后在datavolume1中创建文件vo_file1:

    [root@localhost volumes]# docker run -it --name votest4 --volumes-from votest3 hub.c.163.com/library/ubuntu /bin/bash
    root@917fc6a610df:/# ls
    bin  boot  datavolume1  dev  dockervolume2  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    root@917fc6a610df:/# ls datavolume1/
    vo_file
    root@917fc6a610df:/# touch datavolume1/vo_file1 
    root@917fc6a610df:/# ls datavolume1/       
    vo_file  vo_file1

    同样我们再创建一个容器votest5,然后在datavolume中创建文件vo_file2

    [root@localhost volumes]# docker run -it --name votest5 --volumes-from votest3 hub.c.163.com/library/ubuntu /bin/bash
    root@61eb42648402:/# ls
    bin  boot  datavolume1  dev  dockervolume2  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    root@61eb42648402:/# ls datavolume1/
    vo_file  vo_file1
    root@61eb42648402:/# touch datavolume1/vo_file2 
    root@61eb42648402:/# ls datavolume1/
    vo_file  vo_file1  vo_file2
    root@61eb42648402:/#

    我们连接分别连接vo_test3和vo_test4查看里面的文件:

    [root@localhost volumes]# docker attach votest3
    root@c31f85a96a68:/# 
    root@c31f85a96a68:/# ls datavolume1/
    vo_file  vo_file1  vo_file2
    root@c31f85a96a68:/# 
    [root@localhost volumes]# docker attach votest4
    root@917fc6a610df:/# 
    root@917fc6a610df:/# ls datavolume1/
    vo_file  vo_file1  vo_file2
    root@917fc6a610df:/# 

    可以看到数据进行了同步。
    如果我们删除votest3,可以发现数据卷并没有被删除。

    [root@localhost volumes]# docker rm votest3
    votest3
    [root@localhost volumes]# docker attach votest4
    root@917fc6a610df:/# 
    root@917fc6a610df:/# ls datavolume1/
    vo_file  vo_file1  vo_file2
    root@917fc6a610df:/# 

    数据卷的备份和还原
    数据卷备份使用的命令:

    docker run --volumes-from 存在的容器名 -v $(pwd):/backup --name 新建的容器名 镜像名 tar cvf /backup/backup.tar 数据卷

    $(pwd)当前路径

    示例(使用之前创建的votest5):

    [root@localhost volumes]# docker run --volumes-from votest5 -v /root/backup:/backup hub.c.163.com/library/ubuntu tar cvf /backup/vof.tar /datavolume1
    tar: Removing leading `/' from member names
    /datavolume1/
    /datavolume1/vo_file
    /datavolume1/vo_file1
    /datavolume1/vo_file2
    [root@localhost volumes]# ls /root/backup/
    vof.tar
    [root@localhost volumes]# 

    可以看到已经备份到/root/backup/下。

    数据卷的还原:

    使用命令类似:

    docker run --volumes-from 存在的容器名 -v $(pwd):/backup --name 新建的容器名 镜像名 tar xvf /backup/backup.tar

    示例:
    创建一个容器votest8还原数据卷

    [root@localhost backup]# docker run --volumes-from votest5 -v /root/backup:/backup --name votest8 hub.c.163.com/library/ubuntu tar xvf /backup/vof.tar
    datavolume1/
    datavolume1/vo_file
    datavolume1/vo_file1
    datavolume1/vo_file2

    然后创建一个容器挂载votest8

    [root@localhost backup]# docker run -it --volumes-from votest8 hub.c.163.com/library/ubuntu /bin/bash
    root@ee4d4f932ce4:/# 
    root@ee4d4f932ce4:/# ls
    backup  bin  boot  datavolume1  dev  dockervolume2  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    root@ee4d4f932ce4:/# cd backup/ 
    root@ee4d4f932ce4:/backup# ll
    -rw-r--r--.  1 root root 10240 Mar 24 06:44 vof.tar
    root@ee4d4f932ce4:/backup# 

    以上就是数据卷和数据卷容器的相关操作。

    展开全文
  • docker_4 数据卷技术

    万次阅读 2021-01-08 14:43:14
    数据卷技术4.1 使用 -v 命令挂载目录:4.2 实战:MySQL同步数据4.3 具名和匿名挂载匿名具名拓展 4. 数据卷技术 Docker04_使用数据卷技术实现容器内外和容器间的数据共享 4.1 使用 -v 命令挂载目录: [root@izbp10...

    https://gitee.com/fakerlove/docker

    4. 数据卷技术

    Docker04_使用数据卷技术实现容器内外和容器间的数据共享

    4.1 使用 -v 命令挂载目录:

    [root@izbp10tup89om84qulgxbsz home]# docker run -it -v /home/ceshi:/home centos /bin/bash
    

    此时,容器内的 /home 目录就与主机的 /home/ceshi 目录实现了双向绑定。
    即使容器被关闭或删除了,数据依然可以保留。

    使用 docker inspect 容器id 命令可以查看到详细的目录挂载信息:

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

    4.2 实战:MySQL同步数据

    #搜索镜像
    [root@izbp10tup89om84qulgxbsz ceshi]# docker search mysql
    
    #下载镜像
    [root@izbp10tup89om84qulgxbsz ceshi]# docker pull mysql:5.7
    
    # 查看是否下载成功
    [root@izbp10tup89om84qulgxbsz ceshi]# docker images
    
    # 启动 mysql 镜像
    -d 表示后台运行
    -p 表示端口映射
    -v 数据卷挂载
    -e 环境配置
    --name 容器名
    [root@izbp10tup89om84qulgxbsz ceshi]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
    

    Navicat 测试连接:
    在这里插入图片描述
    使用 Navicat 创建一个 test-blu 数据库:
    在这里插入图片描述
    进入主机的 /home/mysql/data 目录查看文件,发现多了一个名为 test@002dblu 的目录:

    [root@izbp10tup89om84qulgxbsz data]# ls
    auto.cnf         client-key.pem  ib_logfile1         private_key.pem  sys
    ca-key.pem       ib_buffer_pool  ibtmp1              public_key.pem   test@002dblu
    ca.pem           ibdata1         mysql               server-cert.pem
    client-cert.pem  ib_logfile0     performance_schema  server-key.pem
    12345
    # 删除 mysql01 容器
    [root@izbp10tup89om84qulgxbsz data]# docker rm -f mysql01
    
    # 查看是否删除成功
    [root@izbp10tup89om84qulgxbsz data]# docker ps -a
    
    # 查看主机的 /home/mysql/data 目录,发现文件仍然存在
    [root@izbp10tup89om84qulgxbsz data]# ls
    auto.cnf         client-key.pem  ib_logfile1         private_key.pem  sys
    ca-key.pem       ib_buffer_pool  ibtmp1              public_key.pem   test@002dblu
    ca.pem           ibdata1         mysql               server-cert.pem
    client-cert.pem  ib_logfile0     performance_schema  server-key.pem
    

    具名挂载 和 匿名挂载

    指定路径挂载		-v 主机目录:容器目录
    具名挂载			-v 卷名:容器目录
    匿名挂载			-v 容器目录
    

    匿名挂载 nginx 示例(不推荐):

    # 匿名挂载启动 nginx
    -P 表示随机端口映射
    [root@izbp10tup89om84qulgxbsz home]# docker run -d -P --name nginx01 -v /etc/nginx nginx
    
    # 查看所有的 volume
    [root@izbp10tup89om84qulgxbsz home]# docker volume ls
    DRIVER              VOLUME NAME
    local               f05023335d743c9fc194ada48cabd0f58b8981416017dcc83db0ad3ef0e2225b
    local               fe42203caa62c5e66586f9476b32c7ff58f733b050bfb054c475906c106e4b65
    
    # 查看指定的 volume 信息
    [root@izbp10tup89om84qulgxbsz home]# docker volume inspect f05023335d743c9fc194ada48cabd0f58b8981416017dcc83db0ad3ef0e2225b
    [
        {
            "CreatedAt": "2020-11-11T21:36:18+08:00",
            "Driver": "local",
            "Labels": null,
            "Mountpoint": "/var/lib/docker/volumes/f05023335d743c9fc194ada48cabd0f58b8981416017dcc83db0ad3ef0e2225b/_data",
            "Name": "f05023335d743c9fc194ada48cabd0f58b8981416017dcc83db0ad3ef0e2225b",
            "Options": null,
            "Scope": "local"
        }
    ]
    [root@izbp10tup89om84qulgxbsz home]# docker volume inspect fe42203caa62c5e66586f9476b32c7ff58f733b050bfb054c475906c106e4b65
    [
        {
            "CreatedAt": "2020-11-18T18:27:24+08:00",
            "Driver": "local",
            "Labels": null,
            "Mountpoint": "/var/lib/docker/volumes/fe42203caa62c5e66586f9476b32c7ff58f733b050bfb054c475906c106e4b65/_data",
            "Name": "fe42203caa62c5e66586f9476b32c7ff58f733b050bfb054c475906c106e4b65",
            "Options": null,
            "Scope": "local"
        }
    ]
    

    结论:所有 docker 容器内的卷,在没有指定主机目录的情况下,默认挂载的地址都是:
    "/var/lib/docker/volumes/【volumn-name】/_data"
    问题是匿名挂载的 volumn 的 名字都是一长串的随机字符,我们无法判断哪一个才是 nginx 容器挂载的地址,使用具名挂载可以解决这个问题。

    具名挂载 nginx 示例(推荐):

    # 具名挂载启动 nginx
    [root@izbp10tup89om84qulgxbsz home]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
    
    # 查看所有的 volume
    [root@izbp10tup89om84qulgxbsz _data]# docker volume ls
    DRIVER              VOLUME NAME
    local               f05023335d743c9fc194ada48cabd0f58b8981416017dcc83db0ad3ef0e2225b
    local               fe42203caa62c5e66586f9476b32c7ff58f733b050bfb054c475906c106e4b65
    local               juming-nginx
    
    # 查看指定的 volume 信息
    [root@izbp10tup89om84qulgxbsz _data]# docker volume inspect juming-nginx
    [
        {
            "CreatedAt": "2020-11-18T18:46:47+08:00",
            "Driver": "local",
            "Labels": null,
            "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
            "Name": "juming-nginx",
            "Options": null,
            "Scope": "local"
        }
    ]
    
    # 进入挂载目录查看文件,找到了 nginx 的配置文件!
    [root@izbp10tup89om84qulgxbsz _data]# cd /var/lib/docker/volumes/juming-nginx/_data
    
    [root@izbp10tup89om84qulgxbsz _data]# ll
    total 40
    drwxr-xr-x 2 root root 4096 Nov 18 18:46 conf.d
    -rw-r--r-- 1 root root 1007 Oct 27 23:09 fastcgi_params
    -rw-r--r-- 1 root root 2837 Oct 27 23:09 koi-utf
    -rw-r--r-- 1 root root 2223 Oct 27 23:09 koi-win
    -rw-r--r-- 1 root root 5231 Oct 27 23:09 mime.types
    lrwxrwxrwx 1 root root   22 Oct 27 23:25 modules -> /usr/lib/nginx/modules
    -rw-r--r-- 1 root root  643 Oct 27 23:25 nginx.conf
    -rw-r--r-- 1 root root  636 Oct 27 23:09 scgi_params
    -rw-r--r-- 1 root root  664 Oct 27 23:09 uwsgi_params
    -rw-r--r-- 1 root root 3610 Oct 27 23:09 win-utf
    

    拓展:

    默认rw挂载的目录可读可写,可以在容器内部对挂载的目录内的文件进行读写:
    docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx:rw
    
    设置读写权限为ro(readOnly)的挂载目录,不可以在容器内对该目录内的文件进行写操作:
    docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx:ro
    

    4.3 具名和匿名挂载

    匿名

    docker run -d -P --name naginx-1 -v /ect/nagix nginx 
    

    不写路径,然后docker 自动生成路径进行挂载

    具名

    docker run -d -P --name nagix02 -v nagix_1:/ect/nagix nagix
    

    写路径的,但是路径并不是绝对路径,而是卷名

    查看卷名

    docker volume inspect
    

    拓展

    docker run -d -P --name nagix02 -v nagix_1:/ect/nagix:ro nagix
    

    ro readonly 只读,只能进行宿主机来改变

    docker run -d -P --name nagix02 -v nagix_1:/ect/nagix:rw nagix
    

    rw readwrite 可读可写

    展开全文
  • 详解Docker 数据卷管理

    2021-01-09 23:43:59
    Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)。数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。 数据卷呈现给Docker容器的形式就是一个...
  • Docker镜像原理、数据卷数据卷容器介绍。


    一、Docker镜像介绍

    Docker镜像是什么?

    Docker镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

    UnionFS是Docker镜像的基础

    UnionFS(联合文件系统)是一种分层、轻量级、高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。UnionFS是 Docker 镜像的基础,镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

    UnionFS特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

    Docker镜像加载原理
    Docker的镜像由一层一层的文件系统组成,这种层级的文件系统称为UnionFS。在这里插入图片描述

    bootfs(boot file system)主要包含bootloader和kernel,bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

    rootfs (root file system) 在bootfs之上。包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件。rootfs其实就是各种不同的操作系统发行版,如Ubuntu,Centos等。

    对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用宿主机的kernel,自己只需要提供 rootfs 就行了。可见对于不同的linux发行版,,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以公用bootfs。

    Docker镜像的特点

    • Docker镜像都是只读的。
    • 当容器启动时,一个新的可写层被加载到镜像的顶部,这一层通常被称作容器层,容器层之下的都叫镜像层

    镜像分层的好处:共享资源
    有多个镜像都从相同的 base 镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像,同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了,并且镜像的每一层都可以被共享。

    二、镜像的commit操作补充

    将一个修改过的tomcat容器,提交为镜像:
    docker commit -a="Hudie" -m="tomcat9" 0e31ad696cc6 gql/tomcat9:1.2:提交容器副本使之成为一个新的镜像

    • -a:“作者信息”
    • -m:“提交的描述信息”
    • 0e31ad696cc6 gql/tomcat9:1.2:容器ID 新的镜像名:标签名

    三、Docker数据卷

    数据卷的理念:持久化+数据共享

    Docker的理念是:将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器。

    Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。

    所以我们希望:数据可以持久化、容器之间(甚至容器与宿主机之间)可以数据共享。为了能保存数据可以在docker中使用卷。卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。

    卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:

    • 数据卷可在容器之间共享或重用数据
    • 卷中的更改可以直接生效
    • 数据卷中的更改不会包含在镜像的更新中
    • 数据卷的生命周期一直持续到没有容器使用它为止

    之前学过docker cp的命令,单向来完成将容器上的资源复制到主机上,数据卷则可以将容器和主机上的资源互相转存。

    • docker cp 容器名:容器内资源路径 目的主机路径:从容器内的资源拷贝到主机上

    方式1:直接添加数据卷

    docker run -it -v /myDataVolume:/dataVolumeContainer[:ro] centos:添加数据卷建立连接

    • -v:代表数据卷
    • /myDataVolume:宿主机绝对路径目录
    • :/dataVolumeContainer:容器内目录
    • centos:镜像名
    • :ro:设置权限为只读

    docker inspect 容器id:查看容器数据卷是否挂载成

    在这里插入图片描述

    可以进行数据共享
    在这里插入图片描述

    注意:
    (1)容器停止退出后,主机对共享数据修改后数据仍然同步。

    (2)Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied
    解决办法:在挂载目录后多加一个--privileged=true参数即可

    方式2:使用DockerFile添加数据卷

    在这里插入图片描述
    在宿主机根目录下新建mydocker文件夹后,添加Dockerfile文件

    # dockerfile文件
    # 使用VOLUME指令来给镜像添加一个或多个数据卷
    FROM centos
    VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
    CMD echo "finished,--------success1"
    CMD /bin/bash
    

    docker buile -f /mydocker/Dockerfile -t gql/centos .:build后生成新的镜像

    此时如果再开启新镜像的容器,会发现其中多了两个容器数据卷,而与之对应的宿主机数据卷,可以通过docker inspect 容器id命令查看。
    在这里插入图片描述

    四、Docker数据卷容器

    上面讲到的数据卷主要是在宿主机与容器之间建立连接,数据卷容器则是在容器与容器之间建立连接。数据卷容器:指挂载了数据卷的容器,其它容器通过挂载这个(父容器)实现数据共享。

    docker run -it --name 新容器名 --volumes-from 父容器名 zzyy/centos:容器A挂载父容器B,以实现AB容器间的数据共享。

    结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。

    展开全文
  • Docker容器数据卷数据卷容器

    千次阅读 2018-08-14 20:42:36
    容器中数据管理主要有两种方式:数据卷数据卷容器。 数据卷(Data Volumes) 容器内数据直接映射到本地宿主机。 数据卷容器(Data Volume Containers) 使用特定容器维护数据卷数据卷 数据卷是一个特殊的...
  • 数据卷volumes

    千次阅读 2018-02-25 07:21:13
    本节目录:(1)数据卷• 创建一个数据卷• 挂载一个主机目录作为数据卷• 挂载一个主机目录作为数据卷(2)数据卷容器(3)利用数据卷容器来备份、恢复、迁移数据卷• 备份• 恢复1、数据卷数据卷是一个可供一...
  • Docker内部数据管理和Docker之间的数据共享为数据卷数据卷容器,实例解析1.将本地的文件作为容器的数据卷,2.数据卷flocker插件实现容器集群(或者Docker Swarm)的数据共享3.数据卷容器作为其他容器的数据卷.降低磁盘...
  • Docker数据卷

    千次阅读 2020-03-27 22:35:20
    文章目录1、Docker宿主机和容器之间文件拷贝2、数据卷3、数据卷容器 1、Docker宿主机和容器之间文件拷贝 前言: Docker 数据管理 在生产环境中使用 Docker ,往往需要对数据进行持久化,或者需要在多个容器之间进行 ...
  • 数据卷是一个可以绕过联合文件系统的,专门指定的可在一或多个容器间共享目录。卷为提供为持久化或共享数据提供了一些有用的特性。 数据卷设计的初哀是提供持久化数据,而与容器的生命周期无关。因此,在删除容器时...
  • 关于docker数据卷以及数据卷容器创建,请参考上一编博文。删除容器内挂载的数据卷数据卷的内容依然存在,实例如下:查看容器node1的相关Volumes目录位置以及ID信息root@zxl-node4:~#dockerinspectnode1 [{ ...
  • Docker 容器数据卷

    万次阅读 2020-02-12 17:47:35
    容器数据卷是什么 先来看看Docker的理念: 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的 容器之间希望有可能共享数据 Docker容器产生的数据,如果不通过...
  • Docker里的数据卷数据卷容器恰好满足了这个需求。 数据卷 数据卷(Data Volumes)是一个可供容器使用的特殊目录,它提供了很多有用的特性: 对数据卷的修改会立马生效 数据卷会一直存在,直到没有容器使用 ...
  • 1、什么是容器的数据卷? 容器的数据卷是指在运行一个容器的时候会产生一些数据,这些数据是独立于容器的生命周期,在停止或者删除容器的时候,它们并不会被回收,数据卷的设计就是为了数据的持久化,并且实现容器...
  • Docker 数据卷之数据持久化与备份-Volume Container(一)简介一、数据卷容器1. 数据卷容器在容器与数据卷之间的关系,如下所示2. 创建数据卷容器3. 连接数据卷容器二、数据卷容器备份(数据卷的迁移)1. 数据卷的...
  • Docker容器数据卷

    千次阅读 2019-09-11 20:58:52
    生产环境中使用Docker的过程中,往往需要对数据进行持久化,...如何在容器内创建数据卷,并且把本地的目录或文件挂载到容器内的数据卷中。 数据卷容器(Data Volume Containers):使用特定容器维护数据卷。如何使用...
  • docker容器数据卷

    千次阅读 2019-07-22 10:10:39
    为了能保存数据在docker中我们使用数据卷。 特点 数据卷可在容器之间共享或重用数据 卷中的更改可以直接生效 数据卷中的更改不会包含在镜像更新中 4.数据卷的生命周期一直持续到没有容器使用它为止。 容器内添加 ...
  • 数据卷数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:数据卷可以在容器之间共享和重用对数据卷的修改会立马生效对数据卷的更新,不会影响镜像数据卷默认会一直存在,即使容器...
  • 一、Docker容器数据卷是什么? 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的,容器之间希望有可能共享数据 Docker容器产生的数据,如果不通过docker commit...
  • docker 数据卷与挂载目录

    千次阅读 2018-09-29 21:09:24
    一:数据卷 数据卷用来保存对容器的修改/数据,可供容器之间共享和重用,数据卷独立于容器,不会随着容器删除而删除 创建数据卷 docker volume create my-vol 数据卷列表 docker volume ls 查看数据卷具体...
  • Docker数据卷详解

    万次阅读 2016-11-14 19:53:10
    1. 绕过“拷贝写”系统,以达到本地磁盘IO的性能,(比如运行一个容器,在容器中对数据卷修改内容,会直接改变宿主机上的数据卷中的内容,所以是本地磁盘IO的性能,而不是先在容器中写一份,最后还要将容器中的修
  • docker 创建数据卷容器

    千次阅读 2020-09-24 11:11:44
    数据卷容器 --volumes-from 容器名/id docker run -it --name docker01 centos # 同步 docker01 的数据卷 # --volumes-from docker01 docker run -it --name docker02 --volumes-from docker01 jiawei-centos:1.0...
  • Docker 数据卷的使用

    千次阅读 2020-09-19 21:11:02
    Docker 数据卷的使用 什么是docker 数据卷技术?本质就是一个目录的挂载,将容器内的目录挂在到Linux上的目录,是一种数据共享技术。 容器卷技术的目的是为了将容器内的数据同步到Linux主机上,并进行持久化,以...
  • docker-数据卷Volume

    万次阅读 2020-10-01 11:56:11
    docker 容器管理-数据卷Volume 1.基础数据持久化。 1.简单实现将首页显示更改成自己指定内容 1.启动一个nginx容器 docker container run -d --name="nginx_1" -p 80:80 nginx:1.18 2.登录到启动的nginx容器 docker ...
  • Docker之快速搞定容器数据卷

    千次阅读 2019-12-26 12:20:04
      前面我们介绍了镜像和容器,通过镜像我们可以启动多个容器,但是我们发现当我们的容器停止获取删除后,我们在容器中的应用的一些数据也丢失了,这时为了解决容器的数据持久化,我们需要通过容器数据卷来解决这个...
  • Docker容器数据卷详解(共享数据)

    万次阅读 2018-12-12 17:51:36
    docker容器数据卷是什么? 当我们在使用docker容器的时候,会产生一系列的数据文件,这些数据文件在我们关闭docker容器时是会消失的,但是其中产生的部分内容我们是希望能够把它给保存起来另作用途的,Docker将应用...
  • docker win10 数据卷(Data Volumes)挂载

    千次阅读 2020-08-29 01:02:46
    数据卷(Data Volumes)是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于Linux中的mount行为。 优点 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效与方便; 对数据卷内数据...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 275,618
精华内容 110,247
关键字:

数据卷