Docker容器的网络可分为四种类型,Closed、Bridged、Joined、Open
其结构图如下:(来源:《Docker In Action》)
1、Closed
不允许网络访问,容器内的进程只能访问回调接口(loopback interface),程序的网络访问只能在容器内部进行,不能够访问容器外部网络,创建容器时使用--net none 参数。
[root@iz2ze7sp5njgaf81ekoudez ~]# docker run --rm --net none alpine ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever
- 容器内的运行程序可以连接或等待连接到该接口
- 不允许外部容器连接该接口
- 外部容器不能够访问该容器
场景:需要网络高度隔离或者应用程序不需要网络访问。例如终端文本编辑器不需要网络访问,或者程序在容器内生成密码
2、Bridged
该模式是容器生成的默认选项,容器拥有一个私有的回调接口和一个私有接口,用于连接宿主机的网桥,使用该模式,主要是容器内的进程需要访问网络资源,创建容器时可以忽略 --net选项或者指定为bridge。
[root@iz2ze7sp5njgaf81ekoudez ~]# docker run --rm --net bridge alpine ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 157: eth0@if158: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP link/ether 02:42:ac:12:00:04 brd ff:ff:ff:ff:ff:ff inet 172.18.0.4/16 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::42:acff:fe12:4/64 scope link tentative valid_lft forever preferred_lft forever
- 自定义域名
bridge模式支持自定义域名功能,使用--hosename参数指定
[root@iz2ze7sp5njgaf81ekoudez ~]# docker run --rm --hostname barker alpine nslookup barker nslookup: can't resolve '(null)': Name does not resolve Name: barker Address 1: 172.18.0.4 barker
- 添加域名解析 --dns选项
[root@iz2ze7sp5njgaf81ekoudez ~]# docker run --rm --dns 8.8.8.8 alpine nslookup docker.com nslookup: can't resolve '(null)': Name does not resolve Name: docker.com Address 1: 52.205.177.26 ec2-52-205-177-26.compute-1.amazonaws.com Address 2: 52.54.245.124 ec2-52-54-245-124.compute-1.amazonaws.com Address 3: 52.73.59.133 ec2-52-73-59-133.compute-1.amazonaws.com
参数值必须为ip;支持数组,可以指定多个DNS服务;支持容器守护进程模式运行(-d)
- 添加域名查找域,--dns-search=[]
可以指定多个,类似为域名添加一个前缀,查找registry.hub.docker.com
[root@iz2ze7sp5njgaf81ekoudez ~]# docker run --rm --dns-search docker.com busybox nslookup registry.hub Server: 100.100.2.138 Address 1: 100.100.2.138 Name: registry.hub Address 1: 52.86.136.227 ec2-52-86-136-227.compute-1.amazonaws.com Address 2: 34.200.149.55 ec2-34-200-149-55.compute-1.amazonaws.com Address 3: 52.45.79.109 ec2-52-45-79-109.compute-1.amazonaws.com
- 添加本地域名-IP映射,--add-host,可以指定多次
[root@iz2ze7sp5njgaf81ekoudez ~]# docker run --rm --hostname mycontainer --add-host docker.com:127.0.0.1 --add-host test:172.0.2.2 alpine cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 127.0.0.1 docker.com 172.0.2.2 test 172.18.0.4 mycontainer
- 暴露端口 -p=[],--publish=[]
cp:随机映射一个宿主机端口到容器端口上
hp:cp:同时指定端口
ip:cp:将容器端口绑定到指定ip的随机端口上
ip:hp:cp:将容器端口绑定到指定的ip及端口上
--expose:开放容器端口
-P,--publish-all,将容器所有开放的端口映射到宿主机的随机端口上
0.0.0.0:32775->5000/tcp, 0.0.0.0:32774->6000/tcp, 0.0.0.0:32773->7000/tcp
- 修改桥接口
--bip参数指定IP段,设置docker0的ip及允许的ip范围
--bip "192.168.0.128/25" 后128个ip(32-25=7, 2^7=128)
--fixed-cidr 指定IP可以被分配到新的容器
新容器接受的ip段 docker -d --fixed-cidr "192.168.0.192/26"(后64个ip,192-255,32-26=6,2^6=64)
–mtu,指定以太网接口的网络包大小,默认1500字节
docker -d –mtu 1200,指定为1200字节
-b/--bridge,指定Docker守护进程的网桥,默认为docker0
docker -d -b mybridge docker -d --bridge mybridge
3、Joined
容器共享同一个网络,也就意味着减少了控制和安全,联合容器是由特殊容器为新容器提供访问接口。
创建一个封闭的容器
docker run -d --name brady --net none alpine nc -l 127.0.0.1:3333创建一个联合容器
docker run -it --net container:brady alpine netstat -al Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:36328 0.0.0.0:* LISTEN Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path使用场景:
不同的容器使用同一个会调接口进行通信时,可以通过创建联合容器来实现
4、Open
该模式没有网络容器,直接完全访问宿主机网络,存在网络安全隐患,不得已情况下不推荐使用,创建容器时使用--net host来实现
[root@iz2ze7sp5njgaf81ekoudez ~]# docker run --rm --net host alpine ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 …… 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 …… 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP …… 30: br-662aeb7954f6: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN …… 102: vethc3eb910@if101: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue master docker0 state UP link/ether 42:7f:7b:ee:f1:a0 brd ff:ff:ff:ff:ff:ff 154: veth69e1658@if153: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue master docker0 state UP link/ether a6:78:6e:81:7a:24 brd ff:ff:ff:ff:ff:ff [root@iz2ze7sp5njgaf81ekoudez ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 …… 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 …… 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP …… 30: br-662aeb7954f6: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN …… 102: vethc3eb910@if101: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP …… 154: veth69e1658@if153: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP ……同宿主机的网络信息一致
相关推荐
- 对于想要更深入理解Docker网络模型的读者,建议参考Docker官方文档中关于[网络](https://docs.docker.com/network/)的部分。 - 如果对桥接网络原理感兴趣,可以查阅Linux桥接的相关资料,了解更多的网络配置细节。
在使用docker的过程中发现了几个问题,在docker里进行的网络请求经常会失败,比如npm install以及bundle install等操作,或者是作为中间层在应用中去获取api数据的过程经常会出现timeout等情况,所以开始探究docker...
总结来说,本文通过对Docker网络的深入研究,设计并实现了一种基于macvlan的新型网络系统,以解决Docker在大规模部署和复杂网络需求下的局限性。这个系统增强了跨主机通信的能力,提供了多租户隔离,支持QoS和服务...
Docker技术在网络安全教学中的应用与研究.pdf
Docker 镜像拉取时的网络问题是 Docker 用户经常遇到的问题之一,尤其是在网络环境不稳定或访问 Docker Hub 受限的情况下。解决这些问题需要对 Docker 的工作原理和网络设置有一定的了解。以下是关于如何解决 Docker...
在 Overlay 网络中,容器之间的南北流量(North-South Traffic)是通过 VTEP 设备来实现的。VTEP 设备将容器的流量封装到 VXLAN 数据包中,并将其发送到宿主机的 VXLAN 端口。 2.3 容器东西向流量 容器之间的东西...
【Docker网络性能测试报告】 本测试报告针对Docker网络性能进行了详尽的评估,重点关注了三种不同的网络连接方式:直接路由方式、OVS VXLAN和Rancher的IPSEC方式。测试在CentOS 7.0操作系统上进行,使用的Docker...
005 Docker容器网络.mp4
- **解决方案:** 这个错误通常是因为在启动 Docker 虚拟机时尝试从互联网下载最新的 Boot2Docker 映像文件时遇到网络问题。解决办法是手动下载所需的 Boot2Docker 版本,并将其放置在指定的目录下。 1. 访问 ...
overlay网络是Docker Swarm集群中常用的一种网络模式,它允许跨多个主机的容器通信。通过 VXLAN 技术,overlay网络可以在不同的物理网络上构建虚拟网络,实现容器间的透明通信。这种模式适合大规模的分布式应用和...
本手册提供了关于如何创建和管理Docker网络的步骤,包括使用docker network命令创建自定义网络。还探讨了Rancher网络,一种用于管理Docker容器网络的开源平台,以及扁平网络如何在swarm模式下实现路由。 存储管理...
**Docker网络详解** 在Docker的世界里,网络是实现容器间通信以及与外部世界连接的关键。本篇文章将深入探讨Docker的网络模型,包括基本概念、网络类型、配置方法以及实际应用案例。 ### Docker网络基础 Docker的...
#### 一、Docker网络的重要性和作用 随着云计算技术的快速发展,Docker作为一种轻量级的容器技术,在云计算领域中占据了举足轻重的地位。Docker容器通过隔离性良好的环境,为应用程序提供了一个一致性的运行环境,极...