Docker续6:容器网络

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.mzph.cn/diannao/52922.shtml

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

相关文章

【 OpenHarmony 系统应用源码魔改 】-- Launcher 之「桌面布局定制」

前言 阅读本篇文章之前&#xff0c;有几个需要说明一下&#xff1a; 调试设备&#xff1a;平板&#xff0c;如果你是开发者手机&#xff0c;一样可以加 Log 调试&#xff0c;源码仍然是手机和平板一起分析&#xff1b;文章中的 Log 信息所显示的数值可能跟你的设备不一样&…

单片机编程魔法师-并行多任务程序

程序架构 程序代码 小结 数码分离&#xff0c;本质上就是将数据和代码逻辑进行分离&#xff0c;跟第一章使用数据驱动程序一样的道理。 不过这里不同之处在于。这里使用通过任务线程&#xff0c;但是却有2个任务在运行&#xff0c;两个任务都通过先初始化任务数据参数&#x…

SQLite的安装和使用

一、官网链接下载安装包 点击跳转 步骤&#xff1a;点击安装这个红框的dll以及红框下面的tools &#xff08;如果有navicat可以免上面这个安装步骤&#xff0c;安装上面这个是为了能在命令行敲SQL而已&#xff09; 二、SQLite的特点 嵌入的&#xff08;无服务器的&#x…

hello树先生——AVL树

AVL树 一.什么是AVL树二.AVL树的结构1.AVL树的节点结构2.插入函数3.旋转调整 三.平衡测试 一.什么是AVL树 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。…

python学习——爬虫之session请求处理cookie

import requestssessionrequests.session() url"https://passport.17k.com/ck/user/login" data{"loginName": "19139186287","password":"2001022600hzk"} ressession.post(url,datadata) print(res.text)# session通过会话…

Windows系统中批量管理Windows服务器远程桌面工具——RDCMan

一、背景 在公司没有部署对应的堡垒机系统之前,做运维测试工作的人员,需要管理大量的服务器,每天需要对服务器进行必要的巡检、系统更新发布等内容,特别是有很多Windows服务器的时候,如果我们使用Windows自带的“远程桌面连接”只能一台台连接,比较繁琐。并且不能知道那台…

【手撕数据结构】二叉树的性质

目录 叶子节点和边的性质概念小试牛刀 叶子节点和边的性质 概念 可以看到度为0的节点如F没有边&#xff0c;度为1的节点如C有一条边&#xff0c;而度为2的节点如B有两条边。那么设度为2的节点为a个&#xff0c;度为1的节点为b个。二叉树边 2ab另⼀⽅⾯&#xff0c;由于共有 a…

AcWing 897. 最长公共子序列

动态规划就是多见识应用题就完事儿了&#xff0c;也没有什么好说的。 讲解参考&#xff1a; 【E05 线性DP 最长公共子序列】 #include<iostream> #include<algorithm> #define N 1010 using namespace std; char a[N],b[N]; int n,m; int f[N][N]; int main(){…

Loki Unable to fetch labels from Loki (no org id)

应该是多租户相关导致的 参考文档: 参考文档cMulti-tenancy | Grafana Loki documentationDescribes how Loki implements multi-tenancy to isolate tenant data and queries.https://grafana.com/docs/loki/latest/operations/multi-tenancy/ https://github.com/grafana…

主流AI绘画工具-StableDiffusion本地部署方法(mac电脑版本)

Stable Diffusion是一款强大的AI生成图像模型&#xff0c;它可以基于文本描述生成高质量的图像。对于想要在本地运行此模型的用户来说&#xff0c;使用Mac电脑部署Stable Diffusion是一个非常吸引人的选择&#xff0c;特别是对于M1或M2芯片的用户。本文将详细介绍如何在Mac上本…

高效能低延迟:EasyCVR平台WebRTC支持H.265在远程监控中的优势

TSINGSEE青犀视频EasyCVR视频汇聚平台在WebRTC方面确实支持H.265编码&#xff0c;尽管标准的WebRTC API在大多数浏览器中默认并不支持H.265&#xff08;也称为HEVC&#xff0c;高效视频编码&#xff09;编码。EasyCVR平台通过一系列创新的技术手段&#xff0c;实现了在WebRTC协…

食家巷中秋美食,味蕾上的团圆盛宴

月到中秋分外明&#xff0c;在这个充满温情与思念的节日里&#xff0c;美食成为了人们传递情感、共享团圆的重要载体。而食家巷&#xff0c;以其独特的中秋美食&#xff0c;为这个佳节增添了一抹别样的风味。 走进食家巷&#xff0c;仿佛踏入了一个美食的宝藏之地。这里的传统…

excel规划求解结合vba宏笔记

目录 概念与配置 规划求解定义 excel设置规划求解 宏的基本操作 excel批量进行规划求解案例 加载规划求解模块 宏的设置 宏录制vba 其他案例 概念与配置 规划求解定义 运用“规划求解”定义并求解问题 - Microsoft 支持 excel设置规划求解 EXCEL规划求解的简明教程…

突破代码:克服编程学习中的挫折感

目录 一、心态调整&#xff1a;心理韧性的培养 接受挫折是学习的一部分 设置实际的学习目标 保持学习的乐趣 二、学习方法&#xff1a;策略的实施 逐步解决问题 寻找多样的学习资源 定期复习与实践 三、成功经验&#xff1a;实例的启示 Debug的技巧掌握 算法的深入理…

开发中如何在运行/调试时将项目热部署到Tomcat

这里有一篇不错的博客&#xff0c;可以参考 http://t.csdnimg.cn/oWcgm 正常情况下&#xff0c;我们将web项目打包成war包后&#xff0c;需要放到tomcat的webapps路径下&#xff0c;然后启动tomcat&#xff0c;才能正常访问。但是这在开发阶段是极为不便的。因此可以使用两种方…

Qt_两种创建组件的方式-通过图形化-通过代码

文章目录 一、通过图形化的方式&#xff0c;在界面上创建一个控件&#xff0c;显示hello world1.打开UI设计界⾯2.拖拽控件⾄ ui 界⾯窗⼝并修改内容3.构建并运行 二、通过代码的方式&#xff0c;通过编写代码&#xff0c;在界面上创建控件&#xff0c;显示hello world在Widget…

AIGC提示词(2):塑造未来内容创作的核心力量

引言 &#x1f31f; 在这个数字化的时代&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;正变得越来越普遍。从自动写作到图像生成&#xff0c;AI正以前所未有的速度和多样性创造内容。然而&#xff0c;要实现高质量和相关性强的内容生成&#xff0c;关键在于有效地…

已成功入职小米大模型岗!!大模型面试其实挺水的,hr听到这些直接过

小米大模型面试180题 1、目前比较受欢迎的开源大模型有哪些&#xff1f; GPT系列&#xff1a;由OpenAl开发的生成式预训练模型&#xff0c;如 GPT-3。 BERT系列&#xff1a;由Google开发的转换式预训练模型&#xff0c;如BERT、RoBERTa等。 T5系列&#xff1a;由Google开发的基…

003、架构_详解(重点)

GoldenDB 分布式数据库框架 DN和RDB增加了备节点;引入新模块CM,且GTM、MDS、PM、CM都增加备节点;MDS、PM、CM、RDB被统一在了管理节点之中;GTM和MDS间多了一条连线,因为GTM的切换由MDS把控;初步系统架构mysqld:一般称为DB节点,负责单个节点的数据处理; dbproxy:一般…

Gitee上传项目(从0开始)

1.默认你Git已经下载好的情况下。 下载好的两种显示&#xff1a; 1.右击桌面显示这个 2.如果没有情况1出现&#xff0c;需要自己去创建快捷方式 2.去网站创建仓库 网站参考&#xff1a;yanyongzhitest/java_web - 码云 - 开源中国 (gitee.com) 新建仓库&#xff1a; 仓库名…