1-5 容器网络
最后更新于:2022-04-02 07:36:58
#### 网络基础
```
# 网络模型
TCP/IP 5层模型
ISO/OSI 7层模型
```
#### 模拟Docker建立命名空间
```
# 查看当前命令空间
ip netns list
# 创建命名空间
ip netns add test1
ip netns add test2
# 创建网卡并绑定
ip link add veth-test1 type veth peer name veth-test2
# 将网卡绑定到命名空间
ip link set veth-test1 netns test1
ip link set veth-test2 netns test2
# 启动网卡
ip netns exec test1 ip link set dev veth-test1 up
ip netns exec test2 ip link set dev veth-test2 up
# 设置IP地址
ip netns exec test2 ip addr ad 192.168.1.2/24 dev veth-test2
ip netns exec test1 ip addr add 192.168.1.1/24 dev veth-test1
# 查看IP地址
ip netns exec test2 ip a
ip netns exec test1 ip a
# 测试联通
ip netns exec test2 ping 192.168.1.1
ip netns exec test1 ping 192.168.1.2
```
#### 容器网络
容器间通过将网络空间都连接到docker0进行通信
容器访问外网通过NAT方式,由iptables的默认网关实现
```
# 命名空间添加默认网关
ip netns exec 27383 route add default gw 192.168.1.1
# 宿主机添加默认路由
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o em1 -j MASQUERADE
```
![](index_files/df439389-515c-4850-b0b9-29efd5dd6067.jpg)
#### docker --link 容器间通过名字通信
```
docker run -d --name test2 --link test1 centos:7 /bin/sh -c "while true;do sleep 3600; done"
```
#### docker --link原理
```
# 增加
docker network create -d bridge my-bridge
# 查看
docker network ls
# 创建网络时指定
docker network create -d bridge my-network
# 让容器连接到这个网络
docker network connect my-network test2
docker network connect my-network test3
```
#### 端口映射
```
# 第一个80是docker端口,第二个80是宿主机端口
docker run -d --name web -p 80:80 nginx
```
#### Overlay网络(多主机间容器互联)
```
# 需结合Etcd服务,实现数据通信,启动服务时进行注册
# 后续集成K8s后,自动实现
```
';