docker 通信

一、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 可以得到这个容器的当前信息

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值