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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 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

目录
相关文章
|
12天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
51 2
|
10天前
|
运维 Cloud Native 虚拟化
一文吃透云原生 Docker 容器,建议收藏!
本文深入解析云原生Docker容器技术,涵盖容器与Docker的概念、优势、架构设计及应用场景等,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
一文吃透云原生 Docker 容器,建议收藏!
|
12天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
4天前
|
Kubernetes Cloud Native Docker
云原生之旅:从传统架构到容器化服务的演变
随着技术的快速发展,云计算已经从简单的虚拟化服务演进到了更加灵活和高效的云原生时代。本文将带你了解云原生的概念、优势以及如何通过容器化技术实现应用的快速部署和扩展。我们将以一个简单的Python Web应用为例,展示如何利用Docker容器进行打包和部署,进而探索Kubernetes如何管理这些容器,确保服务的高可用性和弹性伸缩。
|
6天前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。
|
10天前
|
Cloud Native API 持续交付
云原生之旅:从容器到微服务的演进之路
【10月更文挑战第39天】在这篇文章中,我们将一起探索云原生技术的奥秘。通过浅显易懂的语言和生动的比喻,我们将了解云原生技术如何改变软件开发的世界。文章将带领读者从容器的基本概念出发,逐步深入到微服务架构的实践,揭示这些技术如何助力现代应用的快速迭代与可靠部署。准备好,让我们启程进入云原生的精彩世界吧!
|
14天前
|
域名解析 网络协议 虚拟化
vmware 提供的三种网络工作模式
本文介绍了VMware虚拟机的三种网络工作模式:Bridged(桥接模式)、NAT(网络地址转换模式)和Host-Only(仅主机模式)。桥接模式将虚拟机与主机通过虚拟网桥连接,实现与物理网络的直接通信;NAT模式通过虚拟NAT设备和DHCP服务器使虚拟机联网;Host-Only模式则将虚拟机与外网隔离,仅与主机通信。此外,文章还简要介绍了网络相关的基础知识,包括主机名、IP地址、子网掩码、默认网关和DNS服务器。
35 3
|
13天前
|
Kubernetes Cloud Native Docker
云原生技术探索:容器化与微服务的实践之道
【10月更文挑战第36天】在云计算的浪潮中,云原生技术以其高效、灵活和可靠的特性成为企业数字化转型的重要推手。本文将深入探讨云原生的两大核心概念——容器化与微服务架构,并通过实际代码示例,揭示如何通过Docker和Kubernetes实现服务的快速部署和管理。我们将从基础概念入手,逐步引导读者理解并实践云原生技术,最终掌握如何构建和维护一个高效、可扩展的云原生应用。
|
20天前
|
Kubernetes Cloud Native 微服务
云原生之旅:从容器到微服务
【10月更文挑战第29天】在这篇文章中,我们将一起探索云原生的奥秘。云原生不仅仅是一种技术,更是一种文化和方法论。我们将从容器技术开始,逐步深入到微服务架构,最后探讨如何在云平台上实现高效的服务部署和管理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和实用的技能。让我们一起踏上这段激动人心的云原生之旅吧!
|
14天前
|
Docker 容器
【赵渝强老师】Docker的None网络模式
Docker容器在网络方面实现了逻辑隔离,提供了四种网络模式:bridge、container、host和none。其中,none模式下容器具有独立的网络命名空间,但不包含任何网络配置,仅能通过Local Loopback网卡(localhost或127.0.0.1)进行通信。适用于不希望容器接收任何网络流量或运行无需网络连接的特殊服务。
下一篇
无影云桌面