Docker(五)--docker网络--原生和自定义网络

目录

1. harbor仓库的镜像关闭

2. Docker原生网络

2.1 bridge网络

2.1.1 理论

2.1.2 实操

2.2 hosts模式

2.2.1 理论

2.2.2 实操

2.3 none模式

3. 自定义网络(以bridge为主) 

3.1 理论

3.2 观察俩个容器的ip切换

3.3 自定义一个网络

3.4 bridge自定义网络的操作

3.4.1 建立子网和网关

3.4.2 实现俩个docker不同网关之间的通信 


1. harbor仓库的镜像关闭

[root@server1 ~]# cd harbor/
[root@server1 harbor]# docker-compose stop  ##先停掉,使用的时候在打开

2. Docker原生网络

- docker安装后会自动创建3种网络:bridge、host、none
- 可以使用以下命令查看:
- 	[root@server2 ~]# docker network ls
		NETWORK ID     NAME      DRIVER    SCOPE
		6fa32c74c660   bridge    bridge    local
		ef3462119082   host      host      local
		8eb9e5d0f35d   none      null      local

2.1 bridge网络

2.1.1 理论

- bridge模式下容器没有一个公有ip,只有宿主机可以直接访问,外部主机是不可见的。
- 容器通过宿主机的NAT规则后可以访问外网。

2.1.2 实操

####实验前一定要开启sysctl net.ipv4.ip_forward=1  开启forawrd网络

[root@server2 ~]# yum install -y bridge-utils.x86_64 ##安装操作工具
[root@server2 ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
6fa32c74c660   bridge    bridge    local
ef3462119082   host      host      local
8eb9e5d0f35d   none      null      local
[root@server2 ~]# docker ps -a 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@server2 ~]# docker run -it --rm busybox  
/ # ip addr    ##此处退出使用ctrl+p+q


[root@server2 ~]# brctl show   ##查看桥接的文件
bridge name	bridge id		STP enabled	interfaces
docker0		8000.0242ccbd60fb	no		veth752a1a1(自动生成的刚才的后台桥接)
[root@server2 ~]# docker run  -d --name demo reg.westos.org/nginx  ##在运行一个
[root@server2 ~]# docker ps   ##查看进程
[root@server2 ~]# brctl show  ##显示桥接文件
bridge name	bridge id		STP enabled	interfaces
docker0		8000.0242ccbd60fb	no		veth752a1a1
							vethcb2ac9d (新生成的)

自动分配IP

2.2 hosts模式

2.2.1 理论

host模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。

2.2.2 实操

[root@server2 ~]# docker ps    ##查看运行的进程,然后删除
[root@server2 ~]# docker rm -f a98aaaba77b3 11483b1847ba 

[root@server2 ~]# docker run -d --name demo --network=host reg.westos.org/nginx  ##运行镜像
[root@server2 ~]# brctl show     ##没有运行的桥接文件,因为是host模式

与主机共享eth0host模式和宿主机使用的是同一个ip及端口,不需要进行端口映射 
host模式下网络是唯一的,如80端口只能用一个。启动容器也会冲突。
查看日志发现80被占用 但是如果不加host参数,可以俩个同时运行,会自动分配ip-----第一种bridge模式

2.3 none模式

- none模式是指禁用网络功能,只有lo接口,在容器创建时使用
-  --network=none指定。
[root@server2 ~]# docker rm -f demo2 
[root@server2 ~]# docker run -it --rm --network=none busybox
/ # ip addr 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 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

3. 自定义网络(以bridge为主) 

3.1 理论

- 自定义网络模式,docker提供了三种自定义网络驱动:
	bridge
	overlay    应用层
	macvlan   物理层  通信更快
	bridge驱动类似默认的bridge网络模式,但增加了一些新的功能,
	overlay和macvlan是用于创建跨主机网络。

- 建议使用自定义的网络来控制哪些容器可以相互通信,还可以自动DNS解析容器名称到IP地址。

3.2 观察俩个容器的ip切换

[root@server2 ~]# docker images     ##查看镜像
[root@server2 ~]# docker ps -a      ##保证没有任何进程
[root@server2 ~]# docker run -d --name demo busybox   ##运行镜像
[root@server2 ~]# docker inspect demo | grep "IPAddress"  ##查看ip 
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",   

[root@server2 ~]# docker stop demo    ##停止当前demo


[root@server2 ~]# docker run -d --name demo2 nginx ##重新运行镜像demo2
[root@server2 ~]# docker inspect demo2 | grep "IPAddress"  ##查看ip 变成2,
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",

[root@server2 ~]# docker start  demo   ##重新启动demo
[root@server2 ~]# docker inspect demo | grep "IPAddress"  ##ip发生变化
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.3",
                    "IPAddress": "172.17.0.3",

建立新容器,自动分配IP停止后,新建demo2,ip为172.17.0.2,自动将demo1ip回收当demo1重新启动递归分配 

3.3 自定义一个网络

[root@server2 ~]# docker rm -f demo
[root@server2 ~]# docker rm -f demo2
[root@server2 ~]# docker ps -a 
[root@server2 ~]# docker network --help

[root@server2 ~]# docker network create mynet1   ##自定义一个网络(默认是bridge)
2040f995f99339201ce2ca76fd72c80c54cdb383cbe05c17decb5e0331432181
[root@server2 ~]# docker network ls  ##查看网络列表
NETWORK ID     NAME      DRIVER    SCOPE
6fa32c74c660   bridge    bridge    local
ef3462119082   host      host      local
2040f995f993   mynet1    bridge    local
8eb9e5d0f35d   none      null      local
容器镜像
[root@server2 ~]# docker inspect demo | grep "IPAddress"  ##查看ip 
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "172.18.0.2",  ##从新生成一个网段

3.4 bridge自定义网络的操作

[root@server1 ~]# docker network create -d bridge my_net1  ##默认建立的就是bridge网络,所以加不加-d参数都可以
[root@server1 ~]# docker network ls 
NETWORK ID     NAME                        DRIVER    SCOPE
27be8b95433a   mynet1                     bridge    local

3.4.1 建立子网和网关

## 使用--ip参数可以指定容器ip地址,但必须是在自定义网桥上,默认的bridge模式不支持,同一网桥上的容器是可以互通的。

[root@server2 ~]# docker network ls 
[root@server2 ~]# docker network create --subnet 172.10.0.0/24 --gateway 172.10.0.1 mynet2    ##自定义子网和网关
[root@server2 ~]# docker inspect  mynet2
[root@server2 ~]# ip addr
[root@server2 ~]# docker run -it --rm --ip 172.10.0.10 --network mynet2 busybox
	/ # ip addr 	

3.4.2 实现俩个docker不同网关之间的通信 

- 桥接到不同网桥上的容器,彼此是不通信的。
- docker在设计上就是要隔离不同network的。

建立172.10.0.0网段

[root@server2 ~]# docker run -d --name demo1 --network mynet2 --ip 172.10.0.10 nginx
b1735154824e1303b6f2ad062b268320f94e04f9e201f20adf0c7069d226ab70
[root@server2 ~]# docker inspect  demo2  | grep "IPAddress"
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "172.10.0.2",
##mynet1不支持指定ip
[root@server2 ~]# docker run -d --name demo2 --network mynet1  nginx
b1735154824e1303b6f2ad062b268320f94e04f9e201f20adf0c7069d226ab70
[root@server2 ~]# docker ps -a

与容器交互发现同网段是可以ping通 iptables -nL 发现网络相互独立 

建立双网卡

[root@server2 ~]# docker run -it --name demo3 --network mynet1  busybox
[root@server2 ~]# docker ps 
[root@server2 ~]# docker inspect  demo | grep "IPAddress"  ##查看添加的ip

[root@server2 ~]# docker network connect mynet2 demo3  ##为demo建立双网卡
[root@server2 ~]# docker inspect  demo  | grep "IPAddress"
            "SecondaryIPAddresses": null,
            "IPAddress": "172.18.0.2",
                    "IPAddress": "172.18.0.2",
                    "IPAddress": "172.10.0.3",
[root@server2 ~]# docker inspect  demo  | grep "Gateway"  
            "Gateway": "172.18.0.1",
            "IPv6Gateway": "",
                    "Gateway": "172.18.0.1",
                    "IPv6Gateway": "",
                    "Gateway": "172.10.0.1",
                    "IPv6Gateway": "",

结果发现18网段与10网段可以实现网络互通

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值