标签:docker 网络 dns networking
容器和宿主机、容器之间以及夸主机容器如何通讯呢?这就需要使用到Docker网络。
在前面的介绍中我们在Dockerfile中通过EXPOSE参数来设置容器暴露的端口,让在docker run中使用-p来设置宿主机端口到容器端口的映射,这只是最简单的宿主机和容器通讯,同样使用宿主机IP:PORT方式可以让其他容器和该容器通讯,但是这样有个问题,首先应用程序需要对IP进行硬编码,其次容器每次重启IP都会变化,显然在生产环节中应该做到的尽可能的解耦,下面我们先看一下Docker网络的构成。
查看网络设置
启动docker服务就会产生一个docker0的虚拟网桥设备。veth*这个是启动一个容器就会产生一个这样的设备该设备与容器内的etho虚拟网卡对应,这个veth*你可以理解为虚拟网卡,这个虚拟网卡插在docker0这个虚拟网桥上。veth*就是容器eth0在宿主机上的映射。
下面看一下docker run命令中和网络有关的参数:
--dns=IP #指定DNS服务器 --dns-search=DOMAIN #指定搜索域 -h HOSTNAME #设置容器的主机名称 --link=容器名:别名 #启动该容器时与指定的容器进行链接,这样容器间可以通过名称来访问 -p #映射主机端口 --net=bridge #默认配置,为容器创建独立的网络命名空间,分配网卡、IP地址并通过veth接口 #将容器挂到docker0虚拟网桥上。 --net=none #为容器创建独立的网络命名空间,但不进行网络设置,容器没有网卡和IP --net=host #容器和宿主机共享网络设置,在容器中看到的网络信息都与宿主机一样,也就是 #不为容器创建独立的网络命名空间。 --net=user_defined_network #用户自行使用network创建一个网络,同一个网络内的容器彼 #此可见。类似于vmware中你可以创建多个网络通道比如vmnet1 #、vmnet2等。 --net=container:容器名称或者ID #表示该容器共享指定容器的网络命名空间。
容器的DNS配置:
容器中的主机名和DNS设置是通过/etc/resolv.conf、/etc/hostname和/etc/hosts三个文件来维护的,如下图:
/etc/resolv.conf文件在创建容器时,默认和宿主机上的一样;/etc/hosts文件默认只有一条容器自己的记录;/etc/hostname记录了容器自己的主机名。你可以直接修改容器的这三个文件,但是容器一旦重启就失效了。
所以在运行docker run的时候使用--dns=IP来在容器中的/etc/rsovle.conf文件之后添加额外的DNS服务器地址。
本文出自 “小恶魔的家” 博客,请务必保留此出处http://littledevil.blog.51cto.com/9445436/1922922
标签:docker 网络 dns networking
原文地址:http://littledevil.blog.51cto.com/9445436/1922922