title: Docker网络详解(三)——默认网络
date: 2015-12-01 09:32:08
tags: docker
categories: Docker Network
在Docker中,网络是很重要的部分,之前写过一篇有关Docker的几种网络模式的文章:Docker之四种网络模式,接下来的几篇文章将详细讲解Docker网络的原理和配置。
这篇文章介绍Docker默认bridge网咯的配置,这部分我也没怎么看懂,不喜勿喷。
目录:
* 自定义网桥
* 配置容器的DNS
* 配置docker0网桥
自定义网桥
众所周知,Docker在安装时默认建立了docker0网桥,默认情况下,所有以birdge网络模式启动的容器都通过veth pair设备连接到docker0网桥上。
除了使用默认创建的docker0网桥,在启动docker daemon
时,我们可以指定自己创建的网桥,下面先来看看怎么自定义网桥:
在Linux中创建网桥需要brctl
命令,如果没有安装请使用sudo apt-get install bridge-utils
安装。接下来就可以创建自定义的网桥了:
$ sudo brctl addbr bridge0 #创建网桥,命名为 bridge0
$ sudo ip addr add 192.168.5.1/24 dev bridge0 #分配IP地址
$ sudo ip link set dev bridge0 up #启动网桥
之后,就可以在启动docker daemon
时指定我们自己的网桥了:
$ sudo service docker stop #停止docker daemon
$ sudo ip link set dev docker0 down #停止docker0网桥
$ sudo brctl delbr docker0 #删除docker0网桥
$ docker daemon --bridge=bridge0
配置容器的DNS
这部分的内容有关容器中三个重要的文件:
/etc/hostname
/etc/hosts
/etc/resolv.conf
其中hostname
文件的内容可以在docker run
时通过-h
,--hostname
指定,如果没有指定,默认为容器的短ID。这个hostname对外是不可见的,即不会出现在docker ps
中也不会出现在任何其他容器的hosts
文件中。
resolv.conf
是与DNS密切相关的文件。与其相关的命令标识有:
--dns=IP_ADDRESS #在`resolv.conf`文件添加一个`server`行,当容器中的进程需要解析一个没有在hosts文件中的hostname值时,就把它发给IP_ADDRESS指定的地址解析它。
--dns-search=DOAMIN #
--dns-opt=OPTION #
需要注意,不要手动过编辑resolv.conf
文件。
配置docker0网桥
默认情况下,Docker在创建docker0
之后会配置它,给它分配IP,掩码,网络范围,并指定MTU(最大传输单元)。这些内容也可以由用户手动配置。
配置的命令标识如下:
--bip=CIDR
给docker0
分配特定的IP地址,并设置子网掩码。格式为:--bip=192.168.1.5/24
--fixed-cidr=CIDR
:限制docker0
分配给容器的IP的范围。格式为:--fixed-cidr=192.168.1.0/25
,指定的范围必须是IPV4地址,且必须是docker0所在网络范围内的一个子网,或是由--bridge
指定的网桥的IP所在网络范围内的一个子网。此后,为容器分配IP时就会从这个范围内选择一个可用的IP地址。--mtu=BYTES
:覆盖docker0
默认的最大传输单元。