zoukankan      html  css  js  c++  java
  • docker volume

    docker data volume

    • Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层
    • 如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏,此即“写时复制(COW)”机制。

    卷是持久化由Docker容器生成和使用的数据的首先机制。虽然绑定挂载依赖于主机的目录结构,但卷由Docker完全管理。与绑定安装相比,卷有几个优点:

    • 与绑定挂载相比,卷更容易备份或迁移
    • 您可以使用Docker CLI命令或Docker API管理卷
    • 卷在Linux和Windows容器上均可用
    • 卷可以在多个容器之间更安全地共享
    • 卷驱动程序允许您远程主机或云提供程序上存储卷,加密卷的内容或添加其它功能
    • 新卷的内容可以由容器预先填充

    另外,与使容器的可写入层中的数据持久化相比,卷通常是更好的选择,因为使用卷不会增加容器的大小,并且容器的内容存在于给定容器的生命周期之外。

    Docker有两种类型的卷,每种类型都在窗口中存在一个挂载点,但其在宿主机上的位置有所不同;

    • Bind mount volume(宿主机上的目录结构,类似mount --bind 命令)
    • Docker-managed volume (docker自己管理的目录)
    Docker-managed volume
    ~]# docker run -it --name b1 -v /data docker.io/busybox:latest
    查看容器b1的卷、卷标识符及挂载的主机目录
    ~]# docker inspect -f {{.Config.Volumes}}{{.Mounts}} b1
    
    Bind-mount Volume
    ~]# docker run -it -v HOSTDIR:VOLUMEDIR --name b2 docker.io/busybox:latest
    ~]# docker inspect -f {{.Mounts}} b2
    
    多个容器的卷使用同一个主机目录,例如
    ~]# docker run -it --name b1 -v /hostname/html/:/app/www/ docker.io/busybox:latest
    ~]# docker run -it --name b2 -v /hostname/html/:/app/www/ docker.io/busybox:latest
    
    
    复制使用其它容器的卷,为docker run命令使用--volumes-from(复制另一个容器的卷定义)选项
    ~]# docker run -it --name b1 -v /hostname/html/:/app/www/ docker.io/busybox:latest
    ~]# docker run -it --name b2 --volumes-from b1 docker.io/busybox:latest
    
    宿主机 容器 关联后
    /hostname/html/{a,b,c}有a,b,c三个文件 为空 容器内生成目录和文件。并且不管怎样都是mount

    volume相关命令:

    [root@centos7 ~]# ls /var/lib/docker/volumes/
    metadata.db
    
    启动容器并挂载卷,创建文件并退出
    [root@centos7 ~]# docker run --name b1 -it -v /app/html/ docker.io/busybox
    / # cd /app/html/
    /app/html # ls
    /app/html # echo "Hello World!" > index.html
    /app/html # ls
    index.html
    /app/html # exit
    [root@centos7 ~]# ls /var/lib/docker/volumes/
    765b79f6088d9b3c8ea46cc556794b1b2a204bdad821f02a1833a8e5c383c827  metadata.db
    [root@centos7 ~]# docker ps 
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    
    查看b1这个容器的二级Mounts的详细信息。{{两个花括号表示二级选项
    [root@centos7 ~]# docker inspect -f {{.Mounts}} b1
    [{volume **765b79f6088d9b3c8ea46cc556794b1b2a204bdad821f02a1833a8e5c383c827** /var/lib/docker/volumes/765b79f6088d9b3c8ea46cc556794b1b2a204bdad821f02a1833a8e5c383c827/_data /app/html local  true }]
    第一个参数:volume卷
    第二个参数:卷名,哈希生成 
    第三个参数:挂载至宿主机的目录
    第四个参数:本地卷
    第五个参数:我也不清楚,就当成可以正常使用的吧!
    
    
    查看永久存储,哈希生成的目录名
    [root@centos7 ~]# cat /var/lib/docker/volumes/765b79f6088d9b3c8ea46cc556794b1b2a204bdad821f02a1833a8e5c383c827/_data/index.html 
    Hello World!
    
    
    [root@centos7 ~]# docker rm b1
    b1
    
    显示有哪些卷
    [root@centos7 ~]# docker volume ls 
    DRIVER              VOLUME NAME
    local               765b79f6088d9b3c8ea46cc556794b1b2a204bdad821f02a1833a8e5c383c827
    
    删除卷
    [root@centos7 ~]# docker volume rm 765b79f6088d9b3c8ea46cc556794b1b2a204bdad821f02a1833a8e5c383c827
    765b79f6088d9b3c8ea46cc556794b1b2a204bdad821f02a1833a8e5c383c827
    [root@centos7 ~]# ls /var/lib/docker/volumes/
    metadata.db
    
    
  • 相关阅读:
    Android的NDK开发(5)————Android JNI层实现文件的read、write与seek操作
    android Context
    android 控件放在 listview 的下方 并且在 屏幕底部
    android Activity 布局 和 控件属性
    有关vtun和虚拟网卡要做的实验
    android xml pull 解析 豆瓣书籍
    android UI设计之 背景透明色 项目资源文件关系
    android 资源引用 自定义标题栏
    真机调试Unable to open sync connection!
    C++ 编译预处理
  • 原文地址:https://www.cnblogs.com/dance-walter/p/8591709.html
Copyright © 2011-2022 走看看