Docker系统六:Docker网络管理
Docker网络
I. Docer的通信方式
默认情况下,Docker使用网桥(brige)+ NAT的通信模型.
Docker启动时会自动创建网桥Docker0,并配置ip 172.17.0.1/16
ifconfig docker0
docker0 Link encap:Ethernet HWaddr 02:42:e0:31:ac:10
inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1846 errors:0 dropped:0 overruns:0 frame:0
TX packets:5562 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:168242 (168.2 KB) TX bytes:23550976 (23.5 MB)
Docker容器内容及容器与宿主机通信方式(Brige方式)
当Docker启动容器时,会创建一对veth虚拟网络设备:
- 一个附加到网桥上;
- 一个加入容器的网张命名空间并被改名为eth0
Docker容器与外部网张通信(NAT方式)
1)容器访问外网
Docker通过创建如下MASQUERADE规则进行外部网络访问:
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 !-o docker0 -j MASQUERADE
规则说明:奖所有从容器(172.17.0.0/16)发往外网的包的源地址都改为Host(宿主机)的IP。
2)外网访问容器
当容器提供的服务需要暴露给外部网络里,Docker启动容器里,会创建SNAT规则。eg,启动一个apache容器:
docker run -d -p 80:80 apache
在上述命令背后其实会创建如下SNAT规则:
iptables -t nat -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
iptables -t nat -A DOCKER !-i docker0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.2:80
II. Docker的网络配置
Docker中很多网络相关的参数主是有:
- Docker进程本身的,影响所有docker容器;
- Docker容器相关的,只影响当前容器;
1. 网络配置参数
1)Docker进程的网络配置
相关参数如下:
-b, --bridge="" ;//指定Docker使用的网络设备。默认下,Docker会创建docker0网桥设备,通过该参数可以指定Docker使用已存在的网桥设备
--bip="" ;//指定网桥设备的docker0的IP和掩码,使用标准的CIDR形式,如192.168.1.5/24
--dns=[] ;//强制docker使用指定的DNS servers
--dns-search=[] ;//强制docker使用指定的DNS search domains
--icc=true ;//打开inter-container沟通
--ip="0.0.0.0" ;//绑定容器端口时的默认IP
--ip-forward=true ;//打开 net.ipv4.ip_forward
--iptables=true; //打开docker的iptables rules增加
--mtu=0; //设置容器的网络MTU,如果没有设置任何值则默认route MTU ,当默认路由不存在时,使用1500
Note:
--dns/--dns-search: 配置容器的DNS,改参数可以在启动Docker进程时指定(成为所有容器的默认值),也可以在启动容器(docker run)时指定(覆盖默认值)。
2)容器的网络配置
下面是docker run时的一些网络配置参数:
--net="bridge" //用于指定容器使用的网络通信方式;
它有如下四个值:
- bridge : Docker容器的默认通信方式;
- none : 容器没有网络栈,此时容器无法与外界通信;
- container:<name|id> : 使用其他容器(name或id)的网络栈。实际上,Docker会将该容器加到指定的容器network namespace, 这是一种非常有用的方式。
- host : 表示容器使用Host的网络,没有自己独立的网络栈。实际上,在这种情况下,Docker不会给容器创建单独的网络名字空间(newwork namespace).由于容器可以完全访问Host的网络,所以此方式也是不安全的。
2. 配置DNS
一般来说每个容器的hostname和DNS配置信息是不同的,我们不可能为每个容器都构建一个镜像,并在镜像中指定这些信息。实际上,Docker在启动容器时,会使用bind mount动态挂载/etc/hostname,/etc/hosts,/etc/resolv.conf几个文件,覆盖镜像中原来的文件。通过如下命令我们可以在容器内看到这个信息:
docker exec -it {容器} /bin/bash
mount
/dev/vda1 on /etc/resolv.conf type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/vda1 on /etc/hostname type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/vda1 on /etc/hosts type ext4 (rw,relatime,errors=remount-ro,data=ordered)
所以,我们可以通过命令行参数在启动Doker时指定DNS
3. Docker网络相关的一些参考
关于docker网络的概念:理解Docker容器网络之Linux Network Namespace
关于源地址和目地地址的转换关系:iptables中DNAT、SNAT和MASQUERADE的理解
Docker相关的网络详解:Docker网络详解
iptables命令详解:iptables命令详解
Docker系统六:Docker网络管理的更多相关文章
- Docker(十六)-Docker的daemon.json的作用
docker安装后默认没有daemon.json这个配置文件,需要进行手动创建.配置文件的默认路径:/etc/docker/daemon.json 一般情况,配置文件 daemon.json中配置的项 ...
- BI系统打包Docker镜像及容器化部署的具体实现
在过去的几年中,"云"作为明星热词站在了各种新潮技术之中,你可能使用过,但说不清它的原理:或者是没用过,但听过它的大名:也可能连它的名字都没听过,但你对这只蓝色鲸鱼一定十分眼熟.作 ...
- 【新技术】CentOS系统下docker的安装配置及使用详解
1 docker简介 Docker 提供了一个可以运行你的应用程序的封套(envelope),或者说容器.它原本是dotCloud 启动的一个业余项目,并在前些时候开源了.它吸引了大量的关注和讨 ...
- Docker(六):Docker 三剑客之 Docker Swarm
实践中会发现,生产环境中使用单个 Docker 节点是远远不够的,搭建 Docker 集群势在必行.然而,面对 Kubernetes, Mesos 以及 Swarm 等众多容器集群系统,我们该如何选择 ...
- centos7系统下 docker 环境搭建
运行环境: VMware Workstation Pro 在虚拟机中安装centos7系统, 选择最小安装, 网络连接方式选择的桥接(与宿主机在同一IP段)centos7一定要安装64位, docke ...
- Centos系统下Docker的安装
一.检查内核版本 安装Docker,需要linux内核大于3.10 使用uname -r 来检查 二. Centos系统下Docker的安装 1. 安装需要的软件包 yum install -y yu ...
- CentOS系统下docker的安装与卸载
Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制, ...
- docker容器管理及网络管理
防火墙规则—— INPUT 主要用于主机防火墙,设置规则屏蔽处理进入本机的数据包示例:禁止10.180.100.141这个机器访问我本机的web服务iptables -t filter -A INPU ...
- 系统学习Docker 践行DevOps理念
Docker代表的容器技术是近两年的大热技术,和人工智能.区块链等热点不同,容器技术的门槛并不高,每一个开发.测试.运维人员都能在日常工作中掌握和使用,是当今IT从业人员的必备技能之一.本课程会带大家 ...
随机推荐
- 深入分析java传参
概述 java中的参数传递问题可以根据参数的类型大致可以分为三类:传递基本类型,传递String类型,传递引用类型,至于最终是否可以归纳为值传递和引用传递,根据每个人的理解不同,答案不同,此 ...
- css中 padding属性的数值赋予顺序为
4种可能的情况,举例说明:padding:10px; 四个内边距都是10pxpadding:5px 10px; 上下5px 左右10pxpadding:5px 10px 15px; 上5px 右10p ...
- 【转】GPS基线的精化处理
影响基线解算结果的因素主要有: (1)基线解算时所设定的起点坐标不准确. 起点坐标不准确,会导致基线出现尺度和方向上的偏差,造成的影响目前还没有较容易的方法来加以判别,因此,在实际工作中,只有尽量提高 ...
- Linux 下Telnet 服务安装
Linux 下Telnet 服务安装 注:以下所有命令均在root用户下执行. 命令测试在Linxu版本6.x下完成,部分命令不适用Linux 7.0以上 1.简介 默认情况下Linux只安装了Tel ...
- [TFRecord格式数据]利用TFRecords存储与读取带标签的图片
利用TFRecords存储与读取带标签的图片 原创文章,转载请注明出处~ 觉得有用的话,欢迎一起讨论相互学习~Follow Me TFRecords其实是一种二进制文件,虽然它不如其他格式好理解,但是 ...
- centos 6.5静态网址简单配置
详细配置参数参考如下: DEVICE=eth0HWADDR=08:00:27:F1:72:C9TYPE=EthernetUUID=dab98425-fa46-4a5b-8f47-cf846d4acb3 ...
- NIO基础篇(二)
Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件.这样,一个单独的线程可以管理多个channel,从而管理多个网络连接. 传统的 ...
- BZOJ 3620: 似乎在梦中见过的样子 [KMP 暴力]
和我签订契约,成为魔法少女吧 题意:求所有形似于A+B+A 的子串的数量 , 且len(A)>=k,len(B)>=1 位置不同其他性质相同的子串算不同子串,位置相同但拆分不同的子串算同一 ...
- BZOJ 3790: 神奇项链 [Manacher 贪心]
3790: 神奇项链 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 405 Solved: 200[Submit][Status][Discuss] ...
- Python tutorial阅读之使用 Python 解释器
配置环境变量后,一般可以直接通过Python或指定Python版本号来调用Python. Python 解释器有些操作类似 Unix shell:当使用终端设备(tty)作为标准输入调用时,它交互的解 ...