Docker笔记8 | Docker内部以及容器之间如何管理数据?

news2024/12/26 20:47:35

8 | Docker内部以及容器之间如何管理数据?

  • 1 数据卷
    • 1.1 什么是数据卷?
    • 1.2 数据卷的特性
    • 1.3 创建数据卷
    • 1.4 查看数据卷
    • 1.5 启动挂在数据卷的容器
    • 1.6 删除数据卷
  • 2 挂在主机目录
    • 2.1 挂载主机目录作为数据卷
    • 2.2 查看数据卷信息
    • 2.3 挂载本地主机文件作为数据卷

有两种方式:

  • 数据卷;
  • 挂在主机目录。
    在这里插入图片描述

1 数据卷

1.1 什么是数据卷?

  • 数据卷是一个可供一个或多个容器使用的特殊目录;
  • 类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的
    文件会复制到数据卷中(仅数据卷为空时会复制)。

1.2 数据卷的特性

  • 数据卷可以在容器之间共享和重用;
  • 数据卷的修改立马生效;
  • 数据卷的更新不会影响镜像;
  • 数据卷默认一直存在,即使容器被删除。

1.3 创建数据卷

  • 命令:docker volume create xxx
  • 比如:
docker volume create my-tools
  • 查看数据卷,使用docker volume ls
    在这里插入图片描述

1.4 查看数据卷

  • docker volume ls 是查看所有的数据卷;
  • docker volume inspect xxx是查看指定数据卷的信息;
  • 比如:
docker volume inspect my-tools
[
    {
        "CreatedAt": "2023-05-24T09:30:01+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/my-tools/_data",
        "Name": "my-tools",
        "Options": null,
        "Scope": "local"
    }
]

在这里插入图片描述

1.5 启动挂在数据卷的容器

  • 方法:

在用 docker run 命令的时候,使用 --mount 标记来将 数据卷 挂载到容器里;
可挂挂载多个数据卷。

  • 比如:面创建一个名为 tools的容器,并加载一个 数据卷 到容器的 /usr/share/nginx/tools 目录:
docker run -d -P --name tools --mount source==my-tools,target=/usr/share/nginx/tools nginx:alpinedocker run -d -P --name tools --mount source=my-tools,target=/usr/share/nginx/tools nginx:alpine

在这里插入图片描述

  • 查看下数据卷的信息:docker volume inspect tools
noamanelson@noamanelson-Virtual-Machine:~$ docker inspect tools
[
    {
        "Id": "85973675bcfd0dd7ca0bb26257eab558f525009614c13c0eada0dcc71714b262",
        "Created": "2023-05-24T01:56:10.651635407Z",
        "Path": "/docker-entrypoint.sh",
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 39953,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2023-05-24T01:56:12.455050956Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:8e75cbc5b25c8438fcfe2e7c12c98409d5f161cbb668d6c444e02796691ada70",
        "ResolvConfPath": "/var/lib/docker/containers/85973675bcfd0dd7ca0bb26257eab558f525009614c13c0eada0dcc71714b262/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/85973675bcfd0dd7ca0bb26257eab558f525009614c13c0eada0dcc71714b262/hostname",
        "HostsPath": "/var/lib/docker/containers/85973675bcfd0dd7ca0bb26257eab558f525009614c13c0eada0dcc71714b262/hosts",
        "LogPath": "/var/lib/docker/containers/85973675bcfd0dd7ca0bb26257eab558f525009614c13c0eada0dcc71714b262/85973675bcfd0dd7ca0bb26257eab558f525009614c13c0eada0dcc71714b262-json.log",
        "Name": "/tools",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "docker-default",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "ConsoleSize": [
                48,
                173
            ],
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "private",
            "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",
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": [],
            "BlkioDeviceWriteBps": [],
            "BlkioDeviceReadIOps": [],
            "BlkioDeviceWriteIOps": [],
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": null,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "Mounts": [
                {
                    "Type": "volume",
                    "Source": "my-tools",
                    "Target": "/usr/share/nginx/tools"
                }
            ],
            "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": {
                "LowerDir": "/var/lib/docker/overlay2/b852db8a48c8ee2f36af5920c0677d525d90c6403dd02396796dad5927bd2417-init/diff:/var/lib/docker/overlay2/d18166feb9ccbe24169b09f8f4ced2529d0ab7ea3a79cc272c2c3c650903b58c/diff:/var/lib/docker/overlay2/e66e7bdb223fde6e95e5edb32f0f6dab3f2980962e533d1d41844fa915816f9a/diff:/var/lib/docker/overlay2/c3dd0ee7cf2c7a332ebe79d2a6e4443bdb6d2969c41b05cfca59c75ca12998e1/diff:/var/lib/docker/overlay2/08ed0137e18a97effe4374d2ac5fbc8abdfee53044711aae79f732df95e644d8/diff:/var/lib/docker/overlay2/349dbe6ba59c85fa16c3cb587a640b7b67b1e76f3675729ebc36f03303f3c3db/diff:/var/lib/docker/overlay2/fe1cb86615fa0c45b23a9929476b83b10e062e16935454deb56523ed4bf33b82/diff:/var/lib/docker/overlay2/0f3cb2f0fc871c0c25eb31a9f20685598770786dd62865db1f3a41cec9995f82/diff",
                "MergedDir": "/var/lib/docker/overlay2/b852db8a48c8ee2f36af5920c0677d525d90c6403dd02396796dad5927bd2417/merged",
                "UpperDir": "/var/lib/docker/overlay2/b852db8a48c8ee2f36af5920c0677d525d90c6403dd02396796dad5927bd2417/diff",
                "WorkDir": "/var/lib/docker/overlay2/b852db8a48c8ee2f36af5920c0677d525d90c6403dd02396796dad5927bd2417/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [
            {
                "Type": "volume",
                "Name": "my-tools",
                "Source": "/var/lib/docker/volumes/my-tools/_data",
                "Destination": "/usr/share/nginx/tools",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            }
        ],
        "Config": {
            "Hostname": "85973675bcfd",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.23.4",
                "PKG_RELEASE=1",
                "NJS_VERSION=0.7.11"
            ],
            "Cmd": [
                "nginx",
                "-g",
                "daemon off;"
            ],
            "Image": "nginx:alpine",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": [
                "/docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
            },
            "StopSignal": "SIGQUIT"
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "9b202e7041b396a70bf5256d93119f524e0b2df574ce6da5905a3873746583d0",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "80/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "32768"
                    },
                    {
                        "HostIp": "::",
                        "HostPort": "32768"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/9b202e7041b3",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "50abc9764730e724b0ac93a62eeb7a46fb7b8359234d2771417a083f74b5a0ed",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "4d733b11c6b91921b907d8e660c4b4686a2b3aa9f6899221d8aafe46a5c5bdad",
                    "EndpointID": "50abc9764730e724b0ac93a62eeb7a46fb7b8359234d2771417a083f74b5a0ed",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

1.6 删除数据卷

  • 命令: docker volume rm xxx
  • 比如:docker volume rm my-tools
    在这里插入图片描述

注意:
Docker 不会在容器被删除后自动删除;
在删除容器的时候使用 docker rm -v,同时移除数据卷;
无主的数据卷可能会占据很多空间,要清理请使用以下命令 docker volume prune

2 挂在主机目录

2.1 挂载主机目录作为数据卷

使用 --mount 标记可以指定挂载一个本地主机的目录到容器中去。

docker run -d -P --name tools --mount type=bind,source=/src/webapp,target=/usr/share/nginx/tools nginx:alpine
  • Docker 挂载主机目录的默认权限是 读写 ,也可以通过增加 readonly 指定为 只读:
docker run -d -P --name tools --mount type=bind,source=/src/webapp,target=/usr/share/nginx/tools,readonly nginx:alpine

2.2 查看数据卷信息

docker inspect tools

2.3 挂载本地主机文件作为数据卷

docker run --rm -it  --mount type=bind,source=$HOME/.bash_history,target=/root/.bash_history ubuntu:18.04 bash

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/562334.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习基础入门篇-序列模型[11]:循环神经网络 RNN、长短时记忆网络LSTM、门控循环单元GRU原理和应用详解

【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍&#xff1a;【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化…

中原雄狮官网上线 | LTD物流服务行业案例分享

​一、公司介绍 中原雄狮崛起于2017年&#xff0c;彼时&#xff0c;全国货运行业存在许多不良行为&#xff0c;无赖货主和黑心货站恶意拖欠货车司机运费&#xff0c;而货车司机作为弱势群体却势单力薄无依无助的问题&#xff0c;为了让司机的血汗钱能颗粒归仓&#xff0c;中原雄…

一个活人的标准:灵·魂·身体到底是咋回事儿

正常情况 人类对自我的探求一直没有减弱过&#xff0c;总是在发现并给我们带来惊喜。今天也通过神赐给我们的圣经来跟大家分享一下灵魂身体之间的关系。 神创造了人&#xff0c;并给了人独一的灵。所以人是万物的灵长&#xff0c;比任何生物都聪明。一个“活人”必须要有的就是…

计算机图形学 | 有趣的测试和合并——片元操作

计算机图形学 | 有趣的测试和合并——片元操作 计算机图形学 | 有趣的测试和合并——片元操作10.1 再看片元操作片元操作几个重要的缓冲区 10.2 谁遮住了我&#xff1f;消隐的概念面剔除深度测试深度缓冲器算法&#xff08;Z-buffer算法&#xff09;深度排序算法&#xff08;de…

新华三发布绿洲平台3.0,五大能力升级,构筑坚实用数底座

当前我国数字经济飞速发展&#xff0c;据中国信息通信研究院发布的《中国数字经济发展研究报告&#xff08;2023年&#xff09;》显示&#xff0c;2022年&#xff0c;我国数字经济规模达到50.2万亿元&#xff0c;同比名义增长10.3%&#xff0c;已连续11年显著高于同期GDP名义增…

HTTP协议概述(见过花开就好了,何必在意花落谁家呢)

文章目录 一、简介二、HTTP版本三、HTTP 方法四、HTTP状态码五、HTTP 请求流程分析1.请求报文2.响应报文 一、简介 客户端输入域名&#xff0c;经域名解析成IP地址&#xff0c;在与服务端建立数据传输之前&#xff0c;要先建立TCP连接&#xff08;三次握手&#xff09;&#x…

Day03 02-MySQL多表查询详解

文章目录 第八章 多表查询8.1 多表查询介绍8.1.1 什么是多表查询8.1.2 多表查询基本写法8.1.3 笛卡尔积8.1.4 连接查询条件限制 8.2 连接查询分类8.2.1 内连接8.2.2 外连接8.2.3 全连接8.2.4 自然连接 8.3 子查询8.3.1 子查询简介8.3.2 在where子句中8.3.3 在from子句中8.3.4 在…

是德科技keysight E8257D信号发生器

产品概览 Keysight E8257D (Agilent) PSG 模拟信号发生器提供业界领先的输出功率、电平精度和高达 67 GHz 的相位噪声性能&#xff08;工作频率可达 70 GHz&#xff09;。Agilent PSG 模拟信号发生器的高输出功率和卓越的电平精度通常无需使用外部放大器来测试高功率设备&…

国内热门AI智能音箱品牌都采用了哪些功放芯片

音频功放IC是各类音响、耳机等器材不可或缺的一部分&#xff1b;音频功率放大器芯片俗称“扩音器”&#xff0c;是音响系统中最基本的设备&#xff0c;负责将来自信号源的微弱电信号进行放大&#xff0c;以驱动扬声器发声&#xff0c;从而将声音传至我们的听觉系统。 现如今&a…

浅谈电解电容在电路设计中的作用

谈起电解电容我们不得下多了解一下它的作用 1、滤波作用 在电源电路中&#xff0c;整流电路将交流变成脉动的直流&#xff0c;而在整流电路之后接入一个较大容量的电解电容&#xff0c;利用其充放电特性(储能作用)&#xff0c;使整流后的脉动直流电压变成相对比较稳定的直流电…

启动页/闪屏/引导页-你还傻傻分不清?

启动页/闪屏/引导页-你还傻傻分不清&#xff1f;&#xff08;转载&#xff09; - 知乎 今天就跟大家一起来认识一下开屏三姐妹&#xff1a;启动页/闪屏/引导页。 通常三姐妹出场顺序如下&#xff1a; 下面我们来深入认识一下这三姐妹&#xff1a; 1、启动页 定义&#xff1…

ChatGPT:你真的了解网络安全吗?浅谈网络安全攻击防御进行时之传统的网络安全

ChatGPT&#xff1a;你真的了解网络安全吗&#xff1f;浅谈网络安全攻击防御进行时 传统的网络安全 ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;美国OpenAI 研发的聊天机器人程序&#xff0c;是人工智能技术驱动的自…

搭建hadoop集群

搭建Hadoop集群 1&#xff0c;准备环节 Hadoop完全分布式集群式&#xff08;master/slave&#xff09;主从架构。 因为Hadoop是由java编写的&#xff0c;所以需要Java的环境支持&#xff0c;作为开发者我们需要安装jdk。 安装jdk的教程http://t.csdn.cn/6qJKg 下载Hadoop的…

spring(不是springboot)集成apllo方案

现在到处都是基于 springboot 的微服务项目。 不巧手头碰到了一个 spring 的项目&#xff0c;打war包直接放到tomcat中启动的。 现在要将apollo集成进来&#xff0c;要求 Access Key 不可以放在properties 配置文件中&#xff0c;要统一使用apollo来管理。 步骤如下&#xff1a…

《计算机网络——自顶向下方法》精炼——3.5.5-3.6.1

学习是劳动&#xff0c;是充满思想的劳动。——乌申斯基 文章目录 TCP流量控制TCP连接管理建立TCP连接拆除TCP连接TCP状态的转换 TCP拥塞控制情况1&#xff1a;两个发送方&#xff0c;一个无限缓存的路由器情况2&#xff1a;两台主机&#xff0c;一台具有有限缓存的路由器情况3…

【源码解析】EasyExcel导入导出源码解析

EasyExcel介绍 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存&#xff0c;poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题&#xff0c;但POI还是有一些缺陷&#xff0c;比如07版Excel解压缩以及解压后存储都…

XPCIE1032 — 高速高精,超快交互速率的PCIe EtherCAT实时运动控制卡

产品导读 XPCIE1032是一款基于PCI Express的EtherCAT总线运动控制卡&#xff0c;可选4-16轴运动控制&#xff0c;支持多路高速数字输入输出&#xff0c;可轻松实现多轴同步控制和高速数据传输。 XPCIE1032集成了强大的运动控制功能&#xff0c;结合MotionRT7运动控制实时软核…

PyQt5桌面应用开发(17):中文书评+类结构+QWebEngineView

本文目录 PyQt5桌面应用系列PyQt5学习PyQt5类结构和帮助速查实现与解释最终界面和完整源代码界面完整的代码 总结 PyQt5桌面应用系列 PyQt5桌面应用开发&#xff08;1&#xff09;&#xff1a;需求分析 PyQt5桌面应用开发&#xff08;2&#xff09;&#xff1a;事件循环 PyQt5桌…

【中危】Apache Ranger 2.3.0 存在远程代码执行漏洞

漏洞描述 Apache Ranger 是一款用于在 Hadoop 平台及其他平台启用、监控和管理全面的数据安全性的开源框架。Apache Ranger 表达式策略是一种动态访问控制策略&#xff0c;通过自定义表达式来指定更细粒度的访问控制条件。 Apache Ranger 受影响版本中具有管理员权限或策略管…

【微博-自定义Cell-创建子控件 Objective-C语言】

一、自定义Cell 1.既然我们要自定义Cell,这个自定义Cell,属于MVC哪个部分, 这个Cell类,属于MVC哪个部分, Model、Controller、还是View, View吧, 所以说,应该在这里去新建一个类, 在这里去新建一个类,右键,New File,