🐣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