docker 通信

一、NAT转换

NAT一般是内网转公网的一个网关, 内网对外表现为一个公网IP地址(不考虑嵌套情况),内网IP数据报经过NAT时通过转换为公网IP地址 通过端口号区分。

docker 通信_第1张图片

二、veth pair

相当于是一根虚拟的网线(虚拟的好处是不用通过实实在在的网络设备转发 而是直接在内核中进行数据的复制)

可以用来连接两个不同的Net Namespace

docker 通信_第2张图片

三、docker之间通信

docker 通信_第3张图片

docker0是虚拟网桥 所有容器和docker0组成docker内网 通过NAT实现和物理主机通信 docker0的IP地址就是docker网络的NAT网关 当开启DNS时 容器可通过容器名直接访问别的容器(DNS解析得到IP地址)

docker0: flags=4099  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:f6:90:9c:73  txqueuelen 0  (Ethernet)

 四、容器网络创建(注意默认的docker0网络是没有DNS的 只能通过ip地址访问)

# 创建三个容器 conTainer1,container2,container3
docker run -itd --name=container1 busybox
docker run -itd --name=container2 busybox
# 创建网络mynet
docker network create -d bridge --subnet 172.25.0.0/16 mynet
# 将容器containerr2连接到新建网络mynet
docker network connect mynet container2
# 使用mynet网络来容器container3
docker run --net=mynet --ip=172.25.3.3 -itd --name=container3 busybox
 
# 查看这三个容器的网络情况
docker network inspect container1 # docker0
docker network inspect container2 # docker0, mynet
docker network inspect container3 # mynet

    container1 通过bridge默认连接到docker0 分配到ip地址为  inet addr:172.17.0.2

    container2 通过bridge默认连接到docker0 分配到ip地址为  inet addr:172.17.0.3, 此外还连接到了mynet网络, 分配IP地址

inet addr:172.25.0.2

    container3 在运行时指定了在mynet网络中 IP 地址为指定的  inet addr:172.25.3.3 此时就不会再连接到docker0中

由于自定义网络默认开启了DNS 可以在容器3中ping 到容器2

五、进入容器的方法 

    一般运行容器的方法: docker run -itd  --name=name image

   选项d表示detach 即以后台方式运行。如果要访问这个容器 方法有

1. docker attach name  通过这种方法缺点  当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。

2. 在容器内安装ssh  通过ssh访问

3.使用docker exec name bashcmd   在容器中执行命令

   同理 docker inspect name 可以得到这个容器的当前信息

 

你可能感兴趣的:(kubernetes)