Docker续6:容器网络

news2024/9/21 4:20:00

1.bridge-utils 

一个用于Linux系统的网络桥接工具集。它提供了一些命令行工具,帮助用户创建、管理和配置网络桥接。网络桥接是一种将多个网络接口连接在一起,以使它们能够作为单个网络段进行通信的技术。

bridge-utils 常用的命令包括:

brctl: 用于创建和管理网络桥接。
brctl show: 显示当前系统中的桥接和相关接口的信息。

[root@localhost ~]# docker run -d -p80:80 centos:nginx                 //没有命名,使用id来管理容器
03554f581adcfaea5c82e28d8ed1c45bc8b1b2f9f1d5a82fc3fb1c49470dad8c
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE             COMMAND                   CREATED          STATUS          PORTS                                       NAMES
03554f581adc   centos:nginx      "/bin/sh -c /usr/sbi…"   25 seconds ago   Up 25 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp           heuristic_hawking
[root@localhost ~]# docker inspect 03554|grep IPAdd                                 //查看IP
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.3",
                    "IPAddress": "172.17.0.3",
[root@localhost ~]# systemctl stop docker
Warning: Stopping docker.service, but it can still be activated by:
  docker.socket
[root@localhost ~]# yum -y install bridge-utils                      //下载bridge-utils

2.bridge:

所有容器连接到桥就可以使⽤外⽹,使⽤nat让容器可以访问外⽹
使⽤ ip a s指令查看桥,所有容器连接到此桥,ip地址都是172.17.0.0/16⽹段,桥是启动docker服务后出现

[root@localhost ~]# brctl show                               //显示当前系统中的桥接和相关接口的信息
bridge name    bridge id        STP enabled    interfaces
docker0        8000.0242189f6a83    no    
[root@localhost ~]# systemctl start docker                              //启动docker
[root@localhost ~]# docker start heuristic_hawking                    //启动容器
[root@localhost ~]# brctl show                              //显示当前系统中的桥接和相关接口的信息
bridge name    bridge id        STP enabled    interfaces
docker0        8000.0242189f6a83    no        veth3054cc4
[root@localhost ~]# docker network ls                            //查看桥
NETWORK ID     NAME      DRIVER    SCOPE
96680ca9ecd6   bridge    bridge    local
8380e18cdd2a   host      host      local
d8a046f15d90   none      null      local

多创建几个镜像,发现他们默认都是桥接模式的
[root@localhost ~]# docker run -d centos:nginx 
[root@localhost ~]# docker inspect 9c9c|grep IPAdd
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.3",
                    "IPAddress": "172.17.0.3",
[root@localhost ~]# docker run -d  centos:nginx 
[root@localhost ~]# docker inspect 1806|grep IPAdd
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.4",
                    "IPAddress": "172.17.0.4",
[root@localhost ~]# brctl show
bridge name    bridge id        STP enabled    interfaces
docker0        8000.0242189f6a83    no        veth1061d46
                                        veth3054cc4
                                        veth3c9ea62
每⼀台dcoker主机上的docker0所在⽹段完全⼀样,但是会造成跨主机的容器⽆法通信


3.host:

与主机共享⽹络,可让容器连接外⽹
所有容器与docker主机在同⼀个⽹络中,容器和外⽹相互访问
优点:可以直接访问容器
缺点:端⼝占⽤,多容器同时运⾏⼀个服务,不建议,在测试环境使⽤

[root@localhost ~]# docker run -it --network host centos:nginx /bin/bash         //绑定host主机网络,容器和宿主机共用一个IP
[root@localhost /]#                                                  //注意:这里是在容器的家目录里,而不是宿主机的家目录里
[root@localhost /]# ls
bin  etc   lib      lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
发现在容器内部访问ip是宿主机的IP
在外部查看不到IP


4.none:

容器仅仅有lo⽹卡,不能与外界链接,在⾼级应⽤中使⽤,lo⽹卡,⽆法链接外⽹


5.联盟⽹络 容器⽹络

跨主机容器之间通讯

(1)flannel介绍


(2)原理


(3)搭建

1)环境准备:

新建两台主机:
node1主控         192.168.1.78
node2被控         192.168.1.79


2)node1主控主机

[root@localhost ~]# yum -y install etcd flannel                        //安装etcd数据库,flannel
[root@localhost ~]# vim /etc/etcd/etcd.conf                             //修改etcd配置文件

[root@localhost ~]# systemctl start etcd.service               //启动服务
[root@localhost ~]# systemctl enable etcd.service            //开机自启
[root@localhost ~]# netstat -lntup|grep 2379                    //查看两个端口是否打开
tcp6       0      0 :::2379                 :::*                    LISTEN      1661/etcd           
[root@localhost ~]# netstat -lntup|grep 4001
tcp6       0      0 :::4001                 :::*                    LISTEN      1661/etcd  

[root@localhost ~]# etcdctl set a 100          //测试数据库功能
100
[root@localhost ~]# etcdctl get a                //访问数据
100
[root@localhost ~]# etcdctl -C http://192.168.1.78:4001 cluster-health          //查看集群是否健康
member 8e9e05c52164694d is healthy: got healthy result from http://192.168.1.78:2379
cluster is healthy
[root@localhost ~]# etcdctl -C http://192.168.1.78:2379 cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://192.168.1.78:2379
cluster is healthy
[root@localhost ~]# vim /etc/sysconfig/flanneld                 //修改flannel的配置文件


[root@localhost ~]# etcdctl mk /atomic.io/network/config '{ "Network" : "172.20.0.0/16" }'     //指定容器IP地址的分配
{ "Network" : "172.20.0.0/16" }
[root@localhost ~]# etcdctl get /atomic.io/network/config                               //查看是否存入成功
{ "Network" : "172.20.0.0/16" }
[root@localhost ~]# systemctl start flanneld.service                      //启动
[root@localhost ~]# systemctl enable flanneld.service                  //开机自启
[root@localhost ~]# ip a s                                        //这里看到分配:172.20.59.0
3: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1472 qdisc pfifo_fast state UNKNOWN group default qlen 500
    link/none 
    inet 172.20.59.0/16 scope global flannel0


安装docker
运行脚本source docker.sh
[root@localhost ~]# systemctl start docker.service                //启动docker
[root@localhost ~]# ip a s 
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
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 00:0c:29:6e:0c:3f brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.78/24 brd 192.168.1.255 scope global noprefixroute ens33
3: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1472 qdisc pfifo_fast state UNKNOWN group default qlen 500
    link/none 
    inet 172.20.59.0/16 scope global flannel0
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:1e:73:65:22 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
[root@localhost ~]# cat /run/flannel/subnet.env                      //查看flannel子网ip
FLANNEL_NETWORK=172.20.0.0/16
FLANNEL_SUBNET=172.20.59.1/24                                    //待会要用
FLANNEL_MTU=1472                                             //待会要用
FLANNEL_IPMASQ=false
[root@localhost ~]# vim /etc/docker/daemon.json                    //编辑docker.json文件

    "registry-mirrors": [
    "https://do.nark.eu.org",
    "https://dc.j8.work",
    "https://docker.m.daocloud.io",
    "https://dockerproxy.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.nju.edu.cn"
    ],

        "hosts": [
        "tcp://0.0.0.0:2375",
        "unix:///var/run/docker.sock"
    ],
        "bip" : "172.20.59.1/24",
        "mtu" : 1472          
}
[root@localhost ~]# vim /usr/lib/systemd/system/docker.service               //修改docker配置文件

[root@localhost ~]# systemctl daemon-reload                      //加载配置
[root@localhost ~]# systemctl restart docker                        //重启服务
[root@localhost ~]# ip a s                                  //这里看到docker网卡已经与flannel属于同一网段了
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
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 00:0c:29:6e:0c:3f brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.78/24 brd 192.168.1.255 scope global noprefixroute ens33
3: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1472 qdisc pfifo_fast state UNKNOWN group default qlen 500
    link/none 
    inet 172.20.59.0/16 scope global flannel0
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1472 qdisc noqueue state DOWN group default 
    link/ether 02:42:1e:73:65:22 brd ff:ff:ff:ff:ff:ff
    inet 172.20.59.1/24 brd 172.20.59.255 scope global docker0

测试IP地址:

[root@localhost ~]# docker pull centos                     //下载镜像
[root@localhost ~]# docker run -it centos:latest /bin/bash             //创建容器
[root@80ff4428d236 /]#
ctrl+p+q退出
[root@localhost ~]# docker inspect 80f|grep IPAdd            //这里看到容器的IP地址已经是flannel分配的了
            "SecondaryIPAddresses": null,
            "IPAddress": "172.20.59.2",
                    "IPAddress": "172.20.59.2",


3)node2被控主机

[root@localhost ~]# yum -y install flannel
[root@localhost ~]# vim /etc/sysconfig/flanneld

[root@localhost ~]# systemctl start flanneld.service 
[root@localhost ~]# ip a s                     //可以看到flannel为我们分配了IP地址
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
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 00:0c:29:56:9e:63 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.79/24 brd 192.168.1.255 scope global noprefixroute ens33
3: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1472 qdisc pfifo_fast state UNKNOWN group default qlen 500
    link/none 
    inet 172.20.93.0/16 scope global flannel0
[root@localhost ~]# cat /run/flannel/subnet.env
FLANNEL_NETWORK=172.20.0.0/16
FLANNEL_SUBNET=172.20.93.1/24
FLANNEL_MTU=1472
FLANNEL_IPMASQ=false
[root@localhost ~]# source docker.sh                  //安装docker
[root@localhost ~]# vim /etc/docker/daemon.json                 //编辑daemon.json文件

    "registry-mirrors": [
    "https://do.nark.eu.org",
    "https://dc.j8.work",
    "https://docker.m.daocloud.io",
    "https://dockerproxy.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.nju.edu.cn"
    ],

        "hosts": [
        "tcp://0.0.0.0:2375",
        "unix:///var/run/docker.sock"
    ],
        "bip" : "172.20.93.1/24",
        "mtu" : 1472          
}
[root@localhost ~]# vim /usr/lib/systemd/system/docker.service               //修改docker配置文件


[root@localhost ~]# systemctl daemon-reload                      //加载配置
[root@localhost ~]# systemctl restart docker                        //重启服务
[root@localhost ~]# ip a s                                                 //这里看到docker网卡已经与flannel属于同一网段了
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
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 00:0c:29:56:9e:63 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.79/24 brd 192.168.1.255 scope global noprefixroute ens33
3: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1472 qdisc pfifo_fast state UNKNOWN group default qlen 500
    link/none 
    inet 172.20.93.0/16 scope global flannel0
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1472 qdisc noqueue state DOWN group default 
    link/ether 02:42:d4:f3:5c:66 brd ff:ff:ff:ff:ff:ff
    inet 172.20.93.1/24 brd 172.20.93.255 scope global docker0

测试IP地址:

1.下载一个镜像
2.创建容器
3.查看该容器IP
 

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

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

相关文章

大阪OSAKA分子泵电源TC163HTC203TC353TC523TC1104TC553TC1813手侧

大阪OSAKA分子泵电源TC163HTC203TC353TC523TC1104TC553TC1813手侧

六、泛型事件框架

一、创建一个BaseEventSO的 基类 写一个泛型事件《T》 启动事件?.Invoke 二、创建一个监听类 同样泛型匹配Event的监听事件 创建OnEable在其中注册事件&#xff1b;OnDisable中注销事件 写一个if语句进行判断是否为空 三、创建一个ObjectEvent 传递Object 原因&#xf…

axios发送post请求实例

在body中的数据格式又有两种&#xff0c;一种是 json 数据格式&#xff0c;另一种是 字符串。具体要用哪种格式取决于后端入参的格式。 如果后端接收json数据类型&#xff0c;post 的 headers 需要设置 { ‘content-type’: ’application/json’ }&#xff0c;传给后端的数…

初学流量分析

一、基本知识 比赛中提供一个包含流量数据的 PCAP 文件&#xff0c;有时候也会需要选手们先进行修复或重构传输文件后&#xff0c;再进行分析。 PCAP 这一块作为重点&#xff0c;复杂的地方在于数据包里充满着大量无关的流量信息&#xff0c;因此如何分类和过滤数据是参赛者需…

stm32f103c8t6引脚功能

STM32F103C8T6拥有丰富的引脚功能&#xff0c;主要包括广泛的GPIO引脚、多种通信接口和特定的调试及电源管理引脚。 STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器&#xff0c;广泛应用于各种嵌入式系统设计中。它具有72MHz的处理速度&#xff0c;搭载128KB的Flash内存…

行业寒冬下的职场生态:卷与痛的交响曲

在2024年的初春&#xff0c;当万物复苏的季节理应带来希望与机遇之时&#xff0c;职场却笼罩在一片前所未有的“寒冬”之中。经济的波动、技术的快速迭代以及市场需求的微妙变化&#xff0c;共同编织了一幅复杂而严峻的行业图景。工作岗位的数量锐减&#xff0c;质量下滑&#…

域名解析DNS服务

DNS服务基础知识 DNS&#xff1a;Domain Name System (域名系统) DNS 是互联网上解决网络中机器命名的一种系统。在网络中&#xff0c;一台主机去访问另外一台主机时&#xff0c;必须要 知道目标主机的IP地址&#xff0c;虽然网络上的节点都可以用IP地址来标识&#xff0c;并且…

Unity | 基础知识

装箱和拆箱&#xff1a; 获取对方的类型&#xff1a; GetType通过打点调用 as进行类型转换 运用Convert进行类型转换&#xff1a; 二维数组的定义 结构体类型 不同名称空间来调用&#xff1a;

构建开发全能型档期预约系统

档期预约系统作为一种高效的时间管理和资源分配工具&#xff0c;在现代社会中的应用越来越广泛。以下是关于档期预约系统的详细分析&#xff1a; 一、系统概述 档期预约系统旨在帮助各类服务机构&#xff08;如医疗机构、美容院、教育培训机构等&#xff09;优化服务流程&…

低代码开发平台:重塑未来软件开发格局的关键力量

低代码开发平台正以前所未有的速度改变着软件开发的面貌&#xff0c;通过最小化手动编码&#xff0c;让用户能够迅速构建应用程序。随着企业对敏捷性和创新能力的追求日益增强&#xff0c;这类平台的需求激增。展望未来&#xff0c;技术进步与市场动态将引领低代码开发进入新的…

实习的一点回顾单元测试

多看看这个&#xff0c;生动 java - Spring、Spring Boot和TestNG测试指南 - 使用Mockito - 颇忒脱 - SegmentFault 思否 如何在Springboot项目中添加testngmockitojacoco单元测试_spring testng mockito-CSDN博客 1.介绍 TestNG 和 Mockito 是 Java 测试框架和库&#xff0…

从零开始学cv-13:形态学变换进阶操作

文章目录 前言一、孔洞填充二、形态学凸壳与细化 前言 通过上文的学习&#xff0c;我们已经基本掌握了基本的形态学操作&#xff0c;并且可以根据这些操作解决大部分实际问题&#xff0c;但还有一些单纯依靠上述算法难以解决的问题&#xff0c;下面我们来举几个更复杂的形态学…

基于单片机的家居环境监测系统的设计

本设计基于单片机的家居环境监测系统&#xff0c;采用STM32F103C6T6单片机作为主要的控制芯片&#xff0c;环境监测方面采用SHT30模块实现室内温度和湿度的监测&#xff1b;有害气体监测方面&#xff0c;用MQ-7传感器实现室内一氧化碳气体的监测&#xff1b;采用WIFI模块连接指…

BP神经网络学习内容分享:前向传播与后向传播

在深度学习和神经网络领域&#xff0c;BP&#xff08;Backpropagation&#xff0c;反向传播&#xff09;神经网络是一种非常基础且广泛应用的网络结构。它通过前向传播进行预测&#xff0c;并通过反向传播算法调整网络权重以优化预测结果。本文将详细介绍BP神经网络的前向传播和…

OrangePi AIpro 香橙派 昇腾 Ascend C算子开发 - NCHW和NHWC格式在内存中的存储方式及遍历方法

OrangePi AIpro 香橙派 昇腾 Ascend C算子开发 - NCHW和NHWC格式在内存中的存储方式及遍历方法 flyfish 从计算机硬件的角度来看&#xff0c;内存本质上是线性的一维数组 。尽管在编程时可以使用多维数组或更复杂的数据结构&#xff0c;但这些多维数据最终都被线性化存储在内…

FactoryBean 实战练习 - 注入自定义 Date

java.util.Date在Spring中被当做简单类型&#xff0c;简单类型在注入的时候可以直接使用value属性或value标签来完成。但是对于Date类型来说&#xff0c;采用value属性或value标签赋值的时候&#xff0c;对日期字符串的格式要求非常严格&#xff0c;必须是这种格式的&#xff1…

2) gaussian-splatting模型查看

本文在上面环境配置好的基础上&#xff0c;下载模型并查看&#xff0c;主要分享SIBR_viewers的编译流程&#xff0c;并简单分析SIBR_gaussianViewer_app的源码结构 目录 1 SIBR_viewers的编译2 SIBR_gaussianViewer_app源码解析 内容 1 SIBR_viewers的编译流程 用CMake配置项…

幂等的 4 种通用方案,一次性吃透

兄弟们&#xff0c;79 节了&#xff0c;59元100个案例&#xff08;实战源码文档技术支持&#xff09; 涵盖&#xff1a;高并发、接口性能优化、幂等、超卖、MQ专题、分布式事务、分库分表、常见问题排查、接口签名、接口加解密等各种实战案例&#xff1b;需要的朋友加我微信&am…

亦菲喊你来学机器学习(18) --TF-IDF方法

文章目录 TF-IDF词频TF逆文档频率IDF计算TF-IDF值 应用实验使用TF-IDF1. 收集数据2. 数据预处理3. 构建TF-IDF模型对象4. 转化稀疏矩阵5. 排序取值完整代码展示 jieba分词总结 TF-IDF TF-IDF&#xff08;Term Frequency-Inverse Document Frequency&#xff0c;词频-逆文档频率…

浅析Java线程池实现原理 1

目录 一、线程池 1.1 线程池是什么 1.2 线程池解决的问题是什么 二、线程池核心设计与实现 2.1 总体设计 ThreadPoolExecutor是如何运行&#xff0c;如何同时维护线程和执行任务的呢&#xff1f; 2.2 生命周期管理 2.3 任务执行机制 任务调度 任务缓冲 任务申请 任…