docker–扩展学习-网络–命令–15
1、创建网络
1.1、简单创建容器
# 创建
docker network create net111
# 查看
docker network inspect net111
1.2、指定参数创建容器
# ----创建----
docker network create -d bridge \
# 指定子网络,在bridge网络中只可以指定一个子网络,而在overlay网络中支持多个子网络。
--subnet=192.168.0.0/16 \
# 指定网关
--gateway=192.168.0.100 \
# 指定IP 范围
--ip-range=192.168.1.0/24 \
--aux-address="my-switch=192.168.1.6" \
net333
# ----查看----
docker network inspect net333
2、将容器连接到网络
docker network connect networkName containerName
- 将containerName容器连接到networkName网络中
- 1个容器可以连接到多个不同网络驱动的网络中
2.1、创建两个容器,c1 和 c2
# 加入默认bridge网络
docker run -itd --name=c1 busybox
# 加入默认bridge网络
docker run -itd --name=c2 busybox
2.2、创建一个网络 net444
docker network create -d bridge --subnet 172.26.0.0/16 net444
2.3、c2 容器 连接网络 net444
# 容器连接网络
docker network connect net444 c2
# 查看网络
docker network inspect net444
c2,自动分配到了IP地址。此时c1,仍然连接在默认的bridge网络。
2.4、启动容器c3,且指定IP地址
# 指定网络是net444,IP是 172.26.3.3
docker run --network=net444 --ip=172.26.3.3 -itd --name=c3 busybox
# 查看网络
docker network inspect net444
2.5、c2的网络
c2创建的时候,默认加入bridge网络,我们手动连接了网络net444,这个时候c2有2个网络
# 进入正在运行的容器
docker attach c2
# 查看网络
ifconfig
2.6、可以通过容器名称访问网络
# 进入正在运行的容器
docker attach c2
同一网络支持
c2和c3都在net444网络
不同网络不支持
c1在bridge网络
c2在net444网络
3、断开容器的网络
断开c2和net444网络的连接
# 断开网络
docker network disconnect net444 c2
# 查看网络
docker network inspect net444
4、删除网络
4.1、删除指定名称的网络
# 创建
docker network create net555
# 删除
docker network rm net555
4.2、删除全部未使用的网络
docker network prune
5、列出Docker主机上的全部网络
docker network ls
6、网络别名
6.1、创建容器时指定
# 创建
docker network create net666
# 创建容器指定网络别名是alias_666
docker run --network=net666 --network-alias alias_666 -itd --name=c5 busybox
# 进入容器
docker attach c5
# ping 网络别名 alias_666
ping alias_666
6.2、创建容器之后追加网络别名
7、查看路由
route -n
7、网桥
7.1、安装网桥
# 安装网桥
yum install -y bridge-utils
7.2、查看网桥
查看网桥
brctl show
7.3、创建网桥
# 创建网桥
[root@zhoufei ~]# brctl addbr br0
# 配置网关IP
[root@zhoufei ~]# ifconfig br0 18.18.0.1
8、查看iptables规则
iptables-save
内容
[root@zhoufei ~]# iptables-save
# Generated by iptables-save v1.4.21 on Sun Feb 13 20:06:21 2022
*filter
:INPUT ACCEPT [508:37682]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [325:51996]
:DOCKER - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:DOCKER-USER - [0:0]
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN
COMMIT
# Completed on Sun Feb 13 20:06:21 2022
# Generated by iptables-save v1.4.21 on Sun Feb 13 20:06:21 2022
*nat
:PREROUTING ACCEPT [8:1754]
:INPUT ACCEPT [8:1754]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A DOCKER -i docker0 -j RETURN
COMMIT
# Completed on Sun Feb 13 20:06:21 2022
[root@zhoufei ~]#
8.1、其中nat表中的POSTROUTING链有这么一条规则
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
8.1.1、参数说明
-s 172.17.0.0/16
源地址172.17.0.0/16
-o docker0
指定数据报文流出接口为docker0
-j MASQUERADE
动作为MASQUERADE(地址伪装)
8.1.2、含义
将源地址为172.17.0.0/16的数据包(即Docker容器发出的数据),当不是从docker0网卡发出时做SNAT。
这样一来,从Docker容器访问外网的流量,在外部看来就是从宿主机上发出的,外部感觉不到Docker容器的存在。