Dockaer网络
docker本地网络类型
查看本地支持网络类型
docker network ls
[root@kk ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
11630d15b547 bridge bridge local
22c621d084e6 host host local
b3710c023570 none null local
1.bridge 相当于nat的模式
他只提供内部,容器网卡与docker0网卡,宿主机网卡之间的转换,但是无法提供由外网访问容器的作用,外部访问到容器是通过iptables的功能
自建bridge网络
当有多个独立的container之间需要彼此访问时,推荐使用自建bridge网络,而不是--link
。
创建bridge网络
docker network create --driver=brigen kk_network
2.none网络
这种网络模式下容器只有lo回环网络,没有其它网卡。none网络可以在容器创建时通过 --network=none 来指定。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性
查看host网络模式的容器信息
docker network inspect none
3.host网络
通过命令--network=host指定,使用host模式的容器可以直接使用docker host的IP地址与外接通讯,容器内部的服务端口也可以使用宿主机的端口,不需要进行nat,host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能在用了,网络的隔离线不好
要是和宿主机共用一个网络环境,容器的sshd服务的端口号会与宿主机冲突,要修改容器的sshd服务默认端口号
4.container网络
容器和容器之间公用一个网络,可以实现一个容器dang掉,起一个容器设置这个模式,新容器可以完全占用旧网络模式
Docker跨主机网络-macvlan
docker跨主机访问-macvlan实现容器之间跨主机互联
Macvlan是一个新的尝试,是真正的网络虚拟化技术的转折点。Linux实现非常轻量级,因为与传统的Linux Bridge隔离相比,它们只是简单地与一个Linux以太网接口或子接口相关联,以实现网络之间的分离和与物理网络的连接。
Macvlan提供了许多独特的功能,并有充足的空间进一步创新与各种模式。这些方法的两个高级优点是绕过Linux网桥的正面性能以及移动部件少的简单性。删除传统上驻留在Docker主机NIC和容器接口之间的网桥留下了一个非常简单的设置,包括容器接口,直接连接到Docker主机接口。由于在这些情况下没有端口映射,因此可以轻松访问外部服务。
配置macvlan
不能访问外网,只能在宿主机内部进行相互访问
一个网卡只能配置一个
docker network create --driver macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.254 -o parent=eth0 macvlan_1
--subnet=192.168.200.0/24命令指定该网络模式网段范围,这个地址可以和主机地址不一样,你要是设置了和主机地址不在一个网段上的地址,就需要--ip进行指定,另外的主机也需要,其中24代表该网段前24位相同,后8位不同,即该网段范围为:192.168.200.1~192.168.200.254,若该命令改为--subnet=192.168.200.0.16,即该网段范围为:192.168.0.1-192.168.255.254,这个范围就变的很大了。
--parent=宿主机网卡名称,绑定网卡
[root@kk ~]# docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.254 -o parent=ens33 macvlan_1 6c64f4f22cc16278dfb4094b418a9f9729eca150e10342c750dbed8fcc642649 [root@kk ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 11630d15b547 bridge bridge local 22c621d084e6 host host local 6c64f4f22cc1 macvlan_1 macvlan local b3710c023570 none null local
启动一个cen7的容器进行测试
[root@kk ~]# docker container run -it --name="kk02" --network=macvlan_1 --ip=192.168.1.50 centos:7
[root@d42171a86085 /]# ping 192.168.1.50
PING 192.168.1.50 (192.168.1.50) 56(84) bytes of data.
64 bytes from 192.168.1.50: icmp_seq=1 ttl=64 time=0.024 ms
64 bytes from 192.168.1.50: icmp_seq=2 ttl=64 time=0.033 ms
^C
--- 192.168.1.50 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 0.024/0.028/0.033/0.007 ms
192.168.1.3的主机也要做相同的通道,做好通道启动容器,更改网络模式
[root@hwf ~]# docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.254 -o garent=ens33 macvlan_1 f914986d43251c886a181edfd5413c516bbd1bc334487fe4a573baf53af6446b [root@hwf ~]# docker network ls NETWORK ID NAME DRIVER SCOPE b0ff4c28c62c bridge bridge local 22c621d084e6 host host local f914986d4325 macvlan_1 macvlan local b3710c023570 none null local
[root@kk ~]# docker container run -it --name="kk01" --network=macvlan_1 centos:7
主要保证这个macvlan网络内的主机ip地址不能冲突
macvlan的弊端:
不能访问外网,只能在局域网里玩
查看网络信息的命令
[root@kk ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
c287dd3b7ec6 bridge bridge local
22c621d084e6 host host local
f914986d4325 macvlan_1 macvlan local
b3710c023570 none null local
删除网桥
docker network rm 网桥ID号/网桥名称
这里说一点,要是网桥被容器使用了,就无法删除,把容器停止或者删除才可以使用
删除没有被使用的网桥
docker network prune
Docker跨主机访问-overlay实现
overlay可以实现容器与外网互联互通
启动consul服务,实现网络的统一配置管理
想让两个网络环境下的容器互通,那么必然涉及到网络信息的同步,所以需要先配置一下consul。直接运行下面命令。启动consul。
docker container run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
[root@kk ~]# docker container run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
在/etc/docker/daemon.json文件中添加下方内容,所有服务器都要改配置文件
{
"registry-mirrors": ["https://fooyh53n.mirror.aliyuncs.com"],
"live-restore":true,
"hosts":[
"unix:///var/run/docker.sock",
"tcp://0.0.0.0:2375"
],
"cluster-store": "consul://192.168.1.2:8500",
"cluster-advertise": "192.168.1.2:2375"
}
[root@kk ~]# vim /etc/docker/daemon.json { "registry-mirrors": ["https://fooyh53n.mirror.aliyuncs.com"], "live-restore":true, "hosts":[ "unix:///var/run/docker.sock", "tcp://0.0.0.0:2375" ], "cluster-store": "consul://192.168.1.2:8500", "cluster-advertise": "192.168.1.2:2375" }
vim /usr/lib/systemd/system/docker.service
将:ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
修改为:ExecStart=/usr/bin/dockerd
[root@kk ~]# systemctl daemon-reload
[root@kk ~]# systemctl restart docker
[root@kk docker]# docker network create -d overlay --subnet 192.168.1.2/24 --gateway 192.168.1.254 ol1
d983f4e25ea222120226a882b83d5310961f4973234c326e830d642159bd2792
[root@kk docker]# docker container run -it --network ol1 busybox
/ # ifconfig eth0 Link encap:Ethernet HWaddr 02:42:C0:A8:01:01 inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) eth1 Link encap:Ethernet HWaddr 02:42:AC:12:00:02 inet addr:172.18.0.2 Bcast:172.18.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:7 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:578 (578.0 B) TX bytes:0 (0.0 B)

评论