docker volume

docekr data volumes
    docekr镜像由多个只读层叠加而成,启动容器时,docker会加载只读镜像层,并在镜像栈顶部添加一个读写层,如果一个运行中的容器修改了现有的一个已经存在,
的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏,此即写时复制(COW)机制,写时复制机制就是当子进程需要对文件进行写操作的时候才会为其分配独立内存空间,否则与其他子进程共享内存空间。

docekr容器存在的问题
    关闭并重启容器,其数据不受影响,但删除容器会导致数据全部丢失
    存储于联合文件系统中,不易于宿主机访问
    容器间数据共享不方便
    解决方案:存储卷(volume)
        卷是容器上的一个或多个“目录”,此类目录可绕过联合文件系统,与宿主机上的某目录"绑定(关联)"

volumes的管理机制
    volumes于容器初始化之时就会创建,由base image 提供的卷中的数据会于此期间完成复制,volume的初衷是独立于容器的生命周期实现数据持久化,因此删除容器之
    时既不会删除卷,也不会对哪怕未被引用的卷做垃圾回收操作
        卷为docker容器提供了独立于容器的数据管理机制
            可以把镜像想象成静态文件,例如程序,把卷类比为动态内容,例如数据,于是,镜像可以重用,而卷可以共享,卷实现了程序(镜像)和数据(卷)分离,以及"程序(镜像)"和"制作镜像的主机"分离,而用户制作镜像时无需在考虑镜像运行的容器所在的主机的环境
            
docker run 命令使用-v选项即可使用volume
    docker run -it -name bbox1 -v /data busybox        运行一个名为bbox1的busybox容器,并指定卷为/data
    docekr inspect -f {{.Mounts}} bbox1 查看bbox1容器的卷,卷标识符及挂载的主机目录
    docker run -it -v HOSTDIR:VOLUMEDDIR --name bbox2 busybox 通过变量的方式
    docekr inspect -f {{.Mounts}} bbox2 同上
    多个容器的卷使用同一个主机目录
    docker run -it --name c1 -v /data/v1:/data busybox
    docekr run -it --name c2 -v /data/v1:/data busybox
    复制使用其他容器的卷,为docekr run 命令使用--volumes-from选项
    docekr run -it --name bbox1 -v /data/v1:/data busybox
    docekr run -it --name bbox2 --volumes-from bbox1 busybox

你可能感兴趣的:(docker,容器,运维)