Docker数据卷与网络模式

华子目录

  • 数据卷
    • 注意
    • 数据卷操作
    • 查看镜像,容器,数据卷所占空间
  • Docker的网络模式
    • 查看指定容器的网络模式
    • bridge模式
    • none模式
    • host模式
    • container模式

数据卷

数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特定:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 数据卷的更新,不会影响镜像
  • 数据卷默认会一直存在,即使容器被删除
  • 用容器操作数据卷,用数据卷操作容器,都是会产生相同的效果

注意

数据卷的使用,类似于Linux下对目录或文件进行mount镜像中的被指定为挂载点的目录中的文件会隐藏掉,能显示看到的挂载的数据卷。

数据卷操作

Docker volume(数据卷)是Docker中用于在容器和主机之间共享和持久化数据的机制。它使得容器之间的数据共享和容器的数据持久化成为可能。

Docker volume的主要特点包括:

  1. 数据持久性:即使容器被删除,Volume中的数据也不会丢失,因为它们存储在宿主机上。
  2. 数据共享:多个容器可以共享同一个Volume,使得数据共享变得简单方便。
  3. 类型多样:Docker支持多种类型的Volume,包括本地Volume、远程Volume以及插件支持的Volume等。

以下是一个Docker volume的示例,演示如何创建、使用和管理Volume:

示例

  1. 创建Docker Volume

使用docker volume create命令可以创建一个新的Volume:

docker volume create my-volume

这条命令会创建一个名为my-volume的新Volume。

  1. 查看Docker Volume

使用docker volume ls命令可以查看当前系统中存在的所有Docker Volume:

docker volume ls

输出中会列出所有Volume的详细信息,包括它们的名称和驱动程序。

  1. 将Volume挂载到容器

当创建容器时,可以使用-v--volume参数将Volume挂载到容器中的指定路径。例如:

docker run -d -v my-volume:/data my-image

这条命令会启动一个容器,并将my-volume挂载到容器内的/data目录。容器内的/data目录现在将共享my-volume中的数据。

  1. 查看Volume的挂载位置

有时,你可能想要知道Volume在宿主机上的具体挂载位置。可以通过docker volume inspect命令获取:

docker volume inspect my-volume

输出中会包含Volume的详细信息,包括其挂载点(Mountpoint),这就是Volume在宿主机上的实际位置。

  1. 删除Docker Volume

当不再需要某个Volume时,可以使用docker volume rm命令删除它:

docker volume rm my-volume

这条命令会删除my-volume以及其中的所有数据。请注意,如果Volume正被容器使用,则无法直接删除,需要先停止并移除相关的容器。

[root@server ~]# docker volume create my-volume  #在Linux主机中创建一个名为my-volume的数据卷
my-volume
[root@server ~]# docker volume ls  #查看主机中的数据卷
DRIVER    VOLUME NAME
local     2656990227a34c0f5e8022aa8a05a7be0c91554a28b2d71e8f4a51d73a5e36f4
local     my-volume
[root@server ~]# docker volume inspect my-volume  #查看my-volume数据卷的信息
[{"CreatedAt": "2024-03-25T11:32:05+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/my-volume/_data","Name": "my-volume","Options": null,"Scope": "local"}
]
[root@server _data]# docker run -d -P --name web1 -v my-volume:/data nginx:latest
34ceb2d4ea950e140ef7786863ac9fe0a79c295d4a183cb4628db4c62ff699b5
[root@server _data]# docker ps
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS          PORTS                                     NAMES
34ceb2d4ea95   nginx:latest   "/docker-entrypoint.…"   21 seconds ago   Up 20 seconds   0.0.0.0:32769->80/tcp, :::32769->80/tcp   web1[root@server _data]# docker exec -it web1 bash  #进入容器中
root@34ceb2d4ea95:/# ls /   #发现出现了/data目录
bin   dev                   etc   lib64  opt   run   sys  var
boot  docker-entrypoint.d   home  media  proc  sbin  tmp
data  docker-entrypoint.sh  lib   mnt    root  srv   usr
root@34ceb2d4ea95:/# cd /data
root@34ceb2d4ea95:/data# ls
root@34ceb2d4ea95:/data# touch file.txt  #创建一个file.txt文件
root@34ceb2d4ea95:/data# ls
file.txt
root@34ceb2d4ea95:/data# cd
root@34ceb2d4ea95:~# exit  #退出容器
exit
[root@server _data]# cd /var/lib/docker/volumes/my-volume/_data/  #切换到数据卷中
[root@server _data]# ls   #发现了我们在容器中创建的file.txt
file.txt
[root@server _data]#
[root@server _data]# docker inspect web1  #显示结果如下图

在这里插入图片描述

[root@server _data]# docker volume --helpUsage:  docker volume COMMANDManage volumesCommands:create      Create a volumeinspect     Display detailed information on one or more volumesls          List volumesprune       Remove unused local volumesrm          Remove one or more volumes[root@server _data]# docker volume rm my-volume   #数据卷正在使用,所以不能删除数据卷,需要关闭或删除容器后,再删除数据卷
Error response from daemon: remove my-volume: volume is in use - [34ceb2d4ea950e140ef7786863ac9fe0a79c295d4a183cb4628db4c62ff699b5]
  • 数据卷是被设计用来持久化数据的,它的生命周期独立于容器, Docker不会在容器被删除后自动删除数据卷, 并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷。如果需要在删除容器的同时移除数据卷。可以在删除容器的时候使用 docker rm -v 这个命令。
  • 无主的数据卷可能会占据很多空间,要清理请使用以下命令:
[root@server _data]# docker volume prune

查看镜像,容器,数据卷所占空间

[root@server _data]# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          3         1         891.8MB   705.1MB (79%)
Containers      1         1         1.095kB   0B (0%)
Local Volumes   2         1         0B        0B
Build Cache     0         0         0B        0B

Docker的网络模式

当你安装docker时,它会自动创建三个网络

[root@server ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
69cf9fe45652   bridge    bridge    local
211a8fdf9c39   host      host      local
fa566b41018a   none      null      local
  • bridge此模式会为每一个容器分配,设置IP地址等,使用--net或--network=bridge指定,默认网络模式
  • host:容器将不会虚拟出自己的网卡,不会配置自己的IP地址等,而是使用宿主机的IP和端口,使用--net或--network=host指定
  • none:该模式关闭了容器的网络功能,使用--net或--network=none指定
  • container:创建的容器不会创建自己的网卡,不会配置自己的IP地址,而是和一个指定的容器共享IP,端口,使用--net或--network=container:指定容器名指定

查看指定容器的网络模式

[root@server ~]# docker inspect linux-ubuntu | grep -i network"NetworkMode": "bridge","NetworkSettings": {"Networks": {"NetworkID": "69cf9fe45652f27db873a0f1dbcc7f36b7357af33884f51356c4c38f41ca5181",

bridge模式

  • Docker的Bridge网络模式是Docker的默认网络模式。当不指定网络类型时,所创建的容器默认会采用这种网络模式。Bridge网络模式为每一个容器分配一个Network Namespace、IP等,并将容器的网络连接到一个网桥(默认为docker0)上。

  • 在Bridge网络模式下,同一个宿主机上所有容器默认会在同一个网段(默认网段为172.17.0.0/16)下,并且相互之间可以通信以及访问外部网络(前提是宿主机可以访问外部网络)。这种网络模式提供了容器之间的自动DNS解析,使得容器化应用程序可以轻松地相互通信,同时提高了安全性。

  • Bridge网络模式是基于Linux bridge的虚拟网络实现。Docker引擎在创建一个Bridge网络时,会创建一个新的虚拟网桥(命名为docker0),然后将主机上的所有Docker容器的虚拟网卡接口连接到这个虚拟网桥上。每个容器的虚拟网卡接口都包含一个MAC地址和一个唯一的IP地址,这些信息用于标识和路由容器之间的数据包。

  • 此外,Docker的Bridge网络驱动会自动在宿主机上安装好防火墙规则,隔离开不同网桥之间的直接通信,以确保安全性。Bridge网络适用于同一个Docker daemon宿主机下的容器。对于不同主机之间的通信,可以在操作系统层面设置路由规则,或者使用overlay网络等其他网络模式。

  • 主机可以和容器通信,容器之间也可以相互通信

  • 安装docker时会自动创建一个docker0网桥,运行容器时,你可以使用选项指定容器应连接到哪个
    网络
    否则Docker守护程序默认将容器连接到docker0虚拟网桥通过docker0网桥以及Iptables nat表配置与宿主机通信。

  • Docker 随机分配一个本地未占用的私有网段(在 RFC1918 中定义)中的一个地址给docker0 接口此后启动的容器内的网口也会自动分配一个同一网段的地址docker0的IP地址则为容器的默认网关在主机上创建一对虚拟网卡vethpair设备Docker将veth pair设备的端放在新创建的容器中并命名为eth0(容器的网卡)另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中(bridge模式示意图如下图所示)

  • 在这里插入图片描述

[root@server ~]# docker run -d -it --name linux-ubuntu --net=bridge ubuntu
[root@server ~]# docker inspect linux-ubuntu | grep -i network"NetworkMode": "bridge","NetworkSettings": {"Networks": {"NetworkID": "69cf9fe45652f27db873a0f1dbcc7f36b7357af33884f51356c4c38f41ca5181",

none模式

  • 使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、业、路由等信息,只有lo网络接口。需要我们自己为Docker容器添加网卡、配置IP地址等。
  • 不参与网络通信运行于此类容器中的进程仅能访问本地回环接口;仅适用于进程无须网络通信的场景中,例如:备份、进程诊断及各种离线任务等。None模式示意图如下所示:
  • 在这里插入图片描述
[root@server ~]# docker run -d --name linux-ubuntu --network=none ubuntu
c2d71a8545314dbf2ef8d936e8c69dc34c02296ecf6c5585d40258ade4e47a80
[root@server ~]# docker inspect linux-ubuntu | grep -i network"NetworkMode": "none","NetworkSettings": {"Networks": {"NetworkID": "fa566b41018a2edff899c8bf0b3f275a6726582276241e912d96fc48b626693a",
[root@server ~]#

host模式

  • 如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个NetworkNamespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。Host模式示意图如下所示:
  • 在这里插入图片描述
[root@server ~]# docker run -it --name linux-ubuntu -d --net=host ubuntu
64bf40afc85615e1af24de8e5062a044e9dd8f4e9149d9b06e2015d6e2aab098
[root@server ~]# docker inspect linux-ubuntu | grep -i network"NetworkMode": "host","NetworkSettings": {"Networks": {"NetworkID": "211a8fdf9c39a6ebbbd74c3b88e3e682a645f2d553bb21f8d2f6005fd84582a1",
[root@server ~]#

container模式

Container模式的示例可以如下进行:

首先,我们创建一个新的容器,并默认使用Bridge模式(这也是Docker的默认网络模式)。我们将使用busybox镜像来创建一个名为bb的容器:

docker run -itd --name bb busybox

接下来,我们要创建另一个容器,这次我们将使用Nginx镜像,并通过--net container:bb参数指定它的网络模式为Container模式,让它和之前创建的bb容器共享相同的网络命名空间:

docker run -d --name nginx-container --net=container:bb nginx

这条命令会启动一个新的Nginx容器,并将其网络配置设置为与bb容器相同。现在,nginx-container和bb容器将共享相同的IP地址和端口范围,它们之间的进程可以通过lo网卡设备进行通信。
在这里插入图片描述

[root@server ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS          PORTS                                     NAMES
630a7fa66f4c   nginx:latest   "/docker-entrypoint.…"   53 minutes ago   Up 53 minutes   0.0.0.0:32770->80/tcp, :::32770->80/tcp   web1
[root@server ~]# docker run -d --name linux-ubuntu --network=container:web1 ubu
ntu
2738e0fec3c329d77b53d08ef04b79650d08dc09cd58db735ccceb9bc2b47379
[root@server ~]# docker inspect linux-ubuntu | grep -i network"NetworkMode": "container:630a7fa66f4cffb7c17887295af442d8c3fd45e3c5fe9b5497f127474d2cf594","NetworkSettings": {"Networks": {}
[root@server ~]#

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

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

相关文章

Open CASCADE学习|显示文本

目录 1、修改代码 Viewer.h: Viewer.cpp: 2、显示文本 OpenCasCade 你好啊 霜吹花落 1、修改代码 在文章《Open CASCADE学习|显示模型》基础上,增加部分代码,实现对文本显示的支持,具体如下: Viewer…

从数据页的角度看 B+ 树

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) 大家背八股文的时候,都知道 MySQL 里 InnoDB 存储引擎是采用 B 树来组织数据的。 这点没错,但是大家知道 B 树里的节点里存放的是什么呢?查询数据的过程又是怎样的&am…

填补市场空白,Apache TsFile 如何重新定义时序数据管理

欢迎全球开发者参与到 Apache TsFile 项目中。 刚刚过去的 2023 年,国产开源技术再次获得国际认可。 2023 年 11 月 15 日,经全球最大的开源软件基金会 ASF 董事会投票决议,时序数据文件格式 TsFile 正式通过,直接晋升为 Apache T…

【C++从练气到飞升】05---运算符重载

🎈个人主页:库库的里昂 ✨收录专栏:C从练气到飞升 🎉鸟欲高飞先振翅,人求上进先读书。 目录 ⛳️推荐 一、运算符重载的引用 二、运算符重载 三、赋值运算符重载 1 .赋值运算符重载格式: 2 .赋值运算符只能重载成…

【智能算法】飞蛾扑火算法(MFO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2015年,Mirjalili等人受到飞蛾受到火焰吸引行为启发,提出了飞蛾算法(Moth-Flame Optimization,MFO)。 2.算法原理 2.1算法思想 MFO基于自然界中飞蛾寻找光源的…

Qt读取本地系统时间的几种方式

一,使用Windows API函数GetLocalTime(精确到毫秒) typedef struct _SYSTEMTIME //SYSTEMTIME结构体定义 {   WORD wYear;//年   WORD wMonth;//月   WORD wDayOfWeek;//星期,0为星期日,1为星期一&#xff0c…

PCL ICP配准高阶用法——统计每次迭代的配准误差并可视化

目录 一、概述二、代码实现三、可视化代码四、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 在进行论文写作时,需要做对比实验,来分析改进算法的性能,期间用到了迭代误差分布统计的比较分析,为直…

Claude 3似乎比GPT-4性能更高,更多的人在尝试使用它

Anthropic 是 OpenAI 的主要竞争对手之一,于 3 月初推出了其最新的大型语言模型 (LLM),称为 Claude 3。事实证明,Claude 3 的性能优于 OpenAI 的旗舰产品 GPT-4,这让 AI 社区感到惊讶,这标志着 GPT-4 的第一个实例被超…

Java只有中国人在搞了吗?

还是看你将来想干啥。想干应用架构,与Java狗谈笑风生,沆瀣一气,你就好好写Java,学DDD,看Clean Architecture。你想成为炼丹玄学工程师,年入百万,就选python,专精各种paper。你不在意…

对话李喆:Martech在中国需要转化成以客户需求为驱动的模式

关于SaaS模式在中国的发展,网上出现多种声音。Marteker近期采访了一些行业专家,围绕SaaS模式以及Martech在中国的发展提出独特观点。赛诺贝斯副总裁李喆认为,SaaS可以分为场景化的SaaS、一体化的SaaS和功能化的SaaS,三者都有一定规…

【vue3学习之路(一)】

文章目录 前言一、vue3项目创建1.1环境准备1.1.1 基于 vue-cli 创建(脚手架创建)1.1.2 基于 vite 创建(推荐) 二、熟悉流程总结 前言 参考视频:https://www.bilibili.com/video/BV1Za4y1r7KE?p10&spm_id_frompag…

辅助功能IOU(交并比)_3.2

实现两个目标框的交并比候选框在多目标跟踪中的表达方式及相应转换方法 IOU(Intersection over Union),“交并比”,是计算机视觉和图像处理中常用的一个评价指标,尤其在目标检测任务中用来衡量模型预测的目标框与真实目标框的重合程度。 具体…

(附源码)基于Spring Boot + Vue的招聘平台设计与实现

前言 💗博主介绍:✌专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2024年Java精品实战案例《100套》 🍅文末获取源码联系🍅 &#x1f31…

服务消费微服务

文章目录 1.示意图2.环境搭建1.创建会员消费微服务模块2.删除不必要的两个文件3.检查父子模块的pom.xml文件1.子模块2.父模块 4.pom.xml 添加依赖(刷新)5.application.yml 配置监听端口和服务名6.com/sun/springcloud/MemberConsumerApplication.java 创…

【windows】安装 Tomcat 及配置环境变量

👨‍🎓博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…

【大模型】VS Code(Visual Studio Code)上安装的扩展插件用不了,设置VS Code工作区信任

文章目录 一、找到【管理工作区信任】二、页面显示处于限制模式,改为【信任】三、测试四、总结 【运行环境】win 11 相关文章: 【大模型】直接在VS Code(Visual Studio Code)上安装CodeGeeX插件的过程 【问题】之前在 VS Code上安装 CodeGeeX 插件后&…

Linux命令学习入门

文章目录 登录注销关机重启Vim编辑器快捷键文件目录类打包、解包、压缩和解压指令输出重定向>和追加>>指令时间日期类搜索查找类用户管理文件所有者所在组权限管理变更权限crond任务时间调度crond相关指令:特殊符号说明: at定时任务磁盘分区磁盘…

记录三菱:Works2-FB块

创建一个FB块,启保停,定义输入输出引脚,注意这里的数据类型是Bit 打开主程序,将FB块拖出来 启保停:加入时间设定,时间显示倒着

基于C/C++的easyx实现贪吃蛇游戏

文章目录: 一:运行效果 1.演示 2.思路和功能 二:代码 文件架构 Demo 必备知识:基于C/C的easyx图形库教程 一:运行效果 1.演示 效果图◕‿◕✌✌✌ 基于C/C的easyx实现贪吃蛇游戏运行演示 参考:【C语…

Oracle:ORA-01830错误-更改数据库时间格式

1,先把报错SQL语句拿出来执行,看看是不是报的这个错 ORA-01830: 日期格式图片在转换整个输入字符串之前结束 2,然后查看默认日期格式是不是“YYYY-MM-DD HH24:MI:SS”(正确格式)。; 执行: SELECT * FRO…