docker网络

docker run创建Docker容器时,可以用–net选项指定容器的网络模式,Docker有以下4种网络模式:

Ø bridge模式:使--net =bridge指定,默认设置;

Ø host模式:使--net =host指定;

Ø none模式:使--net =none指定;

Ø container模式:使用--net =container:NAME orID指定。

参考:http://www.docker.org.cn/dockerppt/111.html

一:docker 容器的网络基础

1.docker0:

linux的虚拟网桥

在OSI七层模型中的数据链路层

2.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个地址

通过veth*与容器通信

3.安装网桥管理工具:

yum install bridge-utils -y

brctl show 可以查看到有一个docker0的网桥设备,下面有很多接口,每个接口都表示一个启动的docker容器,因为我在docker上启动了很多容器,所以interfaces较多,如下所

4.修改docker0地址:

ifconfig docker0 192.168.200.1 netmask 255.255.255.0

然后重启docker:

service docker restart

创建一个容器,进去之后ifconfig可以看见docker0的ip地址是我们刚才设置的了

5.添加虚拟网桥

brctl addbr br0

ifconfig br0 172.16.1.1 netmask 255.255.0.0(我的宿主机docker0地址是172.17.42.1)

更改docker守护进程的启动配置(docker1.7按如下方式改):

/etc/sysconfig/docker 中添加

other_args="-b=br0"

重启docker:service docker restart

ps -ef | grep docker 可以看见br0这个参数

docker run -it centos:6.9 /bin/bash

ifconfig可以看见ip地址是172.16.0.1

也就是说们启动docker时,在/etc/sysconfig/docker里修改other_args="-b=br0",在创建docker容器的时候,容器的ip就是172.16.*.*,也就是我们新建立的网桥

二:docker 容器的互联(相互之间的访问)

下面用到的镜像的dockerfile文件如下:

cd dockerfile/inter-image

vim dockerfile

FROM centos:7
RUN yum install epel-release -y
RUN yum install nginx -y
RUN sed -i "7s/^/#/g" /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD /bin/bash

docker build -t="inter-image" .

允许所有容器间互联(也就是访问)

第一种方法:

例:

(1)基于上面的inter-image镜像启动第一个容器test1

docker run --name test1 -it inter-image

进入到容器里面启动nginx:

/usr/sbin/ngnx

Ctrl +p,ctrl+q 退出

(2)基于上面的inter-image镜像启动第二个容器test2

docker run --name test2 -it inter-image

ctrl+p和ctrl+q退出容器

(3)进入到test1容器和test2容器,可以看两个容器的ip,分别是

172.17.0.20和172.17.0.21

docker exec -it test2 /bin/bash

ping 172.17.0.20 可以看见能ping通test1容器的ip

curl http://172.17.0.20    

可以访问到test1容器的内容

 

上述方法假如test1容器重启,那么在启动就会重新分配ip地址,所以为了使ip地址变了也可以访问可以采用下面的方法

 

第二种方法:

可以给容器起一个代号,这样可以直接以代号访问,避免了容器重启ip变化带来的问题

--link

docker run --link=[CONTAINER_NAME]:[ALIAS] [IMAGE][COMMAND]

例:

1.启动一个test3容器

docker run --name test3 -it inter-image /bin/bash

启动nginx:

/usr/sbin/nginx 

Ctrl+p和ctrl+q退出或者exit退出

2.启动一个test5容器,--link做链接,那么当我们重新启动test3容器时,就算ip变了,也没关系,我们可以在test5上ping别名webtest

docker run --name test5 -it --link=test3:webtest inter-image /bin/bash

ctrl+p和ctrl+q退出

3.test3和test5的ip分别是172.17.0.22和172.17.0.24

4.重启test3容器

docker restart test3

发现ip变成了172.17.0.25

5.进入到test5容器 

docker exec -it test5 /bin/bash

ping test3容器的ip别名webtest可以ping通,尽管test3容器的ip变了也可以通

 

拒绝容器互联(拒绝容器相互访问)

docker守护进程的启动项

--icc=false

修改启动项的配置文件

vim /etc/sysconfig/docker

在最后一行添加如下参数:

other_args="-icc=false"

重启docker容器配置生效,然后分别运行test3,test5,在test5上ping test3的ip(webtest),会发现ping不通

原文地址:https://www.cnblogs.com/faberbeta/p/13397726.html