• docker_info_03_volume 数据卷管理


    docker_info_03_volume 数据卷管理

    3.1.docker 目录挂载命令

    • 命令实例:
    docker run -it --name volume02 -h zsdocker02 -v /server centos      # 不指定宿主机目录
    docker run -it --name volume01 -h zsdocker01 -v /hostdir:/dockedir  centos
    
    # 以下2种选项,可以加只读参数,保护宿主机数据
    -v /dockerdir            # 创建容器目录/dockerdir挂载到宿主机系统
    -v /hostdir:/dockerdir   # 宿主机目录/容器目录
    
    • 注意:
    1)使用 -v 参数挂载目录时,容器目录和宿主机目录不存在时会自动创建
    
    2)挂载文件时,源文件必须存在,否则会创建以该文件名命名的目录
    
    3)宿主机的目录可以使用相对路径,默认的工作目录在 /var/lib/docker/volumes/,而不是当前所在的目录
    docker run -it --name volume01 -v hostdir:/dockedir centos /bin/bash
    
    4)容器目录不可以为相对路径,如下命令是错误的:
    docker run -it --name volume01 -v /hostdir:dockedir centos /bin/bash
    
    5)通过以下命令的 Mounts 字段可以看出挂载目录的具体信息
    # docker inspect volume02 | grep Mounts -A 10       # 可用
    # docker inspect -f {{.Config.Volumes} volume02    # 失败
    docker inspect {{.volume}} volume02
    docker inspect volume02
    
    6)如果在docker中修改了挂载目录的属主信息,宿主机中对应目录的属主会修改为与容器中属主UID相同的用户
    
    7)删除容器,挂载的目录是否会删除?
    删除容器该宿主机目录不会被删除,随机名称的挂载目录也不会被删除
    

    3.2.docker 目录挂载实例演示

    3.2.1.挂载指定的宿主机目录到容器中

    docker run -it --name volume01 -h zsdocker01 -v /server:/server  centos
    ---------------------------------
    [root@zuiyoujie ~]# cd /server
    [root@zuiyoujie server]# echo 002 >002.txt     # 创建测试文件
    [root@zuiyoujie server]# docker run -it --name volume01 -h zsdocker01 -v /server:/server  centos
    [root@zsdocker01 /]# cd /server
    [root@zsdocker01 server]# ll
    total 4
    -rw-r--r-- 1 root root 7 Aug 22 09:22 002.txt
    [root@zsdocker01 server]# ls 002.txt            # 查看测试文件
    ---------------------------------
    

    3.2.2.挂载时不指定宿主机的目录

    • 只使用docker容器的目录
    docker run -it --name volume02 -h zsdocker02 -v /server centos
    -------------------------------------
    [root@zuiyoujie tools]# docker run -it --name volume02 -h zsdocker02 -v /server centos     # 创建挂载目录的容器volume02
    [root@zsdocker02 /]# cd /server/
    [root@zsdocker02 server]# ll
    total 0
    [root@zsdocker02 server]# touch aaa.txt bbb.txt 20180822.txt    # 创建测试文件
    [root@zsdocker02 server]# mkdir -p {ccc,ddd}                    # 创建测试目录
    [root@zsdocker02 server]# ll                                    # 检查
    total 0
    -rw-r--r-- 1 root root 0 Aug 28 16:02 20180822.txt
    -rw-r--r-- 1 root root 0 Aug 28 16:02 aaa.txt
    -rw-r--r-- 1 root root 0 Aug 28 16:02 bbb.txt
    drwxr-xr-x 2 root root 6 Aug 28 16:02 ccc
    drwxr-xr-x 2 root root 6 Aug 28 16:02 ddd
    [root@zsdocker02 server]# exit
    
    # 查看挂载目录的真实位置
    [root@zuiyoujie tools]# docker inspect volume02 | grep Mounts -A 10
    --------------------------------------------------------
            "Mounts": [
                {
                    "Type": "volume",
                    "Name": "eb4047959ec15dba75d3c0316d44f77783dfcfb985f57ac6206a790658774034",
                    "Source": "/var/lib/docker/volumes/eb4047959ec15dba75d3c0316d44f77783dfcfb985f57ac6206a790658774034/_data",
                    "Destination": "/server",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                }
    --------------------------------------------------------
    [root@zuiyoujie ~]# docker inspect -f {{Volumes}} volume02         # 失败
    map[/data:/var/lib/docker/volumes/47491b6ed876e3e160cd4a50aabbbcf06ea24e2adf9122b0760addd96ba96567/_data]
    [root@zuiyoujie ~]# cd /var/lib/docker/volumes/                    # 进入docker容器数据卷目录
    [root@zuiyoujie volumes]# ll                       # 下面这个随机名的目录就是volume02容器/data挂载到宿主机的目录
    total 28
    drwxr-xr-x 3 root root  4096 Aug 22 16:51 eb4047959ec15dba75d3c0316d44f77783dfcfb985f57ac6206a790658774034
    -rw------- 1 root root 32768 Aug 22 16:51 metadata.db
    [root@zuiyoujie volumes]# cd eb4047959ec15dba75d3c0316d44f77783dfcfb985f57ac6206a790658774034/
    [root@zuiyoujie eb4047959ec15dba75d3c0316d44f77783dfcfb985f57ac6206a790658774034]# ll
    total 4
    drwxr-xr-x 4 root root 4096 Aug 22 16:53 _data          # 里面的_data目录对应/data
    [root@zuiyoujie eb4047959ec15dba75d3c0316d44f77783dfcfb985f57ac6206a790658774034]# cd _data/
    [root@zuiyoujie _data]# ll                 # 可以在宿主机中看到刚才创建的文件和目录
    total 8
    -rw-r--r-- 1 root root    0 Aug 22 16:53 20180822.txt
    -rw-r--r-- 1 root root    0 Aug 22 16:53 aaa.txt
    -rw-r--r-- 1 root root    0 Aug 22 16:53 bbb.txt
    drwxr-xr-x 2 root root 4096 Aug 22 16:53 ccc
    drwxr-xr-x 2 root root 4096 Aug 22 16:53 ddd
    ----------------------------
    

    3.2.3.以只读方式挂载指定目录

    docker run -it --name volume03 -h zsdocker-03 -v /opt/tools/:/opt/tools/:ro centos
    ----------------------------
    [root@zuiyoujie tools]# docker run -it --name volume03 -h zsdocker-03 -v /opt/tools/:/opt/tools/:ro centos
    [root@zsdocker-03 /]# cd /opt/tools/
    [root@zsdocker-03 tools]# ls
    Python-3.6.2  Python-3.6.2.tgz  docker-ce-18.06.1.ce-3.el7.x86_64.rpm
    [root@zsdocker-03 tools]# touch ee
    touch: cannot touch 'ee': Read-only file system
    ----------------------------
    

    3.2.4.挂载一个已经存在的数据卷

    docker run -it --name volume04 --volumes-from volume01 -h zsdocker-04 centos
    --volumes-from      # 读取某个数据卷容器
    -i                  # 让终端保持打开状态
    -t                  # 启动终端
    -----------------------------
    [root@zuiyoujie tools]# docker run -it --name volume04 --volumes-from volume02 -h zsdocker-04 centos
    [root@zsdocker-04 /]# cd /server/
    [root@zsdocker-04 server]# ls
    20180822.txt  aaa.txt  bbb.txt  ccc  ddd
    
    # 在物理机上面查看创建的文件和目录
    [root@zuiyoujie _data]# ll /var/lib/docker/volumes/eb4047959ec15dba75d3c0316d44f77783dfcfb985f57ac6206a790658774034/_data/
    总用量 0
    -rw-r--r-- 1 root root 0 8月  29 00:02 20180822.txt
    -rw-r--r-- 1 root root 0 8月  29 00:02 aaa.txt
    -rw-r--r-- 1 root root 0 8月  29 00:02 bbb.txt
    drwxr-xr-x 2 root root 6 8月  29 00:02 ccc
    drwxr-xr-x 2 root root 6 8月  29 00:02 ddd
    ----------------------------------------
    

    END

  • 相关阅读:
    小乖乖的Linux历险记
    走近虚拟机与Linux
    Navicat for MySQL数据库管理工具安装和破解
    Spring + Struts + Hibernate 简单封装通用接口
    Java 学习路线图
    Java Mail 发送带有附件的邮件
    Java POI 读取Excel数据转换为XML格式
    Spring + Struts + Hibernate + Bootstrap-table 实现分页和增删改查
    Java 基础知识
    SSH三大框架知识点
  • 原文地址:https://www.cnblogs.com/tssc/p/13902123.html
Copyright © 2020-2023  润新知