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 --help

Usage:  docker volume COMMAND

Manage volumes

Commands:
  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove unused local volumes
  rm          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.mfbz.cn/a/490682.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LangChain-Chatchat

文章目录 关于 LangChain-Chatchat特性说明实现原理文档处理流程技术路线图(截止0.2.10) 使用 关于 LangChain-Chatchat Langchain-Chatchat(原Langchain-ChatGLM)基于 Langchain 与 ChatGLM 等语言模型的本地知识库问答。 gith…

阿赵UE学习笔记——21、武器插槽

阿赵UE学习笔记目录 大家好,我是阿赵。   继续学习虚幻引擎的使用,这次来看看骨骼插槽的用法。 一、准备资源 这次的目的很简单,就是给之前做了角色蓝图的钢铁侠手上加一把枪。   所以先要找到枪的资源。在虚幻商城里面搜索weapon&#…

Transformer 模型中增加一个 Token 对计算量的影响

Transformer 模型中增加一个 Token 对计算量的影响 Transformer 模型中增加一个 Token 对计算量的影响1. Transformer 模型简介2. Token 对计算量的影响3. 增加一个 Token 的计算量估算4. 应对策略5. 结论 Transformer 模型中增加一个 Token 对计算量的影响 Transformer 模型作…

【二】TensorFlow神经网络模型构建之卷积函数

卷积函数是构建神经网络的重要支架,是在一批图像上扫描的二维过滤器。 tf.nn.convolution(input,filter,padding,stridesNone,dilation_rateNone,nameNone,data_formatNone)该函数计算N维卷积的和。tf.nn.conv2d(input,filter,padding,strides,use_cudnn_on_gpuNon…

前端学习<二>CSS基础——02-CSS属性:背景属性

background 的常见背景属性 css2.1 中,常见的背景属性有以下几种:(经常用到,要记住) background-color:#ff99ff; 设置元素的背景颜色。 background-image:url(images/2.gif); 将图像设置为背景。 background-repeat…

201812 CSP认证 | CIDR合并

CIDR合并 难是真的不难但是也写了我几个小时服了 这道题在有计网的基础上就很好理解了&#xff0c;没有在格式上有任何刁难你的。这里不讲背景了 官网提交结果以及满分代码如下&#xff1a; #include<bits/stdc.h> using namespace std; typedef long long ll; typedef…

鸿蒙开发实例:【demo-搜索历史记录】

图片演示效果&#xff1a; 鸿蒙OS开发更多内容↓点击HarmonyOS与OpenHarmony技术鸿蒙技术文档开发知识更新库gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md在这。或mau123789学习&#xff0c;是v喔 代码演示&#xff1a; // 注&#xff1a;当前代码基于宽度为…

【Leetcode】top 100 二叉树

基础知识补充 完全二叉树&#xff1a;顺序存储&#xff08;数组&#xff09; 非根节点的父节点序号floor((i-1)/2) 序号i的左孩子节点序号2*i1 右孩子节点序号2*i2 一般二叉树&#xff1a;链式存储 结构&#xff1a;left指针指向左子节点&#xff0c;right指针指向右子节点&am…

vue3+threejs新手从零开发卡牌游戏(十五):创建对方场地和对方卡组

首先创建对方场地&#xff0c;game/site/p2.vue和p1.vue代码一样&#xff0c;注意把里面的命名“己方”修改成“对方”&#xff0c;game/site/index.vue代码如下&#xff0c;用rotateZ翻转一下即可得到镜像的对方场地&#xff1a; // 添加战域plane const addSitePlane () >…

Leetcode 76 最小覆盖子串 java版

官网链接&#xff1a; . - 力扣&#xff08;LeetCode&#xff09; 1. 问题&#xff1a; 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 "" 。 注意&#xff1a; 对于 …

【项目管理——时间管理】【自用笔记】

1 项目时间管理&#xff08;进度管理&#xff09;概述 过程&#xff1a;&#xff08;2—6&#xff09;为规划过程组&#xff0c;7为监控过程组 题目定义&#xff1a;项目时间管理又称为进度管理&#xff0c;是指确保项目按时完成所需的过程。目标&#xff1a;时间管理的主要目标…

FlyControls 是 THREE.js 中用于实现飞行控制的类,它用于控制摄像机在三维空间中的飞行。

demo演示地址 FlyControls 是 THREE.js 中用于实现飞行控制的类&#xff0c;它用于控制摄像机在三维空间中的飞行。 入参&#xff1a; object&#xff1a;摄像机对象&#xff0c;即要控制的摄像机。domElement&#xff1a;用于接收用户输入事件的 HTML 元素&#xff0c;通常…

蓝桥杯刷题8

1. 世纪末的星期 import java.util.Calendar; public class Main {public static void main(String[] args) {Calendar calendar Calendar.getInstance();for(int year 1999;year<100000;year100){calendar.set(Calendar.YEAR,year);calendar.set(Calendar.MONTH,11);cale…

力扣hot100:207. 课程表

这是一道拓扑排序问题&#xff0c;也可以使用DFS判断图中是否存在环。详情请见&#xff1a;官方的BFS算法请忽略&#xff0c;BFS将问题的实际意义给模糊了&#xff0c;不如用普通拓扑排序思想。 数据结构&#xff1a;图的拓扑排序与关键路径 拓扑排序&#xff1a; class Sol…

手撕算法-三数之和

描述 分析 排序双指针直接看代码。 代码 public static List<List<Integer>> threeSum(int[] nums) {Arrays.sort(nums);List<List<Integer>> res new ArrayList<>();for(int k 0; k < nums.length - 2; k){if(nums[k] > 0) break; …

通讯录管理系统实现(C++版本)

1.菜单栏的设置 &#xff08;1&#xff09;我么自定义了一个showmenu函数&#xff0c;用来打印输出我们的菜单栏&#xff1b; &#xff08;2&#xff09;菜单栏里面设置一些我们的通讯录里面需要用到的功能&#xff0c;例如增加联系人&#xff0c;删除联系人等等 2.退出功能…

【Python系列】Python 中 YAML 文件与字典合并的实用技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

MySQL数据库------------探索高级SQL查询语句

目录 一、常用查询 1.1按关键字排序 1.2简单的select条件查询(where) 二、排序 2.1升序排列 2.2降序排序 三、order by 查询结果排序 ①order by还可以结合where进行条件过滤&#xff0c;筛选地址是哪里的学生按分数降序排列 ②查询学生信息先按hobbyid降序排列&#…

面试官问我 ,try catch 应该在 for 循环里面还是外面?

首先 &#xff0c; 话说在前头&#xff0c; 没有什么 在里面 好 和在外面好 或者 不好的 一说。 本篇文章内容&#xff1a; 使用场景 性能分析 个人看法 1. 使用场景 为什么要把 使用场景 摆在第一个 &#xff1f; 因为本身try catch 放在 for循环 外面 和里面 &#…

(一)whatsapp 语音通话基本流程

经过了一整年的开发测试&#xff0c;终于将whatsapp 语音通话完成&#xff0c;期间主要参考webrtc的源码来实现.下面简要说一下大致的步骤 XMPP 协商 发起或者接受语音通话第一步是发起XMPP 协商&#xff0c;这个协商过程非常重要。下面是协商一个包 <call toxxxs.whatsap…