• Docker容器数据卷


    1、什么是容器数据卷

    简单来说就是把Docker容器内的目录挂载到主机对应的目录上,使该两个目录下的数据保持同步

    2、使用指定路径挂载数据卷

    1. #选项及解释
    2. -it表示使用交互方式运行容器,能进入容器内部进行内容的查看
    3. -v表示使用数据卷
    4. docker run -it -v 主机目录:容器目录 镜像名称:[TAG]

    例:

    docker run -it -v /home/ken:/home centos:7

    3、查看使用数据卷后容器的元数据

    docker inspect 容器id

    找到Mounts,查看挂载信息,显示成功联通容器指定目录和主机指定目录

    进入主机的home目录,发现在主机的home目录下自动生成一个名为ken的目录

    4、在容器指定目录里新建任意文件,查看数据挂载效果

    例:

    (1)容器新建文件,主机自动挂载容器指定目录的数据

    容器:

    新建名为ken.txt的文件

    主机:

    查看/home/ken目录下的文件,发现容器的ken.txt文件同步过来到主机

    (2)关闭容器,修改主机的文件内容,重启容器,查看文件内容,容器自动挂载主机指定目录的数据,并且在容器关机后进行数据变更,在容器重启后容器仍会自动挂载主机指定目录的数据

    主机:

    用vim命令修改ken.txt文件的内容

    容器:

    退出容器,容器自动关机,然后重新启动容器,再回到/home目录下,并查看ken.txt文件的内容,发现容器虽然在主机改变ken.txt文件的内容时关机了,但在重启后仍能自动同步主机的ken.txt文件的内容

    其他:

    1、匿名挂载数据卷

    docker -v 容器内路径

    例:

    1. #选项及解释
    2. --name="name"参数用于给容器取名字 ,用来区分容器
    3. -d表示容器在后台运行
    4. -p表示指定容器的端口,写法为-p主机端口:容器端口
    5. -v表示使用数据卷
    6. docker run -d -p 3310:3306 --name mysql01 -v /etc/mysql mysql:8.0

    2、具名挂载数据卷

    docker -v 卷名:容器内路径

    例:

    1. #选项及解释
    2. --name="name"参数用于给容器取名字 ,用来区分容器
    3. -d表示容器在后台运行
    4. -p表示指定容器的端口,写法为-p主机端口:容器端口
    5. -v表示使用数据卷
    6. name-mysql就是卷的具体名字
    7. docker run -d -p 3100:3306 --name mysql01 -v name-mysql:/etc/mysql mysql:8.0

    3、查看所有的数据卷

    docker volume ls

    4、查看数据卷的挂载目录

    docker volume inspect 卷名

    例:

     所有docker容器内的数据卷,没指定目录的情况下默认目录都是/var/lib/docker/volumes/卷名/_data

    5、改变读写权限(一旦设置了容器权限,容器对挂载出来的内容就有了限定)

    只读(只能通过宿主机来操作内容,容器内部无法操作):

    1. #选项及解释
    2. --name="name"参数用于给容器取名字 ,用来区分容器
    3. -d表示容器在后台运行
    4. -P表示指定容器的端口,写法为-p主机端口:容器端口
    5. -v表示使用数据卷
    6. name-mysql就是卷的具体名字
    7. ro全称readonly,表示只读
    8. docker run -d -p 3100:3306 --name mysql01 -v name-mysql:/etc/mysql:ro mysql:8.0

    可读可写: 

    1. #选项及解释
    2. --name="name"参数用于给容器取名字 ,用来区分容器
    3. -d表示容器在后台运行
    4. -P表示指定容器的端口,写法为-p主机端口:容器端口
    5. -v表示使用数据卷
    6. name-mysql就是卷的具体名字
    7. rw全称readwrite,表示可读可写
    8. docker run -d -p 3100:3306 --name mysql01 -v name-mysql:/etc/mysql:rw mysql:8.0

    6、使用Dockerfile进行数据卷挂载

    (1)创建一个名为dockerfile的Dockerfile文件,内容如下

    1. #镜像以什么为基础
    2. FROM centos:7
    3. #挂载数据卷(匿名)
    4. VOLUME ["volume01","volume02"]
    5. #挂载数据卷(具名)
    6. #VOLUME [volume01:"volume01",volumeo2:"volume02"]
    7. #输出结束
    8. CMD echo '=========================END====================='
    9. #走的命令
    10. CMD /bin/bash

    (2)输入以下命令编译出名为myimage的镜像

    1. #选项及解释
    2. myimage表示镜像名称
    3. -t表示后面是自定义镜像名
    4. docker build -f dockerfile -t myimage .

    效果图:

    (3)启动生成的镜像并查看目录

    (4)查看容器的元数据,可知容器数据卷对应的宿主机目录(由Name是一串随机字符串可看出这生成的两个目录都是匿名数据卷)

  • 相关阅读:
    JAVA三元表达式详解
    实验2.1.1 交换机的管理方式
    使用 elasticdump 跨版本迁移 ES 数据
    【原创】Python 懂车帝口碑分爬虫
    速卖通卖家如何抓住产品搜索权重
    便携一体机设计资料机构图:定制化仪器户外便携式手提触摸一体机
    队列的基本操作
    Go微服务开发指南
    怒刷LeetCode的第19天(Java版)
    I.MX6 yocto project build
  • 原文地址:https://blog.csdn.net/m0_64284147/article/details/126571316