• 【云原生&Docker基础篇第4篇】实战探究Docker数据卷的奥秘


    🏡  博客首页:派 大 星

    ⛳️  欢迎关注  ❤️ 点赞  🎒 收藏  ✏️ 留言

    🎢  本文由派大星原创编撰

    🚧  系列专栏:Docker—云原生

    🎈  本系列记录容器化技术的初次探险与深入思考历程,如有描述有误的地方还望诸佬不吝赐教


    在这里插入图片描述


    前言:什么是数据卷

    数据卷是一个可供一个或者多个容器使用的特殊目录,它绕过UFS可以提供很多有用的特性:

    • 数据卷可以在容器之间共享和重用
    • 对数据卷的修改会立马生效
    • 对数据卷的更新不会影响镜像
    • 卷会一直存在直到没有容器使用

    小试牛刀之创建数据卷

    使用docker volume create [数据卷名称]命令来创建一个数据卷

    [root@VM-4-14-centos /]# docker volume create my-vol
    my-vol
    
    • 1
    • 2

    在这里插入图片描述

    查看数据卷

    创建完成之后就需要查看创建的数据卷是否存在

    [root@VM-4-14-centos /]# docker volume ls
    DRIVER    VOLUME NAME
    local     my-vol
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    除此之外也可以通过命令来查看数据卷的详细信息

     docker volume inspect [数据卷名称]
    
    • 1

    在这里插入图片描述

    启动挂载数据卷的容器

    ① 挂载普通目录作为数据卷

    首先在使用docker run启动挂载数据卷的容器之前,需要了解一些命令基础:

    • -v:标记来创建一个数据卷并挂载到容器里
    • --mount :标记来将 数据卷 挂载到容器里

    由上述两条命令的作用是一样的,都是将数据卷挂载到容器里,但是在书写时的格式却差别略大,而且在使用docker run启动中一次可以挂载多个数据卷

    -v

    docker run -d -P --name web -v /webapp training/webapp python app.py
    
    • 1

    在这里插入图片描述

    --mount

    $ docker run -d -P \
        --name web \
        --mount source=my-vol,target=/usr/share/nginx/html \
        nginx:alpine
    
    • 1
    • 2
    • 3
    • 4

    使用--mount需要指定source也就是数据卷的名称和挂载到的目标位置

    ②挂载主机目录作为数据卷

    依然是使用-v指定一个本地主机目录到容器中

    docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
    
    • 1

    在这里插入图片描述
    上述的命令加载主机的/src/webapp目录到容器的/opt/webapp目录下,这个功能在进行测试的时候十分方便,比如用户放置一些程序到本地目录,来查看容器是否正常工作。

    注📢: 本地目录的路径必须是绝对路径,如果目录不存在Docker会自动为你创建,并且Docker挂载数据卷的默认权限是读写,用户也可以通过:ro指定为只读

    docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py
    
    • 1

    在这里插入图片描述

    ③挂载本地主机文件作为数据卷

    同样使用-v命令从主机挂载单个文件到容器中

    docker run --rm -it -v ~/.bash_history:/bash_history ubuntu /bin/bash
    
    • 1

    在这里插入图片描述

    数据卷容器

    如果有一些持续更新的数据需要在容器之间共享,最好创建数据卷容器

    数据卷容器其实就是一个正常的容器,专门用来提供数据卷供其他容器挂载

    首先创建一个命名的数据卷容器 pdx

    docker run -d -v /pdx --name pdx training/postgres echo Data-only container for postgres
    
    • 1

    在这里插入图片描述

    还可以在其他容器中使用--volumes-from参数来从多个容器挂载多个数据卷,也可以从其他已经挂载的数据卷的容器来挂数据卷

    docker run -d volumes-from pdx --name p1 training/postgres
    docker run -d volumes-from pdx --name p2 training/postgres
    
    • 1
    • 2

    注意📢: 使用--volumes-from参数所挂载数据卷的容器自己并不需要保持在运行状态

    如果删除了挂载的容器(包括pdx、p1和p2),数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时使用docker rm -v命令来指定同时删除关联的容器。

    🔔🔔🔔 E n d i n g 🔔🔔🔔 🔔 🔔 🔔 Ending 🔔 🔔 🔔 🔔🔔🔔Ending🔔🔔🔔

    在这里插入图片描述

  • 相关阅读:
    LongVLM:让大模型解读长视频 SOTA 的方法
    SPARK中的wholeStageCodegen全代码生成--以aggregate代码生成为例说起(6)
    R-CNN(Regions with CNN features)
    云原生之容器化:2、Kubernetes基础组件和部署要点
    组合总和(Lc39)——排序+剪枝+回溯
    ortp 交叉编译
    如何像我这样创建一个酷炫且能赚钱的网站(使用宝塔安装WordPress搭建子比主题)
    去除PDF论文行号的完美解决方案
    计算机毕业设计ssm+vue+elementUI基于html的戒烟网站
    ElasticSearch+Kibana+Logstash实现日志可视化运维监控
  • 原文地址:https://blog.csdn.net/Gaowumao/article/details/125950848