Docker网络管理

Docker默认的网络设置

默认在每个宿主机会生成一个名称为docker0的网卡  默认是172.17.0.1/16

每次新建容器后
宿主机多了一个虚拟网卡和容器的网卡组合成一个网卡
容器会自动获取一个172.17.0.0/16网段的随机地址
容器获取的地址并不固定,每次容器重启,可能会发生地址变化

容器间的通信

默认情况下:同一个宿主机的不同容器可相互通信
不同宿主机之间容器IP地址重复,默认不能相互通信 

禁止同一宿主机的不同容器间通信

dockerd --icc   (默认为true)
此配置可以禁止同一个宿主机的容器之间通信
修改/lib/systemd/system/docker.service文件
ExecStart=/usr/bin/dockerd -H fd:// --containerd==/run/containerd/containerd,sock--icc=false

修改默认docker0网桥的网络配置

默认docker后会自动生成一个docker0的网桥,使用的IP是172.17.0.0.1/16,可能和宿主机的网段发生冲突,可将其修改为其他网段的地址,避免冲突
方法1
vim /etc/docker/daemon.json   此文件也用于镜像加速
添加 "bip":"192.168.100.1/24"
方法2
vim /lib/systemd/system/dicker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd==/run/containerd/containerd,sock--icc=false--bip=192.168.100.1/24
重启配置文件:systemctl daemon-reload     systemctl restart docker.service
注意:这两种方法不可混用,否则将无法启动docker服务

修改默认网络设置使用自定义网桥

新建容器默认使用docker0的网络配置,可以修改默认指向自动义的网桥网络
1.安装bridge-utils包
使用brctl创建网桥   brctl addbr  br0
2.使用 ip address 命令   指定网桥的网段
ip address a 192.168.100.1/24  dev br0
3.指定网桥
vim /lib/systemd/system/dicker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd==/run/containerd/containerd,sock-b br0
重启配置文件:systemctl daemon-reload     systemctl restart docker.service

容器名称互联

新建容器时,docker会自动分配容器名称,容器ID和IP地址,导致容器名称,容器ID和IP都不固定
固定名称实现确定目标的通信
两种固定名称:容器名称       容器名称的别名

通过容器名称互联

同一个宿主机上的容器之间可以通过自定义的容器名称i相互访问
注:如果被引用的容器地址变化,必须重启当前容器才能生效

容器名称实现

docker run创建容器,可使用--link选项实现容器名称的引用
其本质就是在容器内的/etc/hosts中添加--link后指定的容器的IP和主机名的对应关系,从而实现名称解析   
--link list
格式:
先创建指定名称的容器   docker run --name <容器名称>
在创建容器时引用上面容器的名称   docker run  --link  <目标通信的容器ID或容器名称>

通过自定义容器别名互联

自定义的容器名称可能后期会发生变化,一旦名称发生变化,容器内程序之间也必须要随之发生变化,因此可以使用自定义别名的方式解决,即容器名称可以随意更改,只要比更改别名即可
容器别名实现
命名格式:
先创建指定名称的容器  docker run --name <容器名称>
给上面创建的容器起别名,来创建容器  docker run --name <容器名称>  --link <目标容器名称>:"<容器别名1>,<容器别名2>.."

docker网络连接模式

docker的网络支持5种网络模式:
none  bridge   host   container   network-name
查看网络模式    docker network ls

网络模式指定

默认新建的容器使用Bridge模式
创建容器时,指定网络模式    docker run --network   |  --net=
:可是以下值
none
bridge
host
container:<容器名或容器ID>
<自定义网络名称>

bridge 网络模式(NAT模式)

本模式是docker的默认模式,即不指定任何模式就是bridge模式,此模式创建的容器会为每一个容器分配自己的网络IP等信息,并将容器连接到一个虚拟网桥与外界通信
NAT模式通过SNAT访问外网,使用DNAT可以让容器被外部主机访问
此模式宿主机需要启动ip_forward功能
查看bridge模式信息  docker network inspect bridge
安装docker后,默认启用ip_forward 可通过文件查看 /proc/sys/net/ipv4_forward

修改默认birdge模式网络配置

有两种方法修改默认的bridge模式的网络配置,两种方式只能选一种,否则会导致冲突,docker服务无法启动

Host网络模式

指定host模式启动的容器,那么新创建的容器不会创建自己的虚拟网卡,而是直接使用宿主机的网卡和IP地址。
访问容器的时候直接使用宿主机IP和容器端口即可,适用于运行容器端口比较固定的业务

Host网络模式特点

使用参数 --network host指定
共享主机网络
网络性能无损耗
网络故障排除相对简单
各容器网络无隔离
网络资源无法分别统计
端口管理困难,容易产生端口冲突
不支持端口映射

创建host模式的容器

docker run -d --network host .....

none模式

在使用none模式后,Docker容器不会进行任何网络配置,没有网卡,没有IP和路由,默认无法与外界通信,需要手动添加网卡配置

none模式特点

使用参数 --network none指定
默认无网络功能,无法和外部通信
无法实现端口映射
适用于测试环境

创建none模式的容器

docker run --network none ....

Container模式

使用此模式创建的容器需指定和一个已经存在的容器共享一个网络,而不是和宿主机共享网络,新创建的容器不会创建自己的网卡也不会配置自己的IP,而是和一个被指定的已存在的容器共享IP和端口范围,因此这个容器端口不能和被指定容器的端口冲突

Container模式特点

使用参数--network container:名称或ID指定
与宿主机网络空间隔离
容器间共享网络空间
适合频繁的容器间的网络通信
直接使用对方的网络,较少使用

创建Container模式的容器

docker run --network container:name|ID  ....

自定义网络模式

注:自定义网络内的容器可以直接通过容器名进行相互的访问,而无需使用--link

创建自定义网络

docker network create -d --subnet --gateway <网关> <自定义网络名称>
注意:mode不支持host和none,默认是bridge模式

你可能感兴趣的:(docker,docker,容器,运维)