• Docker学习_存储篇


    当以默认的方式创建容器时,容器中的数据无法直接和其他容器或宿主机共享。为了解决这个问题需要学习一些Docker 存储卷的知识。

    Docker提供了三种存储的方式。

    • bind mount共享宿主机文件目录
    • volume共享docker存储卷
    • tmpfs mount共享内存

    volume*

    volume方式是容器间数据分享的推荐方式。它的运行和管理都是由docker负责。

    添加

    此处的添加可以分为两层意思,第一层如何添加一个volume,第二层如何向容器中添加一个volume。

    添加一个volume

    利用`docker volume create`指令创建一个volume,当不指定volume名称时,docker会以一个volume id位置volume的名称。

    如下:

    当指定volume名称时,docker将创建一个指定名称的volume。

    当volume名称相同时,docker不会创建一个新的,而是利用之前创建的volume。

    向容器中添加volume

    向容器中有两种选项可供选择一种是利用--mount选项,另一种是利用-v选项。

    --mount方式

    --mount选项支持详细的设定绑定方式,type设定绑定的类型,source设定卷名称,target设定绑定到容器的哪个目录下。

    -v方式

    -v选项支持简洁的设定绑定方式,利用:作为分隔,可以分成三个部分。第一个部分为volume的名称,当使用匿名volume时可以忽略。第二个部分为绑定到容器的哪个目录下。第三个部分为一些选项。

    查询

    查看有哪些volume

    利用`docker volume ls`指令可以查看系统中所有的volume情况。

    查看详细信息

    利用`docker volume inspect `指令可以查看某个volume的详细信息。

    删除volume

    删除volume的前提条件是没有容器正在使用(不管容器是否在运行)该volume,否则会报错无法删除volume。

    利用`docker volume rm `指令可以删除指定的volume名称。

    备份&还原

    备份

    就是将容器中volume绑定的目录进行tar打包。

    1. // 将容器中volume绑定的目录打包成压缩文件
    2. tar cfv backup.tar ./mysql
    3. // 将压缩文件转移到宿主机中
    4. docker cp :

    还原

    就是创建一个新的绑定匿名volume的容器,并将tar解压到指定的目录下即可

    1. // 创建一个绑定目录一致的匿名volume容器
    2. docker container create -e MYSQL_ROOT_PASSWORD=SECRET -v /app mysql:5.7
    3. // 将宿主机中backup.tar文件复制到容器的绑定目录下
    4. docker cp backup.tar :
    5. // 进入容器,并将backup.tar文件解压
    6. docker exec -it bash
    7. cd
    8. tar xvf backup.tar

    bind mount

    bind mount是宿主机和容器之间共享数据的方式。它的作用就是将宿主机中的特定目录或文件绑定到容器的特定目录中。

    添加

    • 此处向容器中添bind mount的方式和添加volume的方式非常相似,不同点在于绑定的不是volume名称而是一个宿主机中特定的目录。同样也存在--mount和-v两种方式,向容器中绑定共享的目录。
    1. ## 利用--mount方式进行添加
    2. docker container create
    3. -e MYSQL_ROOT_PASSWORD=SECRET
    4. --mount type=bind,source=,target=
    5. mysql:5.7
    6. ## 利用-v方式进行添加
    7. docker container create
    8. -e MYSQL_ROOT_PASSWORD=SECRET
    9. -v :
    10. mysql:5.7

    查询

    此处也是通过docker container inspect 指令查看某个容器下Mounts的信息来查看其共享数据的信息。

    Volume和bind mount比较

    不同点bind mountvolume
    volume位置可任意指定/var/lib/docker/volumes/下
    对已有mount point影响隐藏并替换为volume原有数据复制到volume
    是否支持单个文件支持不支持,只能是目录
    权限控制可设置为只读,默认为读写权限无控制,均为读写权限
    移植性移植性弱,与host path绑定移植性强,无须指定host目录

    tmpfs mount

    tmpfs表示将信息临时存储起来,并保存在宿主机的内存中。需要注意的两点:

    • 此处保存的数据无法持久化,只能是临时存储
    • 目前只支持宿主机是linux系统

    添加

    也是通过--mount的方式进行添加,不同点在于其类型为tmpfs,且没有source项

    1. docker container create
    2. --mount type=tmpfs,target=/app
    3. -e MYSQL_ROOT_PASSWORD=SECRET
    4. mysql:5.7

    容器间共享数据的方法

    bind mount方式

    就是将需要共享的数据存储在宿主机特定目录下,然后需要访问这部分数据的容器都通过bind mount绑定这个数据。

    volume container方式

    就是说创建一个专门为其他容器提供volume的容器,它可以是bind mount方式,也可以是volume方式。

    1. ## 创建一个volume container并绑定多个形式的共享数据
    2. docker container create
    3. -v ~/hostData:/hostData
    4. -v containerData:/containerData
    5. --name vc_data

    然后其他容器利用--volumes-from参数绑定到volume container上即可,这样所有这样创建的容器就都有了volume container一样的数据了。

    1. ## 创建与volume container共享数据的容器
    2. docker container create
    3. --volumes-from

  • 相关阅读:
    前端基础之JavaScript
    【RocketMQ】Broker服务注册
    诡异错误 Unresolved reference: styleable
    当有一天TCP/IP没有了TCP
    Nftea: 世界杯文化、 NFT与 期权的首度碰撞
    处理机调度
    git撤回多个push到远程仓库的commit
    用户终身价值利用xgboost进行LTV预测
    开源即时通讯IM框架 MobileIMSDK v6.4 发布
    027.Python面向对象_类&方法
  • 原文地址:https://blog.csdn.net/baidu_38766791/article/details/133479263