Docker 容器的网络连接

栏目: 编程工具 · 发布时间: 6年前

内容简介:通过ifconfig查看docker0的网络设备,docker守护进程就是通过docker0为docker的容器提供网络连接的各种服务。docker守护进程就是通过docker0为docker容器提供网络连接的各种服务。docker0 就是Linux的虚拟网桥 。OSI七层模型中的网桥:

通过ifconfig查看 docker 0的网络设备,docker守护进程就是通过docker0为docker的容器提供网络连接的各种服务。

[root@localhost ~]# ifconfig docker0
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 0.0.0.0
        inet6 fe80::42:2fff:fe56:7b2e  prefixlen 64  scopeid 0x20<link>
        ether 02:42:2f:56:7b:2e  txqueuelen 0  (Ethernet)
        RX packets 27406  bytes 2657911 (2.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 42036  bytes 58020300 (55.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
复制代码

docker守护进程就是通过docker0为docker容器提供网络连接的各种服务。docker0 就是 Linux 的虚拟网桥 。

OSI七层模型中的网桥:

Docker 容器的网络连接

Linux虚拟网桥的特点:

  • 可以设置IP地址
  • 相当于拥有一个隐藏的虚拟网卡

docker0的地址划分:

  • IP:172.17.42.1 子网掩码: 255.255.0.0
  • MAC: 02:42:ac:11:00:00 到 02:42:ac:11:ff:ff
  • 总共提供65534个地址

docker守护进程在一个容器启动时,实际上它要创建网络连接的两端。一端是在容器中的网络设备,而另一端是在运行docker守护进程的主机上打开一个名为veth*的一个接口,用来实现docker这个网桥与容器的网络通信。

Docker 容器的网络连接

下面我们看一下实际的过程: 需要查看网桥,需要linux的网桥管理程序,在Ubuntu中通过 apt-get install bridge-utils。

$ sudo brctl show
bridge name    bridge id              STP    enabled    interfaces
docker0        8000.0242ed943d02      no
复制代码

运行一个docker容器,在容器中查看它的网络设备(如果没有ifconfig命令,通过apt-get install -y net-tools)。

root@b2a3136f5425:/# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:02 
inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:145 errors:0 dropped:0 overruns:0 frame:0
TX packets:60 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 
RX bytes:184985 (184.9 KB) TX bytes:4758 (4.7 KB)

lo Link encap:Local Loopback 
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0 
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
复制代码

docker已经自动创建了eth0的网卡,注意观察ip地址和mac地址。不要退出容器,再运行如下查看网桥的状态。

$ sudo brctl show
bridge name    bridge id           STP    enabled    interfaces
docker0    8000.0242ed943d02       no                veth95521e6
复制代码

我们看到在interface中多了一个veth*的这样一个接口。通过ifconfig命令同样可以看到这个网络接口。

自定义 docker0

  • 修改docker0默认分配的ip地址
sudo ifconfig docker0 192.168.200.1 netmask 255.255.255.0
复制代码

修改完后,重启docker服务 sudo service docker restart. 新运行的容器地址就变成了新的ip地址了。

  • 添加虚拟网桥
sudo brctl addbr br0
sudo ifconfig br0 192.168.100.1 netmask 255.255.255.0
复制代码

更改docker守护进程的启动配置:

vim /etc/default/docker 中添加 DOCKER_OPS的值 -b=br0.
复制代码

重启docker服务即可。

二、Docker 容器的互联

用于测试的Docker镜像 Dockerfile:

FROM ubuntu:14.04
RUN apt-get install -y ping
RUN apt-get update
RUN apt-get install -y nginx
RUN apt-get install -y curl
EXPOSE 80
CMD /bin/bash
复制代码

1. 允许所有容器互联

在同一宿主机下,docker的容器是通过虚拟网桥来进行连接的。那么在默认情况下,在同一宿主机中运行的容器都是可以互相连接的。

--icc=true 默认

容器的ip地址实际上是一个不可靠的连接,因为它会随着容器的启动而改变。

docker run --link=容器名:别名
复制代码

查看在容器中产生的哪些影响

$ env

查看环境变量,可以看到大量以WEBTEST*开头的环境变量,这些环境变量是在容器启动时,由docker添加的。我们还可以查看在/ect/host文件,这里添加了webtest的地址映射。当docker重启启动容器时 /ect/host所对应的ip地址发生了变化。也就是说, 针对于指定了link选项的容器,在启动时docker会自动修改ip地址和我们指定的别名之间的映射 。环境变量也会做出相应的改变。

2. 拒绝所有容器间互联

Docker守护进程的启动选项

--icc=false

修改vim /etc/default/docker,在末尾添加配置 DOCKER_OPTS="--icc=false"。
复制代码

需要重启docker的服务 sudo service docker restart.即使是link也ping不通。

3. 允许特定容器间的连接

Docker守护进程的启动选项

--icc=false --iptables=true

--link 在容器启动时添加link

docker利用iptables中的机制,在icc=false时,阻断所有的docker容器间的访问,仅仅运行利用link选项配置的容器进行相互的访问。

注: 如果出现ping不通的情况,可能为iptables的问题(DROP规则在docker之前了)。

sudo iptables -L -n    查看iptables规则的情况
sudo iptables -F    清空iptables规则设置
sudo service docker restart 重新启用docker的服务
sudo iptables -L -n 再来查看iptables的设置,docker的规则链已经在第一位
复制代码

重新启动容器即可。

欢迎扫码或微信搜索公众号《程序员果果》关注我,关注有惊喜~

Docker 容器的网络连接

以上所述就是小编给大家介绍的《Docker 容器的网络连接》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Smashing Book

The Smashing Book

Jacob Gube、Dmitry Fadeev、Chris Spooner、Darius A Monsef IV、Alessandro Cattaneo、Steven Snell、David Leggett、Andrew Maier、Kayla Knight、Yves Peters、René Schmidt、Smashing Magazine editorial team、Vitaly Friedman、Sven Lennartz / 2009 / $ 29.90 / € 23.90

The Smashing Book is a printed book about best practices in modern Web design. The book shares technical tips and best practices on coding, usability and optimization and explores how to create succes......一起来看看 《The Smashing Book》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具