7、docker容器互联

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

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

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

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

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

7.1、docker 容器的网络基础

1、docker0

安装docker的时候,会生成一个docker0的虚拟网桥

2、Linux虚拟网桥的特点

可以设置ip地址

相当于拥有一个隐藏的虚拟网卡

 docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 

  link/ether 02:42:28:ae:c0:42 brd ff:ff:ff:ff:ff:ff

  inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0

​    valid_lft forever preferred_lft forever

inet6 fe80::42:28ff:feae:c042/64 scope link

每运行一个docker容器都会生成一个veth设备对,这个veth一个接口在容器里,一个接口在物理机上。

3、安装网桥管理工具

yum install bridge-utils -y 
brctl show 

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

[root@docker ~]# brctl show 
bridge name        bridge id            STP enabled       interfaces
docker0            8000.024267d9cd23    no               veth2c4efe6
                                                   veth966124d

7.2、docker 容器的互联

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

  cd dockerfile/inter-image

​  vim dockerfile

FROM centos

RUN yum install wget -y

RUN yum install nginx -y

EXPOSE 80

CMD /bin/bash
docker build -t="inter-image" .

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

第一种方法:

例:

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

docker run --name test1 -itd inter-image

进入到容器里面启动nginx:

/usr/sbin/ngnx

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

docker run --name test2 -itd inter-image

(3)进入到test1容器和test2容器

可以看两个容器的ip,分别是
test1    172.17.0.20    
test2    172.17.0.21

进入到test2容器:
docker exec -it test2 /bin/bash

ping 172.17.0.20 

可以看见能ping同test1容器的ip

curl http://172.17.0.20  

可以访问到test1容器的内容

上述方法假如test1容器重启,那么在启动可能会重新分配ip地址,所以为了使ip地址变了也可以访问可以采用下面的方法
7.2.1、 docker link设置网络别名

第二种方法:

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

--link

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

例:
1.启动一个test3容器

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

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

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

3.查看test3和test5的ip

test3    172.17.0.22
test5    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变了也可以通

7.3、docker容器的网络模式

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

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

​  host模式:使--net =host指定

​  none模式:使--net =none指定

​  container模式:使用--net =container:NAME orID指定
7.3.1、 none模式

Docker 网络 none模式 是指创建的容器没有网络地址,只有lo网卡

  docker run -itd --name none --net=none --privileged=true centos 

​  docker exec -it none /bin/bash

​  ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

  inet 127.0.0.1/8 scope host lo

  valid_lft forever preferred_lft forever
7.3.2、container模式

Docker网络container模式是指,创建新容器的时候,通过–net container参数,指定其和已经存在的某个容器共享一个 Network Namespace。如下图所示,右方黄色新创建的container,其网卡共享左边容器。因此就不会拥有自己独立的 IP,而是共享左边容器的 IP 172.17.0.2,端口范围等网络资源,两个容器的进程通过 lo 网卡设备通信。

和已经存在的none容器共享网络

   docker run --name container2 --net=container:none -it --privileged=true centos

​   ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

  inet 127.0.0.1/8 scope host lo

  valid_lft forever preferred_lft forever
7.3.3、bridge模式

默认选择bridge的情况下,容器启动后会通过DHCP获取一个地址

创建桥接网络

  docker run --name bridge -it --privileged=true centos bash



​  ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

  inet 127.0.0.1/8 scope host lo

  valid_lft forever preferred_lft forever

64: eth0@if65: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 

  link/ether 02:42:ac:11:00:0d brd ff:ff:ff:ff:ff:ff link-netnsid 0

  inet 172.17.0.13/16 brd 172.17.255.255 scope global eth0

  valid_lft forever preferred_lft forever
7.3.4、host模式

Docker网络host模式是指共享宿主机的网络

#共享宿主机网络

docker run --name host -it --net=host --privileged=true centos bash
作者:wiki  创建时间:2024-07-19 22:35
最后编辑:wiki  更新时间:2024-08-13 10:12