zoukankan      html  css  js  c++  java
  • 数据管理

    这一章介绍如何在 Docker 内部以及容器之间管理数据,在容器中管理数据主要有两种方式:

    数据卷(Volumes)

    挂载主机目录 (Bind mounts)

     

    数据卷

     

     

    1.数据卷 可以在容器之间共享和重用

     

    2.数据卷 的修改会立马生效

     

    3.数据卷 的更新,不会影响镜像

     

    4.数据卷 默认会一直存在,即使容器被删除

     

    注意: 数据卷 的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂

     

    载点的目录中的文件会隐藏掉,能显示看的是挂载的 数据卷 。

    [root@localhost ~]# docker images
    REPOSITORY                     TAG                 IMAGE ID            CREATED                  SIZE
    ubuntu                         16.04               657d80a6401d        Less than a second ago   121MB
    nginx                          latest              ab56bba91343        Less than a second ago   126MB
    ubuntu                         v2                  a66d0fda4c36        5 hours ago              86.1MB
    <none>                         <none>              986426ddabcf        5 hours ago              86.1MB
    nginx                          v2                  06292a546f31        25 hours ago             126MB
    commit-test                    v1                  28a5df57c0b9        45 hours ago             447MB
    commit-test                    v2                  28a5df57c0b9        45 hours ago             447MB
    erixero/centos7.3-base-image   latest              ae904afa83bb        2 years ago              288MB
    ansible/centos7-ansible        latest              688353a31fde        2 years ago              447MB
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                NAMES
    c7a2a75a5536        nginx                     "nginx -g 'daemon of��"   26 hours ago        Up 26 hours         0.0.0.0:80->80/tcp   webserver
    ce4ccea0bde8        ansible/centos7-ansible   "bash"                   47 hours ago        Up 47 hours                              web3
    [root@localhost ~]# 
    [root@localhost ~]# 
    [root@localhost ~]# docker run -itd -P -v ghd_volume:/data centos7.3-base-image bash
    Unable to find image 'centos7.3-base-image:latest' locally
    ^C
    [root@localhost ~]# docker run -itd -P -v ghd_volume:/data erixero/centos7.3-base-image  bash
    f6bbea44368060f520a27915e5446ad0cde67ebb4cad99c39370b6b6aa7fa8ce
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                NAMES
    f6bbea443680        erixero/centos7.3-base-image   "bash"                   6 seconds ago       Up 5 seconds                             vibrant_lalande
    c7a2a75a5536        nginx                          "nginx -g 'daemon of��"   26 hours ago        Up 26 hours         0.0.0.0:80->80/tcp   webserver
    ce4ccea0bde8        ansible/centos7-ansible        "bash"                   47 hours ago        Up 47 hours                              web3
    [root@localhost ~]# docker inspect f6bbea443680
    [
        {
            "Id": "f6bbea44368060f520a27915e5446ad0cde67ebb4cad99c39370b6b6aa7fa8ce",
            "Created": "2019-08-31T08:53:49.082498253Z",
            "Path": "bash",
            "Args": [],
            "State": {
                "Status": "running",
                "Running": true,
                "Paused": false,
                "Restarting": false,
                "OOMKilled": false,
                "Dead": false,
                "Pid": 87155,
                "ExitCode": 0,
                "Error": "",
                "StartedAt": "2019-08-31T08:53:50.080729254Z",
                "FinishedAt": "0001-01-01T00:00:00Z"
            },
            "Image": "sha256:ae904afa83bbbb1eb542c356fb42a15f39ce96ce0dba9aa49a8fe51f18a44116",
            "ResolvConfPath": "/var/lib/docker/containers/f6bbea44368060f520a27915e5446ad0cde67ebb4cad99c39370b6b6aa7fa8ce/resolv.conf",
            "HostnamePath": "/var/lib/docker/containers/f6bbea44368060f520a27915e5446ad0cde67ebb4cad99c39370b6b6aa7fa8ce/hostname",
            "HostsPath": "/var/lib/docker/containers/f6bbea44368060f520a27915e5446ad0cde67ebb4cad99c39370b6b6aa7fa8ce/hosts",
            "LogPath": "/var/lib/docker/containers/f6bbea44368060f520a27915e5446ad0cde67ebb4cad99c39370b6b6aa7fa8ce/f6bbea44368060f520a27915e5446ad0cde67ebb4cad99c39370b6b6aa7fa8ce-json.log",
            "Name": "/vibrant_lalande",
            "RestartCount": 0,
            "Driver": "devicemapper",
            "Platform": "linux",
            "MountLabel": "",
            "ProcessLabel": "",
            "AppArmorProfile": "",
            "ExecIDs": null,
            "HostConfig": {
                "Binds": [
                    "ghd_volume:/data"
                ],
                "ContainerIDFile": "",
                "LogConfig": {
                    "Type": "json-file",
                    "Config": {}
                },
                "NetworkMode": "default",
                "PortBindings": {},
                "RestartPolicy": {
                    "Name": "no",
                    "MaximumRetryCount": 0
                },
                "AutoRemove": false,
                "VolumeDriver": "",
                "VolumesFrom": null,
                "CapAdd": null,
                "CapDrop": null,
                "Capabilities": null,
                "Dns": [],
                "DnsOptions": [],
                "DnsSearch": [],
                "ExtraHosts": null,
                "GroupAdd": null,
                "IpcMode": "private",
                "Cgroup": "",
                "Links": null,
                "OomScoreAdj": 0,
                "PidMode": "",
                "Privileged": false,
                "PublishAllPorts": true,
                "ReadonlyRootfs": false,
                "SecurityOpt": null,
                "UTSMode": "",
                "UsernsMode": "",
                "ShmSize": 67108864,
                "Runtime": "runc",
                "ConsoleSize": [
                    0,
                    0
                ],
                "Isolation": "",
                "CpuShares": 0,
                "Memory": 0,
                "NanoCpus": 0,
                "CgroupParent": "",
                "BlkioWeight": 0,
                "BlkioWeightDevice": [],
                "BlkioDeviceReadBps": null,
                "BlkioDeviceWriteBps": null,
                "BlkioDeviceReadIOps": null,
                "BlkioDeviceWriteIOps": null,
                "CpuPeriod": 0,
                "CpuQuota": 0,
                "CpuRealtimePeriod": 0,
                "CpuRealtimeRuntime": 0,
                "CpusetCpus": "",
                "CpusetMems": "",
                "Devices": [],
                "DeviceCgroupRules": null,
                "DeviceRequests": null,
                "KernelMemory": 0,
                "KernelMemoryTCP": 0,
                "MemoryReservation": 0,
                "MemorySwap": 0,
                "MemorySwappiness": null,
                "OomKillDisable": false,
                "PidsLimit": null,
                "Ulimits": null,
                "CpuCount": 0,
                "CpuPercent": 0,
                "IOMaximumIOps": 0,
                "IOMaximumBandwidth": 0,
                "MaskedPaths": [
                    "/proc/asound",
                    "/proc/acpi",
                    "/proc/kcore",
                    "/proc/keys",
                    "/proc/latency_stats",
                    "/proc/timer_list",
                    "/proc/timer_stats",
                    "/proc/sched_debug",
                    "/proc/scsi",
                    "/sys/firmware"
                ],
                "ReadonlyPaths": [
                    "/proc/bus",
                    "/proc/fs",
                    "/proc/irq",
                    "/proc/sys",
                    "/proc/sysrq-trigger"
                ]
            },
            "GraphDriver": {
                "Data": {
                    "DeviceId": "93",
                    "DeviceName": "docker-253:0-51547343-1e12217a5354101071e294c14c2d50853608f06644729fc76a240de07c2276d5",
                    "DeviceSize": "10737418240"
                },
                "Name": "devicemapper"
            },
            "Mounts": [
                {
                    "Type": "volume",
                    "Name": "ghd_volume",
                    "Source": "/var/lib/docker/volumes/ghd_volume/_data",
                    "Destination": "/data",
                    "Driver": "local",
                    "Mode": "z",
                    "RW": true,
                    "Propagation": ""
                }
            ],
    View Code

    删除数据卷

    [root@localhost ~]# docker volume rm ghd_volume

    挂载主机目录

    --mount和-v的区别,-v如果容器中没有目标目录会自动创建,使用--mount如果目标目录不存在会报错,为了避免挂错的情况发生,还是建议使用--mount

    docker run -it --mount type=bind,source=/opt,target=/opt erixero/centos7.3-base-image bash
    bash-4.2# cd /opt/
    bash-4.2# ls
    bbb.txt  containerd  dockerfile  ghd  redis  ubuntu.tar.gz
    bash-4.2# exit
    [root@localhost ~]# cd /opt/
    [root@localhost opt]# ls
    bbb.txt  containerd  dockerfile  ghd  redis  ubuntu.tar.gz
    
    #可以看到/opt目录已挂在到容器中

     

     

  • 相关阅读:
    Protocol Buffer使用
    uImage、zImage、bzImage、vlinzx区别
    nginx学习之一
    Android屏幕底部弹出DialogFragment(3)
    C++11 | 正则表达式(4)
    Android绘图之渐隐动画
    Android动态Java代码调整window大小
    Spring Boot交流平台
    Java日志实战及解析
    Android WindowManager悬浮窗:不需要申请权限实现悬浮
  • 原文地址:https://www.cnblogs.com/python-cat/p/11671446.html
Copyright © 2011-2022 走看看