【云原生 | 17】容器的四种网络模式

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: bridge:Docker 默认方式,网桥模式none:容器没有网络栈(主要用于离线分析等模式,数据可以通过目录挂载的方式传输,方便又安全)container:使用其它容器的网络栈,Docker容器会加入其它容器的 network namespace(相当容器二的网卡直接进入容器一的虚拟空间内,两个容器直接通过本地回环接口通信,非常高校。一般用于只有网络采用这种模式联通,其他进程都是互相隔离的) --network container:(ContainerName)host:表示容器使用 ......

 作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道TOP1🏅 阿里云ACE认证高级工程师🏅

✒️个人主页:小鹏linux

💊个人社区:小鹏linux(个人社区)欢迎您的加入!

1. Docker 进程修改

比较少见

会影响到所有的容器进程

-b, --bridge=””   指定 Docker 使用的网桥设备,默认情况下 Docker 会自动创建和使用 docker0 网桥设备,通过此参数可以使用已经存在的设备。

--bip 指定 Docker0 的 IP 和掩码,使用标准的 CIDR 形式,如 10.10.10.10/24

--dns 配置容器的 DNS,在启动 Docker 进程时添加,所有容器全部生效

2. 容器的四种网络模式

跟在docker run命令之后的:

        --dns 用于指定启动的容器的 DNS(默认是物理机的)

        --net 用于指定容器的网络通讯方式,有以下四个值

 bridge:Docker 默认方式,网桥模式

 none:容器没有网络栈(主要用于离线分析等模式,数据可以通过目录挂载的方式传输,方便又安全)

 container:使用其它容器的网络栈,Docker容器会加入其它容器的 network namespace(相当容器二的网卡直接进入容器一的虚拟空间内,两个容器直接通过本地回环接口通信,非常高校。一般用于只有网络采用这种模式联通,其他进程都是互相隔离的) --network container:(ContainerName)

host:表示容器使用 Host 的网络,没有自己独立的网络栈。容器可以完全访问 Host 的网络,

不安全 --network host

2.1 bridge模式实验

[root@localhost ~]# docker images   #查看镜像
[root@localhost ~]# docker run --name test1 -d nginx:latest   #容器test1不指定网络模式
[root@localhost ~]# docker run --name test2 --net bridge -d nginx:latest  #指定容器test2的网络模式为 bridge网桥模式
[root@localhost ~]# docker inspect test1    #查看到"Gateway": "172.17.0.1",和"IPAddress": "172.17.0.2",
[root@localhost ~]# docker inspect test2    #查看到"Gateway": "172.17.0.1",和 "IPAddress": "172.17.0.3

image.gif

说明两个容器的网络模式是一样的且能互相通信。即容器的默认网络模式就是bridge网桥模式

2.2 none模式实验

[root@localhost ~]# docker run --name test3 --net none -d nginx:latest    #指定容器test3的网络模式为 none模式
[root@localhost ~]# docker inspect test3  #查看发现没有ip和网关

image.gif

2.3 container模式实验

[root@localhost ~]# cc  #先删除掉所有的容器
[root@localhost ~]# docker images #查看镜像
[root@localhost ~]# docker run --name test1 -d nginx:latest #正常启动镜像nginx:latest
[root@localhost ~]# docker run --name test2 --net container:test1 -d hub.c.163.com/public/centos:7.2-tools  #container模式启动镜像hub.c.163.com/public/centos:7.2-tools
[root@localhost ~]# docker exec -it test2 /bin/bash   #进入test2容器
[root@5b1ad1de8d65 /]# curl localhost     #发现访问到了nginx的默认页面
[root@5b1ad1de8d65 /]# ifconfig     #查看eth0的ip为172.17.0.2
[root@5b1ad1de8d65 /]# exit   #退出
[root@localhost ~]# docker inspect test1    #查看发现就是此容器test1的地址

image.gif

说明该模式下网络已共享。

2.4 host模式实验

浏览器访问192.168.232.165,访问失败

[root@localhost ~]# netstat -anpt | grep 80 #查看端口,无80端口
[root@localhost ~]# docker run --name test1 --net host -d nginx:latest    #以host网络模式启动nginx镜像
[root@localhost ~]# netstat -anpt | grep 80 #查看到80端口开启

image.gif

浏览器访问192.168.232.165,访问成功

3. 自定义 Docker0 的网桥地址

修改 /etc/docker/daemon.json 文件

{
    "bip": "192.168.1.5/24",            #指定当前的docker的地址
    "fixed-cidr": "192.168.1.0/24",         #安全的cidr网段(每个容器的地址都是通过dhcp获取的)
    "fixed-cidr-v6": "2001:db8::/64",       #ipv6的安全的cidr网段
    "mtu": "1500",                    #数据包的大小
    "default-gateway": "192.168.1.1",       #默认的网关
    "default-gateway-v6": "2001:db8:abcd::89",    #ipv6的默认网关
    "dns": ["192.168.1.2","192.168.1.3"]      #DNS服务器
}

image.gif

4. 项目隔离方式

4.1 基础命令

docker network ls         # 查看当前可用的网络类型

例:

image.gif

docker network create -d 类型 #网络空间名称

# 类型分为:

        # overlay network

        # bridge network

4.2 独立至不同的网络命名空间进行隔离

命令:

docker network create -d bridge --subnet "172.26.0.0/16" --gateway "172.26.0.1" my-bridge-network

实验步骤:

先创建my-bridge-network网络,网络类型为bridge,网段为26

[root@localhost ~]# docker network create -d bridge --subnet "172.27.0.0/16" --gateway "172.27.0.1" anxiaopeng

image.gif

然后创建anxiaopeng网络,网络类型也为bridge,网段为27
[root@localhost ~]# docker network create -d bridge --subnet "172.27.0.0/16" --gateway "172.27.0.1" anxiaopeng

image.gif

查看如下:

[root@localhost ~]# docker network ls

image.gif

image.gif

启动镜像,以网络名定义前两个容器为同一个网桥(26网段,但ip是此网段随机的),后两个容器为同一个网桥(27网段,但 ip是此网段随机的)。但是四个容器都是bridge 网桥模式。此情景相当于工作中创建多个项目,每个项目内有多个容器,每个项目内的容器都可以互相通信,但是每个项目之间是隔离不能通信的。

[root@localhost ~]# docker run --name test1.1 --net my-bridge-network -d hub.c.163.com/public/centos:7.2-tools
[root@localhost ~]# docker run --name test1.2 --net my-bridge-network -d hub.c.163.com/public/centos:7.2-tools
[root@localhost ~]# docker run --name test2.1 --net anxiaopeng -d hub.c.163.com/public/centos:7.2-tools
[root@localhost ~]# docker run --name test2.2 --net anxiaopeng -d hub.c.163.com/public/centos:7.2-tools

image.gif

命令如下:
docker run -d --network=my-bridge-network --name test1  hub.c.163.com/public/centos:6.7-tools
docker run -d --name test2  hub.c.163.com/public/centos:6.7-tools

image.gif

4.3 使用 Linux 桥接器进行主机间的通讯

[root@localhost ~]# docker run --name test1 -p 2222:22 -d hub.c.163.com/public/centos:7.2-tools
[root@localhost ~]# docker exec -it test1 /bin/bash
[root@a88b5196f766 /]# vim /etc/ssh/sshd_config #打开sshd配置文件

image.gif

将#PermitRootLogin yes取消注释,允许root远程登录

[root@a88b5196f766 /]# passwd #修改密码为123456

image.gif

然后用xshell工具远程连接IP为:192.168.232.165,端口为:2222

[root@a88b5196f766 ~]#      #发现可以成功登录。说明当前容器可以当作一个ssh的远程服务了
[root@localhost ~]# docker commit test1 ssh:v0.1  #将此容器封装成ssh服务的镜像!
[root@localhost ~]# cc  #删除容器
[root@localhost ~]# mkdir /usr/local/script #创建一个目录
[root@localhost ~]# ifconfig  #先查看一下现存的网桥,以下创建网桥时候名称不能冲突
[root@localhost ~]# vim /usr/local/script/init-br.sh  #创建一个脚本,脚本内容如下:
#!/bin/bash
ip addr del dev ens33 192.168.232.165/24        #删除当前物理机ens33网卡的ip地址
ip link add link ens33 dev br0 type macvlan mode bridge     #创建一个基于ens33网卡的br0网桥,类型为macvlan网络模式为bridge
ip addr add 192.168.232.165/24 dev br0  #设置br0网桥的ip地址为本机ip(如果一个物理网卡变成网桥了,那它就不许有ip地址了,与网桥共享)
ip link set dev br0 up                  #启动br0网桥
ip route add default via 192.168.232.1 dev br0  #给br0网桥添加一个网关
[root@localhost ~]# chmod +x /usr/local/script/init-br.sh     #添加权限
[root@localhost ~]# /bin/bash /usr/local/script/init-br.sh    #启动脚本
[root@localhost ~]# ifconfig  #查看发现ens33网卡没有ip地址了,br0网桥有192.168.232.165IP地址了

image.gif

用电脑客户端的cmd窗口ping 192.168.232.165,发现能ping通了

[root@localhost ~]# rz  #上传pipework-master.zip压缩包
[root@localhost ~]# unzip pipework-master.zip #解压缩
[root@localhost ~]# cp -a pipework-master/pipework /usr/local/bin/  
[root@localhost ~]# chmod a+x /usr/local/bin/pipework #添加权限
[root@localhost ~]# docker run --name test1 --net none -d ssh:v0.1
[root@localhost ~]# pipework br0 test1 192.168.232.166/24@192.168.232.1     #设置容器地址分配

image.gif

然后用脑客户端的cmd窗口ping 192.168.232.166,发现能ping通

👑👑👑结束语👑👑👑

为大家推荐一款刷题神奇 点击链接访问牛客网

各大互联网大厂面试真题。基础题库到进阶题库等各类面试题应有尽有!

牛客网面经合集,满足大厂面试技术深度,快速构建Java核心知识体系大厂面试官亲授,备战面试与技能提升,主要考点+主流场景+内功提升+真题解析

image.gif

目录
相关文章
|
23天前
|
安全 定位技术 数据安全/隐私保护
|
4天前
|
Kubernetes Cloud Native 微服务
云原生之旅:从容器到微服务
【10月更文挑战第29天】在这篇文章中,我们将一起探索云原生的奥秘。云原生不仅仅是一种技术,更是一种文化和方法论。我们将从容器技术开始,逐步深入到微服务架构,最后探讨如何在云平台上实现高效的服务部署和管理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和实用的技能。让我们一起踏上这段激动人心的云原生之旅吧!
|
5天前
|
运维 Kubernetes Cloud Native
云原生之旅:容器化与微服务的融合
【10月更文挑战第28天】 在数字化转型的浪潮中,云原生技术如星辰般璀璨,引领着企业IT架构的未来。本文将带你穿梭于云原生的世界,探索容器化技术和微服务架构如何携手共舞,打造灵活、高效的应用部署和运维模式。我们将通过实际代码示例,揭示这股力量背后的奥秘,并展现它们是如何为现代软件开发带来革新。准备好了吗?让我们启航,驶向云原生技术的深海。
|
6天前
|
Kubernetes 负载均衡 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第27天】Kubernetes(简称K8s)是云原生应用的核心容器编排平台,提供自动化、扩展和管理容器化应用的能力。本文介绍Kubernetes的基本概念、安装配置、核心组件(如Pod和Deployment)、服务发现与负载均衡、网络配置及安全性挑战,帮助读者理解和实践Kubernetes在容器编排中的应用。
29 4
|
5天前
|
Cloud Native 持续交付 云计算
云原生入门指南:从容器到微服务
【10月更文挑战第28天】在数字化转型的浪潮中,云原生技术成为推动现代软件开发的关键力量。本篇文章将带你了解云原生的基本概念,探索它如何通过容器化、微服务架构以及持续集成和持续部署(CI/CD)的实践来提升应用的可伸缩性、灵活性和可靠性。你将学习到如何利用这些技术构建和部署在云端高效运行的应用,并理解它们对DevOps文化的贡献。
19 2
|
7天前
|
Kubernetes 监控 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第26天】随着云计算技术的发展,容器化成为现代应用部署的核心趋势。Kubernetes(K8s)作为容器编排领域的佼佼者,以其强大的可扩展性和自动化能力,为开发者提供了高效管理和部署容器化应用的平台。本文将详细介绍Kubernetes的基本概念、核心组件、实践过程及面临的挑战,帮助读者更好地理解和应用这一技术。
29 3
|
13天前
|
Kubernetes Cloud Native 云计算
云原生之旅:从容器到微服务的探索之路
【10月更文挑战第20天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文将深入探讨云原生的核心概念、技术架构及其在现代软件开发中的应用,揭示如何通过云原生技术提升业务的灵活性和可扩展性。
|
14天前
|
负载均衡 应用服务中间件 数据安全/隐私保护
docker swarm 创建 Swarm 模式下的网络
【10月更文挑战第14天】
17 6
|
10天前
|
运维 Kubernetes Cloud Native
云原生入门:Kubernetes和容器化的未来
【10月更文挑战第23天】本文将带你走进云原生的世界,探索Kubernetes如何成为现代软件部署的心脏。我们将一起揭开容器化技术的神秘面纱,了解它如何改变软件开发和运维的方式。通过实际的代码示例,你将看到理论与实践的结合,感受到云原生技术带来的革命性影响。无论你是初学者还是有经验的开发者,这篇文章都将为你开启一段新的旅程。让我们一起踏上这段探索之旅,解锁云原生技术的力量吧!
|
18天前
|
Kubernetes Cloud Native 持续交付
云原生技术:重塑现代应用开发与部署模式####
本文深入探讨了云原生技术的核心概念、发展历程及其在现代软件开发和部署中的关键作用。通过分析云原生架构的特点,如容器化、微服务、持续集成与持续部署(CI/CD),以及它如何促进应用的可伸缩性、灵活性和效率,本文旨在为读者提供一个关于云原生技术全面而深入的理解。此外,还将探讨实施云原生策略时面临的挑战及应对策略,帮助组织更好地把握数字化转型的机遇。 ####

热门文章

最新文章