• 【云原生&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🔔🔔🔔

    在这里插入图片描述

  • 相关阅读:
    MySQL数据库之索引
    『MySQL快速上手』-⑥-表的约束
    咖啡技术培训:6款创意咖啡拿铁教程
    搭建django后端api,前后端分离,可跨域,带管理员后台和商品模型(耗时10分钟)
    粒子滤波 particle filter —从贝叶斯滤波到粒子滤波——Part-I(贝叶斯滤波)
    【虚幻引擎UE】UE5 实现相机录制视频并导出(C++调用外部exe)
    设计模式-备忘录模式(Memento Pattern)
    STM32F103学习笔记(8)——读取芯片UID和MAC地址
    成绩定级脚本(Python)
    JS之闭包
  • 原文地址:https://blog.csdn.net/Gaowumao/article/details/125950848