首页 > 其他分享 >docker细节上的一些验证

docker细节上的一些验证

时间:2023-10-14 12:32:37浏览次数:34  
标签:验证 ivlan vm value 133 细节 docker root

  • 命名空间
  • 网络命名空间
  • 文件相关
  • 容器网络

1 命名空间

docker ps
docker inspect 〈ID or NAME〉
docker inspect ivlan_test43

"Pid": 6338,

root@vm-133:~# ls -l /proc/6338/ns
total 0
lrwxrwxrwx 1 root root 0 Oct 13 15:49 cgroup -> 'cgroup:[4026532870]'
lrwxrwxrwx 1 root root 0 Oct 13 15:49 ipc -> 'ipc:[4026532810]'
lrwxrwxrwx 1 root root 0 Oct 13 15:49 mnt -> 'mnt:[4026532808]'
lrwxrwxrwx 1 root root 0 Oct 13 15:32 net -> 'net:[4026532813]'
lrwxrwxrwx 1 root root 0 Oct 13 15:49 pid -> 'pid:[4026532811]'
lrwxrwxrwx 1 root root 0 Oct 13 16:04 pid_for_children -> 'pid:[4026532811]'
lrwxrwxrwx 1 root root 0 Oct 13 15:49 time -> 'time:[4026531834]'
lrwxrwxrwx 1 root root 0 Oct 13 16:04 time_for_children -> 'time:[4026531834]'
lrwxrwxrwx 1 root root 0 Oct 13 15:49 user -> 'user:[4026531837]'
lrwxrwxrwx 1 root root 0 Oct 13 15:49 uts -> 'uts:[4026532809]'

docker细节上的一些验证_Docker

docker细节上的一些验证_docker_02

2 网络命名空间

root@vm-133:~# docker inspect 8e70627e2871 | jq -r '.[] | {State: .State.Pid, NetworkSettings: {SandboxID: .NetworkSettings.SandboxID, SandboxKey: .NetworkSettings.SandboxKey, EndpointID: (.NetworkSettings.Networks | to_entries[0].value.EndpointID)}}'
{
  "State": 6338,
  "NetworkSettings": {
    "SandboxID": "fdfa3bb6c99124f08b6b49d9bf71ad32e50872604daa0e61f6edc335ef46bd23",
    "SandboxKey": "/var/run/docker/netns/fdfa3bb6c991",
    "EndpointID": "13c6db40e824e45fa568eea2b9fc05cae7bf840f7c24f6b7a52ede02a70de921"
  }
}

docker细节上的一些验证_网络接口_03

docker细节上的一些验证_docker_04

3 文件

在 Docker 中,/var/lib/docker/containers 和 /var/lib/docker/overlay2 ,它们分别用来存储 Docker 容器的数据和 Docker 镜像的数据。

  • /var/lib/docker/containers:这个目录包含了所有的 Docker 容器的数据。每个容器都有一个对应的目录,目录的名称是容器的 ID。在每个容器的目录中,你可以找到一些文件和目录,包括容器的配置文件(config.v2.json)、容器的日志文件(<container-id>-json.log)、容器的运行时状态等。
  • /var/lib/docker/overlay2:这个目录则用来存储 Docker 镜像的数据。Docker 使用了 Union File System(联合文件系统)来存储镜像,其中的每一层都存储在一个单独的目录中。这些目录的名称是长的哈希值,这些哈希值对应于 Docker 镜像的每一层。在每个目录中,你可以找到 diff 目录,该目录包含了这一层中文件的实际内容;link 文件,该文件包含了这一层的短 ID;以及 lower 文件,该文件包含了这一层下面所有层的短 ID。
root@vm-133:~# docker ps
CONTAINER ID   IMAGE     COMMAND     CREATED          STATUS          PORTS     NAMES
36ff97d8b002   alpine    "/bin/sh"   48 minutes ago   Up 48 minutes             ivlan_test44
8e70627e2871   alpine    "/bin/sh"   2 hours ago      Up 2 hours                ivlan_test43
ce8444aaf7bb   alpine    "/bin/sh"   6 hours ago      Up 6 hours                ivlan_test5
556527deebaf   alpine    "/bin/sh"   6 hours ago      Up 6 hours                ivlan_test4
f53bc31a686c   alpine    "/bin/sh"   6 hours ago      Up 6 hours                ivlan_test3
root@vm-133:~# docker exec ivlan_test43 cat /etc/hostname
8e70627e2871
root@vm-133:~# docker exec 8e70627e2871 cat /etc/hostname
8e70627e2871
root@vm-133:~# cat /var/lib/docker/containers/8e70627e287189b505902d9a905df90b5e720acac0d2fb2277775fec8e9a0088/hostname
8e70627e2871

root@vm-133:~# tree /var/lib/docker/containers/8e70627e287189b505902d9a905df90b5e720acac0d2fb2277775fec8e9a0088
/var/lib/docker/containers/8e70627e287189b505902d9a905df90b5e720acac0d2fb2277775fec8e9a0088
├── 8e70627e287189b505902d9a905df90b5e720acac0d2fb2277775fec8e9a0088-json.log
├── checkpoints
├── config.v2.json
├── hostconfig.json
├── hostname
├── hosts
├── mounts
├── resolv.conf
└── resolv.conf.hash

2 directories, 7 files

docker细节上的一些验证_docker_05

docker细节上的一些验证_网络接口_06

4 网络

在 Linux 系统中,/sys/class/net/<interface> 目录包含了关于网络接口的一些信息,其中 ifindex 和 iflink 是两个很重要的文件。

  • /sys/class/net/<interface>/ifindex:这个文件包含了网络接口的索引。这是一个在系统中唯一的整数,用来唯一标识一个网络接口。这个值是由内核分配的,每当创建一个新的网络接口时,内核都会分配一个新的 ifindex 值。
  • /sys/class/net/<interface>/iflink:这个文件包含了网络接口的链接索引。对于大多数网络接口来说,这个值和 ifindex 是相同的。但是对于一些特殊的网络接口,比如 veth 接口或 macvlan 接口,这个值表示的是对端接口的 ifindex 值
ip add show

20: veth1c15c3a@if19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
    link/ether ce:88:c5:fa:0d:56 brd ff:ff:ff:ff:ff:ff link-netnsid 7
    inet6 fe80::cc88:c5ff:fefa:d56/64 scope link
       valid_lft forever preferred_lft forever
root@vm-133:~# cat  /sys/class/net/veth1c15c3a/ifindex
20
root@vm-133:~# cat  /sys/class/net/veth1c15c3a/iflink
19
root@vm-133:~# docker exec -it ivlan_test45 sh
/ #  cat  /sys/class/net/eth0/ifindex
19
/ #  cat  /sys/class/net/eth0/iflink
20

也就是说 veth1c15c3a@if19  与容器中ifindex为20的是一对,bridge网络模式下每个容器的iflink号都是不一样的

而IPVlan模式下是一样的,因为工用一个mac地址

root@vm-133:~# docker network  ls
NETWORK ID     NAME        DRIVER    SCOPE
b3a3736da342   bridge      bridge    local
a0d241cafaa3   host        host      local
bc6a5d21f2a5   ipvlan30    ipvlan    local
76bbb910822f   ipvlan110   ipvlan    local
a7f59c059434   none        null      local
root@vm-133:~#  docker inspect ipvlan30 | jq -r '.[] | .Containers | to_entries[] | {Name: .value.Name, MacAddress: .value.MacAddress, IPv4Address: .value.IPv4Address, Options: .value.Options}'
{
  "Name": "ivlan_test4",
  "MacAddress": "",
  "IPv4Address": "192.168.30.3/24",
  "Options": null
}
{
  "Name": "ivlan_test3",
  "MacAddress": "",
  "IPv4Address": "192.168.30.2/24",
  "Options": null
}
root@vm-133:~#  docker inspect ipvlan110 | jq -r '.[] | .Containers | to_entries[] | {Name: .value.Name, MacAddress: .value.MacAddress, IPv4Address: .value.IPv4Address, Options: .value.Options}'
{
  "Name": "ivlan_test5",
  "MacAddress": "",
  "IPv4Address": "192.168.110.2/24",
  "Options": null
}
root@vm-133:~#  docker inspect bridge | jq -r '.[] | .Containers | to_entries[] | {Name: .value.Name, MacAddress: .value.MacAddress, IPv4Address: .value.IPv4Address, Options: .value.Options}'
{
  "Name": "ivlan_test44",
  "MacAddress": "02:42:ac:11:00:03",
  "IPv4Address": "172.17.0.3/16",
  "Options": null
}
{
  "Name": "ivlan_test45",
  "MacAddress": "02:42:ac:11:00:02",
  "IPv4Address": "172.17.0.2/16",
  "Options": null
}
root@vm-133:~# docker ps -qa |xargs -i docker exec {} cat  /sys/class/net/eth0/iflink
20
18
2
2
2
root@vm-133:~# docker ps -qa |xargs -i docker exec {} cat  /sys/class/net/eth0/ifindex
19
17
14
13
12


标签:验证,ivlan,vm,value,133,细节,docker,root
From: https://blog.51cto.com/first01/7860245

相关文章

  • 博学谷学习记录 自我总结 用心分享 | Docker容器化
    前言容器技术、虚拟化技术已经成为一种被大家广泛认可的服务器资源共享方式,容器技术可以在按需构建操作系统实例的过程当中为系统管理员提供极大的灵活性。由于hypervisor虚拟化技术仍然存在一些性能和资源使用效率方面的问题,因此容器技术(Container)结合虚拟化技术的解决方案正在......
  • 使用 Docker 在 Linux 上运行 Delphi 应用程序
     从RadStudio10.2Tokyo开始,可以编译和运行Linux服务器应用程序(无用户界面)。我们将使用Ubuntu准备一个docker映像,以及通过PAServer在Linux上运行Delphi应用程序所需的一切。使用Docker,我们可以将这些应用程序在Linux容器中部署到我们的生产系统中。从建立一......
  • label-studio docker-compose 运行试用
    label-studio是一个支持多格式的数据标注工具,以下是基于docker-compose运行的试用环境准备docker-composeversion:"3.9"services:nginx:image:heartexlabs/label-studio:latestports:-"8080:8085"-"8081:8086"......
  • Docker配置Oracle
    1.下载镜像dockerpullregistry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g2.创建并启动容器默认启动方式dockerrun-itd-p1521:1521--nameoracle--restart=alwaysregistry.aliyuncs.com/helowin/oracle_11g持久化启动方式dockerrun-itd-p1521:1521-......
  • 使用PasteSpider把你的代码升级到服务器的Docker/Podman上,K8S太庞大,PasteSpider极易上
    如果你的服务器的内存小于16GB,那么K8S就和你无缘了,但是你可以使用PasteSpider来实现发布你的项目到服务器上!PasteSpider是一个运维工具,使用NET编写的,部署于服务器的Docker/Podman上,他可以帮助你把你的项目发布到服务器上,支持源码模式,支持发布模式,支持一键发布!下面基于实际案例做......
  • docker搭建gitlab,集成CI/CD(gitlab-runner)
    搭建gitlab和gitlab-runner首先配置GITLAB_HOMEexportGITLAB_HOME=/srv/gitlab如果你是在BASH下,可以将以上配置放到~/.bash_profile文件中,使用source~/.bash_profile使其永久生效。dockerrun--detach\--hostname192.168.1.205\--publish9443:443--publish9......
  • Loadrunner12.5-录制http://www.gw.com.cn/网页时提示“SSL身份验证失败”错误
    问题:LR产品,录制http://www.gw.com.cn/网页时提示下图错误,这是为什么呢?请在如下recordingoptions中选择正确的SSL版本,再进行录制。注:如何确定那个SSL版本是正确的呢?答:需要与网站这边进行确认,问他们网站使用的SSL版本是多少? ......
  • 搭建Halo博客教程(阿里云 Docker)
    搭建Halo博客教程(阿里云Docker)购买阿里云服务器ECS在阿里云购买需要的服务器ECS这里选择安装的操作系统CentOS8.264位连接阿里云的服务器用SSH客户端进行连接服务器用PuTTY进行连接服务器打开阿里云控制台服务器ECS第一次创建的服务器要进行重置实例......
  • Docker dnmp 多版本php安装 php8.2
    Laravel9开发需要用到php8.1以上的版本,而dnmp只支持到php8.0。安装php8.2的步骤如下: 1.从/services/php80目录复制一份出来,重命名为php82,extensions目录只保留 install.sh和 install-php-extensions这两个文件 2.修改.env文件,添加php82的配置参数:##PHP82##......
  • 深入探讨 C# 和 .NET 中 async/await 的历史、背后的设计决策和实现细节
    前言对`async/await`的支持已经存在了十多年。它的出现,改变了为.NET编写可伸缩代码的方式,你在不了解幕后的情况下也可以非常普遍地使用该功能。从如下所示的同步方法开始(此方法是“同步的”,因为在整个操作完成并将控制权返回给调用方之前,调用方将无法执行任何其他操作)://Syn......