docker网络(代码片段)

@Kerry~ @Kerry~     2022-12-15     287

关键词:

服务器的基本网络 

Lo: 表示本机回环地址

eth0: 表示阿里云内网(私网)地址

docker0: 表示docker的网络地址(Docker的网卡),只要安装了Docker就会有的。

理解Docker0

Docker0就是docker 的网卡,只要安装了Docker就会自带Docker0。

Docker如何处理容器网络访问?

思考问题:我们宿主机是如何和docker容器进行网络通信,意思就是docker如何处理容器网络访问?

例如:我们在docker 上面运行运行了一个项目,访问项目需要先经过宿主机,再由到容器里面的。

先查看本机网络环境: ip addr

运行一个容器
docker run -d --name mycentos01 centos /bin/sh -c “while true;do echo ymb;sleep 20;done”;

[root@iZ2ze4zc54bfy36wjglfqsZ ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS       PORTS     NAMES
fcf812b93aef   centos    "/bin/bash"              2 hours ago   Up 2 hours             mycentos02
15fdfd378264   centos    "/bin/sh -c 'while t…"   2 hours ago   Up 2 hours             mycentos01

查看容器里面的网络  docker exec -it 容器ID ip addr

[root@iZ2ze4zc54bfy36wjglfqsZ ~]# docker exec -it 15fdfd378264 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
14: eth0@if15: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
    valid_lft forever preferred_lft forever


发现容器启动会得到一个新的网络地址:14: eth0@if15 ip地址:172.18.0.2 这个是由docker0所分配的

这时候我们再次查看宿主机的网络。发现宿主机也新增加了一个网络地址。

ip addr 

[root@iZ2ze4zc54bfy36wjglfqsZ ~]# ip addr
15: vethb45f56f@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether fe:c2:fe:1a:50:5d brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::fcc2:feff:fe1a:505d/64 scope link 
       valid_lft forever preferred_lft forever


我们由下面的图可以知道 宿主机上面的也产生了 15: vethb45f56f@if14 网络地址。发现这两个网卡居然是一对的。

我们再次启动一个容器测试
docker run -d --name mycentos02 centos /bin/sh -c "while true;do echo hel;sleep 10;done;"

[root@iZ2ze4zc54bfy36wjglfqsZ ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS       PORTS     NAMES
fcf812b93aef   centos    "/bin/bash"              2 hours ago   Up 2 hours             mycentos02

查看容器网络
[root@iZ2ze4zc54bfy36wjglfqsZ ~]# docker exec -it fcf812b93aef ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
16: eth0@if17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.18.0.3/16 brd 172.18.255.255 scope global eth0
       valid_lft forever preferred_lft forever

我们会发现出现:16: eth0@if17 ip为:172.18.0.3 网卡

这个时候我们再次查看宿主机里面的网卡地址
[root@iZ2ze4zc54bfy36wjglfqsZ ~]# ip addr
17: veth8d0f47d@if16: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether 32:ab:7e:22:70:82 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::30ab:7eff:fe22:7082/64 scope link 
       valid_lft forever preferred_lft forever

我们会发现:宿主机里面的也是存在 17: veth8d0f47d@if16 网卡

这就是证明这些网卡是一对对出现的,并且相互绑定。

  这个时候我们思考一个问题:宿主机Linux能不能 ping 容器内部呢?

经过实验:答案是可以ping通的。

 思考一个问题:为什么Linux能够可以 ping 通 docker 容器内部?
原理:我们每启动一个docker容器,docker就会给docker容器分配一个ip(网络地址:172.18.0.2),其次是docker0,我们只要安装了docker,就会有一个网卡docker0,而这个docker0使用的是Linux的桥接模式,使用的技术veth-pair技术!

什么是veth-pair技术?

在上面我们发现容器带来的网卡和宿主机是一对对的。

veth-pair 就是一对的虚拟设备接口,他们都是成对出现的,一端连接着协议,一端彼此相连

正是因为有这个特性,veth-pair 充当一个桥梁,连接各种虚拟网络设备。

例如:Docker容器之间的连接。

 

我们再次测试一下:mycentos01 和 mycentos02 能否相互ping通呢?

答案是可以pinh通的。

 绘画一个网络图:大家就知道是什么意思了。

结论:mycentos01 和 mycentos02 是公用一个路由器(网络),就是docker0,通过docker0来转发,所有的容器不指定网络的情况下,都是docker0 路由的,docker会给我们的容器分配一个默认可用IP地址。

关于docker网络的小结:

Docker使用的是Linux的桥接,宿主机中是一个Docker容器的网桥 就是Docker0

Docker中的所有网络接口都是虚拟的。虚拟的转发效率高!

只要删除容器,对应的网桥(网卡)一对就自动消除。 

docker网络(代码片段)

...示本机回环地址eth0:表示阿里云内网(私网)地址docker0:表示docker的网络地址(Docker的网卡),只要安装了Docker就会有的。理解Docker0Docker0就是docker的网卡,只要安装了Docker就会自带Docker0。Docker如何处理容... 查看详情

docker——网络配置(代码片段)

目录本次目标:一、Docker网络配置1.bridge模式(默认模式)2.host模式二、bridge模式三、host模式 网络模式与数据卷容器挂载的操作四、如何创建自定义网络 本次目标:Docker网络配置Docker部署SpringCloud项目一、Docker网络配置Doc... 查看详情

docker网络与容器互联(代码片段)

@[TOC]#Docker网络与容器互联资源推荐Docker官网配置网络:https://docs.docker.com/network/Docker网络详解:https://blog.csdn.net/meltsnow/article/details/94490994Docker四种网络模式:https://www.jianshu.com/p/22a7032bb7bd使用网络网络驱动名称 查看详情

docker下网络的认识与实验(代码片段)

Docker下网络的认识与实验一、简述Docker的网络二、docker四大网络类型+自定义网络三、docker网络模式详细说明1、container模式2、none模式3、Host模式4、bridge模式5、自定义网络a、Docker自定义网络创建步骤一、简述Docker的网络Docker... 查看详情

容器化工具--------docker的网络操作(代码片段)

文章目录Docker网络操作Docker网络实现的原理Docker的网络模式host网络模式container模式none模式Bridge模式自定义网络Docker网络操作Docker网络实现的原理1.Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一... 查看详情

容器化工具--------docker的网络操作(代码片段)

文章目录Docker网络操作Docker网络实现的原理Docker的网络模式host网络模式container模式none模式Bridge模式自定义网络Docker网络操作Docker网络实现的原理1.Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一... 查看详情

docker网络(代码片段)

Docker网络ipaddr查看当前linux虚拟机的ip地址启动tomcat容器,查看其ip地址原理创建tomcat01和tomcat02,测试发现两个容器之间可以相互ping通小结Docker--link:添加主机名和ip的映射--link命令指定别名自定义网络查看所有的docker网络... 查看详情

hellodocker——docker网络(代码片段)

HelloDocker(四)——Docker网络一、DockerNetworkNameSpace1、DockerCNM网络模型Docker通过libnetwork实现CNM网络模型。CNM网络模型有三个组件:(1)Sandbox(沙盒),每个沙盒包含一个容器网络栈(networkstack)的配置,配置包括:容器的网口、路由... 查看详情

docker:四种网络模式(代码片段)

Docker四种网络模式四种网络模式摘自Docker网络详解及pipework源码解读与实践dockerrun创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式:host模式,使用--net=host指定。container模式,使用--net=container:NAMEorI... 查看详情

docker网络:bridge模式(代码片段)

本文转自https://www.freeaihub.com/article/bridge-module-in-docker-network.html,该页可在线运行以下实例在前两篇Docker网络:host模式,Docker网络:container模式中我们已经介绍Docker网络模型中的host模式与container模式。本节将对Docker网络模型中的brid... 查看详情

docker网络与存储(代码片段)

Docker的网络和存储1.1Docker的4种网络模式host模式众所周知,Docker使用了Linux的Namespaces技术来进行资源隔离,如PIDNamespace隔离进程,MountNamespace隔离文件系统,NetworkNamespace隔离网络等。一个NetworkNamespace提供了一份独立的网络环境,... 查看详情

docker容器网络(代码片段)

docker容器网络Docker在安装后自动提供3种网络,可以使用dockernetworkls命令查看[root@localhost~]#dockernetworklsNETWORKIDNAMEDRIVERSCOPEcd97bb997b84bridgebridgelocal0a04824fc9b6hosthostlocal4dcb8fbdb599nonenulllocalDocker使用Linu 查看详情

docker网络(代码片段)

docker的几种原生网络模式host:该模式下,容器将不会虚拟出自己的网卡,配置自己的IP等,而是共享Dockerhost的网络栈,容器的网络配置与Dockerhost完全一样None:该模式关闭了容器的网络功能,除了lo,没有其他任何网卡。Bridge:... 查看详情

强力的应用容器引擎——docker网络部分详解(代码片段)

Docker网络部分详解一、docker网络概述1.1docker网络实现的原理1.2docker的网络模式二、docker网络模式详解2.1host模式2.2container模式2.3none模式2.4bridge模式2.5自定义网络模式自定义网络模式创建步骤一、docker网络概述1.1docker网络实现的原... 查看详情

docker网络:host模式(代码片段)

本文转自https://www.freeaihub.com/article/host-module-in-docker-network.html,该页可在线运行当我们准备将Docker技术应用到生产级别的场景时,我们需要了解很多网络方面的知识。网络是Docker中相对比较薄弱的部分,我们有必要了解Docker的网络... 查看详情

docker网络原理详解(代码片段)

Docker网络原理理解docker0Dokcer是如何处理网络访问的[root@docker01~]#dockerrun-d-P--nametomcat01tomcat发现容器启动的时候会得到一个eth0@if32ip地址,这是docker分配的。#查看容器的内部网络地址[root@docker01~]#dockerexec-ittomcat01ipa1:l 查看详情

docker存储与网络(代码片段)

目录Docker存储挂载主机目录创建一个数据卷挂载一个宿主机目录作为数据卷数据卷容器创建一个数据卷容器利用数据卷容器迁移数据删除数据盘Docker网络简介bridge网络bridge网络基本用法基于bridge网络的容器访问外部网络外部网络... 查看详情

docker网络:container模式(代码片段)

本文转自https://www.freeaihub.com/article/container-module-in-docker-network.html,该页可在线运行案例在前一篇Docker网络:host模式中我们已经介绍Docker网络模型中的host模式。本节将对Docker网络模型中的host模型进行理论介绍,再通过案例的实操... 查看详情