IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 10分钟带你了解docker网络详解 -> 正文阅读

[系统运维]10分钟带你了解docker网络详解

Docker四种网络模式

(1)概要讲述
在这里插入图片描述

1、host模式

host网络模式需要在容器创建时指定–network=host
hots模式是和宿主机公用一个网段和端口,缺陷是会隔离性差,会占用宿主机的端口,做不到自定任意端口。优点,无需做网络策略,只要能访问到宿主机,就能访问到容器
在这里插入图片描述
2、container模式
这个模式是两个容器之间可以相互通信,虽然是两个容器,但可以理解为在同一容器里面,可以用localhost访问。两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。
在这里插入图片描述
3、none模式
使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。

在这里插入图片描述

4、 bridge模式

在这里插入图片描述

bridge模式下容器没有一个公有ip,只有宿主机可以直接访问,外部主机是不可见的,但容器通过宿主机的NAT规则后可以访问外网。

优点:Docker Daemon 利用 veth pair 技术,在宿主机上创建两个虚拟网络接口设备,假设为veth0 和 veth1。而
veth pair 技术的特性可以保证无论哪一个 veth 接收到网络报文,都会将报文传输给另一方。

Docker Daemon 将 veth0 附加到 Docker Daemon 创建的 docker0
网桥上。保证宿主机的网络报文可以发往 veth0;

Docker Daemon 将 veth1 添加到 Docker Container 所属的 namespace 下,并被改名为
eth0。如此一来,保证宿主机的网络报文若发往 veth0,则立即会被 eth0 接收,实现宿主机到Docker Container网络的联通性;同时,也保证 Docker Container 单独使用 eth0,实现容器网络环境的隔离性

缺点:1.最明显的是,该模式下 Docker Container 不具有一个公有 IP,即和宿主机的 eth0 不处于同一个网段。导致的结果是宿主机以外的世界不能直接和容器进行通信。
2.虽然 NAT 模式经过中间处理实现了这一点,但是 NAT 模式仍然存在问题与不便,如:容器均需要在宿主机上竞争端口,容器内部服务的访问者需要使用服务发现获知服务的外部端口等。
3.另外 NAT 模式由于是在三层网络上的实现手段,故肯定会影响网络的传输效率。

  • 高级网络配置–网桥

自定义网络模式中,docker提供了三种自定义网络驱动:brdge,overlay,macvlan,bridge驱动类似默认的bridge网络模式,但增加了一些新的功能,overlay和macvlan是用于创建跨主机网络
建议使用自定义的网络来控制哪些容器可以相互通信,还可以自动DNS解析容器名称到IP地址
实验:
(一)bridge自定义网络

1.创建自定义网桥并查看

#以下命令也可以写成以下格式:

[root@server1 ~]# docker network create --driver bridge my_net1
[root@server1 ~]# docker network create my_net1
[root@server1 ~]# docker network ls

2、创建容器vm1并使用自定义网桥,并尝试与vm1通信,发现可以通信

[root@server1 ~]# docker run -it --name vm1 --network=my_net1 
#在通信时
root@ea41dabc161f:/# ping vm1

在这里插入图片描述
3、创建容器vm2并使用自定义网桥,并尝试与vm1通信,发现可以通信

[root@server1 ~]# docker run -it --name vm2 --network=my_net1 
#在通信时可以发现vm1自动进行了域名解析
root@010fe2d13a0b:/# ping vm1

总结:
在创建容器时,如果使用的网络模式时自定义的网桥,那么在此网桥中创建的容器都可以互相进行通信。

(二)bridge自定义网络–网段

  • 还可以自己定义网段:在创建时指定参数:–subnet 、–gateway

  • 创建两个容器,并桥接到不同的网桥上(vm1连接的网桥是my_net1),彼此是不通信的。

  • 使用–ip参数可以指定容器ip地址,但必须是在自定义网桥上,默认的bridge模式不支持,同一网桥上的容器是可以互通的。

1.添加一个docker的自定义网段并查看

[root@server1 ~]# docker network create --subnet=172.21.0.0/24 --gateway=172.21.0.1 my_net2
[root@server1 ~]# docker network ls

在这里插入图片描述

2.创建一个容器vm3,并设置其ip(ip必须在自定义桥内)

[root@server1 ~]# docker run -it --name vm3 --network=my_net2 --ip=172.21.0.100  ubuntu
root@0f6d07ab74f1:/# ip a

在这里插入图片描述
3.尝试通信vm1,发现无法通信;尝试通信vmm3,发现可以通信。说明如果使用不同网桥间的容器时不可以通讯的

root@0f6d07ab74f1:/# ping vm1
root@0f6d07ab74f1:/# ping vm3

在这里插入图片描述
(三)不同网桥间的容器进行通信

  • 前提: 现在使用的容器vm1使用的网桥时my_net1,容器vm3使用的网桥是my_net2,默认是无法进行通讯的
    1.使用 docker network connect命令为vm1添加一块my_net2 的网卡。
#给容器添加网卡后可以连接不同网络
[root@server1 ~]# docker network connect my_net2 vm1

2.进入容器vm1(因为vm1此时正在运行,所以可以使用attach直接进入vm1容器),并查看ip,发现此时多了一块网卡,且自动分配了ip,然后尝试与vm3进行通信,发现可以成功通讯

[root@server1 ~]# docker attach vm1
root@ea41dabc161f:/# 
root@ea41dabc161f:/# ip a
root@ea41dabc161f:/# ping vm3

在这里插入图片描述
3.容器之间除了使用ip通信外,还可以使用容器名称通信

#docker 1.10开始,内嵌了一个DNS server,但是dns解析功能必须在自定义网络中使用
root@ea41dabc161f:/# ping -c1 vm1
root@ea41dabc161f:/# ping -c1 vm3

总结:

1.docker的bridge自定义网络(自定义网络中的网桥)间可以随便添加对方的网卡

2.docker的bridge自定义网络与系统自带的网桥自己间:只能是系统自带的网桥对应的容器添加给自定义的网桥间,而反过来会报错

3.docker的系统自带的网桥之间时可以互相通信的,因为在同一个网络桥接上

(四)容器访问外网以及外网访问容器

  1. 外网如何访问容器?通过端口映射以及选项指定映射端口 外网访问容器用到了docker-proxy和iptables DNAT
    宿主机访问本机容器使用的是iptables DNAT外部主机访问容器或容器之间的访问是docker-proxy实现
    实验:
    1.首先查看原来的防火墙策略
[root@server1 ~]# iptables -t nat -nL

在这里插入图片描述
2、运行镜像nginx并设置映射的端口

 docker run -d --name nginx -p 80:80 nginx

3.查看容器的端口

[root@server1 ~]# docker port nginx
[root@server1 ~]# netstat -antlp | grep 80

4.再次查看防火墙的策略

[root@server1 ~]# iptables -t nat -nL

5、在这里插入图片描述
访问172.17.0.2,172.17.0.1和localhost,发现都可以成功访问,说明防火墙策略设置成功并实现了容器和外网之间相互通信

[root@server1 ~]# curl 172.17.0.2
[root@server1 ~]# curl localhost
[root@server1 ~]# curl 172.17.0.1

有些图片和内容源自网络,如有侵犯请联系作者删除,谢谢。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:53:58  更:2022-03-03 16:56:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:21:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码