• Docker容器数据卷


    1.容器数据卷是什么

    实现容器数据持久化的一种方式。

    2.容器数据卷的特点

    ①可以在容器之间、容器与宿主机之间共享或重用数据

    ②数据卷中的更改可以直接生效

    ③数据卷的更改不会包含在镜像的更新中

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

    3.自动共享

    我们可以使用docker cp命令在主机和容器间相互拷贝数据,相对比较麻烦,当设置好容器数据卷后,不管是主机还是容器,当数据卷目录下有变动时,其他有映射关系的目录会自动同步。

    4.添加方式

    4.1 命令添加

    # docker run -it -v 宿主机绝对路径:容器内目录  镜像名

    # docker run -itd -v /root/pmVolume:/containerVolume ubuntu /bin/bash
    执行完该命令后,会自动在宿主机/root目录下生成pmVolume目录,在生成的容器中生成/containerVolume目录
    并且在这两个目录下有任何变化时,另一方目录会自动变化。(容器停止时也会同步)

    查看底层信息

    # docker inspect 80dd327ca6f4
    "Mounts": [
                {
                    "Type": "bind",
                    "Source": "/root/pmVolume",
                    "Destination": "/containerVolume",
                    "Mode": "",
                    "RW": true,
                    "Propagation": "rprivate"
                }
            ]

       创建只读容器数据卷(容器中只读)

    # docker run -itd -v /root/pmVolume:/containerVolume:ro ubuntu /bin/bash

    4.2 Dockerfile添加

     因为上面使用-v是宿主机到容器的数据卷绑定,这个对宿主机有依赖,不适合容器的移植与分享,所以dockerfile方式适用于容器之间的数据卷。

    mydockerfile内容:

    FROM ubuntu
    VOLUME ["/volume1","/volume2"]
    CMD echo "Data Volume created successfully!"
    CMD /bin/bash

    通过dockerfile构建镜像

    # docker build -f mydockerfile -t pm/ubuntu ./
    Sending build context to Docker daemon  2.048kB
    Step 1/4 : FROM ubuntu
     ---> f643c72bc252
    Step 2/4 : VOLUME ["/volume1","/volume2"]
     ---> Running in 4f677de96b04
    Removing intermediate container 4f677de96b04
     ---> 9fc884b7767a
    Step 3/4 : CMD echo "Data Volume created successfully!"
     ---> Running in 1dd72128a5da
    Removing intermediate container 1dd72128a5da
     ---> e278ba450d4e
    Step 4/4 : CMD /bin/bash
     ---> Running in d4c7640a26eb
    Removing intermediate container d4c7640a26eb
     ---> c92c94406166
    Successfully built c92c94406166
    Successfully tagged pm/ubuntu:latest

    使用上面镜像创建的容器中会自动生成目录/volume1和/volume2,通过docker inspect可以查看对应的宿主机的目录,如/var/lib/docker/volumes/30f3aaaf92a50f6a240efc6d204d6d33bca1cf6503c28d59f2bbb84d50062e48/_data

     5.数据卷容器

    从一个带有数据卷的容器,生成一个新的容器,新生成的容器也会创建数据卷目录,并跟其他容器同步。

    # docker run -it --volumes-from c3ff969b7c07 ubuntu /bin/bash

    注:当有多个容器都是通过这个方法创建的时候,只要还有一个容器存在,这个数据卷都是存在的。

  • 相关阅读:
    OracleConnection is obsolete
    ORA-12899: value too large for column (actual: 27, maximum: 20)
    快速删除有外键关联的数据库的数据
    Could not load type 'System.Reflection.AssemblySignatureKeyAttribute' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c
    RegSvr32注册OCX时报错
    EF:Oracle.DataAccess.Client.OracleException: ORA-12154: TNS:could not resolve the connect identifier specified
    EF:The provider did not return a ProviderManifest instance
    EF:split your EDMX file into multiple diagrams
    读《这就是搜索引擎:核心技术详解》有感总结
    c++ 类成员变量初始化总结
  • 原文地址:https://www.cnblogs.com/1016391912pm/p/14601850.html
Copyright © 2020-2023  润新知