美文网首页
4. docker存储卷

4. docker存储卷

作者: epiiplus1equal0 | 来源:发表于2019-09-25 22:54 被阅读0次

    docker存储卷

    本文基于马哥的docker和k8s视频总结, 在此致谢马哥.

    • 分层构建, 联合挂载
    why data volume.png data valume.png data volume1.png volume type.png
    • 绑定挂载卷: 容器上的目录和宿主机目录都需自行指定
    • 由docker管理的卷: 容器上的目录自行指定, 宿主机目录由docker管理, 自动创建和关联

    在容器中使用存储卷

    • 实现容器和宿主机共享一份数据文件
    在容器中使用存储卷.png
    docker run --help
      -v, --volume list  Bind mount a volume
    

    由docker管理的卷

    # docker管理的卷, -v选项指定容器里面的目录
    docker container run --name bbox1 -it --rm -v /data/ busybox
    / # ls / # 可以查看到/data目录
    / # ls /data # 此时/data目录中无数据
    
    docker inspect bbox1 | grep -A 10 Mounts
            "Mounts": [
                {
                    "Type": "volume",
                    "Name": "32f93d0afb5af3fff2a841a32cbbc8677256bff022ad0d278c081d85ef87cd53",
                    "Source": "/var/lib/docker/volumes/32f93d0afb5af3fff2a841a32cbbc8677256bff022ad0d278c081d85ef87cd53/_data", # 可以查看到容器上的/data目录对应宿主机上"Source"值对应的目录
                    "Destination": "/data", 
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                }
    
    # 在容器上的/data目录创建文件, 宿主机上映射的目录内可以查看到对应内容
    # 同样的在宿主机上映射的目录创建的目录, 同理可在容器的/data目录内看到对应内容
    

    绑定挂载卷

    # 绑定挂载卷
    docker container run --name bbox2 -it -v HOSTDIR:VOLUMEDIR busybox
      HOSTDIR # 宿主机上的目录
      VOLUMEDIR # 容器里的目录
    
    docker container run --name bbox2 -it --rm -v /data/volume/bbox2:/data busybox
    # 在宿主机上 ls -R /data 可以看见指定目录被自动依次创建
    echo test >> /data/volume/bbox2/test.txt
    

    特别注意: 容器被删除后所使用的数据(包括目录和文件)依旧被保留 <==> 持久存储 !

    这就意味着下次再次启动容器时只要命令指定的内容一致, 而且 -v 选项指定的目录也一直, 则新建的容器可以使用原来的数据和文件

    使用模板过滤信息

    # 根用"."表示
    docker inspect bbox2 -f {{.Mounts}}
    [{bind  /data/volume/bbox2 /data   true rprivate}]
    
    docker inspect bbox2 -f {{.NetworkSettings.IPAddress}}
    172.17.0.2
    

    如何让一个容器复制另外一个容器的存储卷

    共享存储卷.png
    docker run --help
      --volumes-from list  Mount volumes from the specified container(s)
    # 可以自己新建一个专门用于做基础支撑的容器, 然后让其他容器都以这个容器为模板进行创建
    # 这个用于做基础支撑的容器不要去删除!
    
    # 先创建一个基础支撑容器, 此容器可以关闭
    docker container create --name infracon -it \ 
                            -v /data/infracon/volume/:/data/web/html \
                            busybox
    
    # 然后依次以基础支撑容器为模板创建你需要创建的容器
    # 注意创建的容器内的程序可能会有依赖关系, 因此要注意创建的先后顺序!
    docker container run --name mariadb1 -it --volumes-from infracon --network container:infracon mariadb
    docker container run --name tomcat1 -it --volumes-from infracon --network container:infracon tomcat
    docker container run --name nginx1 -it --volumes-from infracon --network container:infracon nginx
    
    • 以基础支撑容器为模板创建的容器在用命令docker inspect container_name查看信息时看不到IP地址的信息, 因为它是Join进来的, 但是在容器内会有显示, 说明你创建的新容器没有问题

    docker-compose

    docker的容器编排工具, 实现单机编排容器与制作镜像

    相关文章

      网友评论

          本文标题:4. docker存储卷

          本文链接:https://www.haomeiwen.com/subject/xkwgectx.html