🐣Docker网络管理
容器间的通信
默认情况下
同宿主机不同容器可相互通信
不同宿主机之间容器IP地址相同重复,不能相互通信;
#同主机不同容器禁止访问设置
vim /lib/systemd/system/docker.service
ExecStart选项中加入
--icc=false
容器名称互联
docker run --name <容器名称> #指定容器的名称
docker run --link <目标通信的容器ID或者名称> #创建新容器时引用上面容器的名称
#Example
## Server1
docker run -it --name A_Server alpine:3.11 sh
## Server2
docker run -it --name B_Server --link A_Server alpine:3.11 sh
/ # cat /etc/hosts
172.17.0.2 server1 5c299948c052
172.17.0.3 1c045c904669
## 创建容器别名
docker run -it --name server3 --link server2:server2-alias alpine:3.11
#多个别名
docker run -it --name server3 --link server2:"server2-alias1 server2-alia2" alpine:3.11
网络连接模式
Docker支持5种模式
none
brige
host
container
network-name
#查看默认网络配置
docker network ls
#指定模式
docker run --network <mode>
docker run --net=<mode>
bridge网络模式
此模式创建的容器为每一个容器分配自己的网络IP等信息,并将容器连接到一个虚拟网桥与外界通信
需要宿主机启动ip_forward功能
特点:
网络资源隔离:不同宿主机容器无法直接通信,各网络独立,但容器可以访问宿主机和其它主机等网络
无需手动配置
可访问外网:利用宿主机物理网卡,通过SNAT连接外网
性能较低
端口管理繁琐
#查看bridge信息
docker network inspect bridge
Host网络模式
此模式直接使用宿主机网卡和IP地址。
特点:
共享宿主机网络
网络性能无损耗
各容器网络无隔离
网络资源无法分别统计
端口管理困难
不支持端口映射
#使用host网络模式
docker run -d --network host --name web1 nginx-centos7-base:1.6.1
none网络模式
此模式容器不会进行任何网络配置,没有网卡、IP、路由,所以极少使用此模式。
特别:
默认无网络功能,无法和外部通信
Container网络模式
此模式是和已存在的容器共享一个网络,新创建的容器不会创建自己的网卡、IP,而是和被指定的容器共享IP和端口。
特点:
与宿主机网络空间隔离
容器间共享网络空间
适合频繁的容器间的网络通信
直接使用对方的网络
docker run -d --name server2 --network container:server1 nginx
自定义网络模式
使用自己定义的网段地址
docker network create -d bridge --subnet 172.12.0.0/16 --gateway 172.12.0.1 test-net
#利用自定义网络创建容器
docker run -it --network test-net alpine sh
实现容器网络互通
docker network connect TESTA TESTB
#自定义网络连通默认网络(bridge)容器
docker network connect bridge TESTA
#断开
docker network disconnect bridge TESTA
利用Open vSwitch实现跨主机的容器间互联
Weave实现跨主机的容器间互联
Last updated
Was this helpful?