`

Docker中的网络

阅读更多

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容器网络结构
  • 大小: 81.5 KB
分享到:
评论

相关推荐

    CentOS7下Docker桥接网络配置

    - 对于想要更深入理解Docker网络模型的读者,建议参考Docker官方文档中关于[网络](https://docs.docker.com/network/)的部分。 - 如果对桥接网络原理感兴趣,可以查阅Linux桥接的相关资料,了解更多的网络配置细节。

    docker容器内网络请求缓慢问题解决

    在使用docker的过程中发现了几个问题,在docker里进行的网络请求经常会失败,比如npm install以及bundle install等操作,或者是作为中间层在应用中去获取api数据的过程经常会出现timeout等情况,所以开始探究docker...

    基于macvlan的Docker容器网络系统的设计与实现1

    总结来说,本文通过对Docker网络的深入研究,设计并实现了一种基于macvlan的新型网络系统,以解决Docker在大规模部署和复杂网络需求下的局限性。这个系统增强了跨主机通信的能力,提供了多租户隔离,支持QoS和服务...

    Docker技术在网络安全教学中的应用与研究.pdf

    Docker技术在网络安全教学中的应用与研究.pdf

    网络故障排除:解决 Docker 镜像拉取的网络问题

    Docker 镜像拉取时的网络问题是 Docker 用户经常遇到的问题之一,尤其是在网络环境不稳定或访问 Docker Hub 受限的情况下。解决这些问题需要对 Docker 的工作原理和网络设置有一定的了解。以下是关于如何解决 Docker...

    主流Docker网络的实现原理概述.pdf

    在 Overlay 网络中,容器之间的南北流量(North-South Traffic)是通过 VTEP 设备来实现的。VTEP 设备将容器的流量封装到 VXLAN 数据包中,并将其发送到宿主机的 VXLAN 端口。 2.3 容器东西向流量 容器之间的东西...

    Docker网络性能测试报告.pptx

    【Docker网络性能测试报告】 本测试报告针对Docker网络性能进行了详尽的评估,重点关注了三种不同的网络连接方式:直接路由方式、OVS VXLAN和Rancher的IPSEC方式。测试在CentOS 7.0操作系统上进行,使用的Docker...

    005 Docker容器网络.mp4

    005 Docker容器网络.mp4

    windows下安装docker

    - **解决方案:** 这个错误通常是因为在启动 Docker 虚拟机时尝试从互联网下载最新的 Boot2Docker 映像文件时遇到网络问题。解决办法是手动下载所需的 Boot2Docker 版本,并将其放置在指定的目录下。 1. 访问 ...

    Docker的网络模式示意图.zip

    overlay网络是Docker Swarm集群中常用的一种网络模式,它允许跨多个主机的容器通信。通过 VXLAN 技术,overlay网络可以在不同的物理网络上构建虚拟网络,实现容器间的透明通信。这种模式适合大规模的分布式应用和...

    Docker 手册(Docker Handbook).pdf

    本手册提供了关于如何创建和管理Docker网络的步骤,包括使用docker network命令创建自定义网络。还探讨了Rancher网络,一种用于管理Docker容器网络的开源平台,以及扁平网络如何在swarm模式下实现路由。 存储管理...

    docker网络md,学习代码

    **Docker网络详解** 在Docker的世界里,网络是实现容器间通信以及与外部世界连接的关键。本篇文章将深入探讨Docker的网络模型,包括基本概念、网络类型、配置方法以及实际应用案例。 ### Docker网络基础 Docker的...

    Docker原生网络和实现原理.docx

    #### 一、Docker网络的重要性和作用 随着云计算技术的快速发展,Docker作为一种轻量级的容器技术,在云计算领域中占据了举足轻重的地位。Docker容器通过隔离性良好的环境,为应用程序提供了一个一致性的运行环境,极...

Global site tag (gtag.js) - Google Analytics