一、NAT转换
NAT一般是内网转公网的一个网关, 内网对外表现为一个公网IP地址(不考虑嵌套情况),内网IP数据报经过NAT时通过转换为公网IP地址 通过端口号区分。
二、veth pair
相当于是一根虚拟的网线(虚拟的好处是不用通过实实在在的网络设备转发 而是直接在内核中进行数据的复制)
可以用来连接两个不同的Net Namespace
三、docker之间通信
docker0是虚拟网桥 所有容器和docker0组成docker内网 通过NAT实现和物理主机通信 docker0的IP地址就是docker网络的NAT网关 当开启DNS时 容器可通过容器名直接访问别的容器(DNS解析得到IP地址)
docker0: flags=4099<UP,BROADCAST,MULTICAST> 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 可以得到这个容器的当前信息