docker网络原理

原理

 Docker本地网络实现利用了linux的网络命名空间和虚拟网络设备(veth pair)

基本原理

要实现网络通信,机器需要至少一个网络接口与外界机器相连,并可以收发数据包。
docker中的网络是在本地主机和容器内分别创建一个虚拟接口,并让它们彼此联通。这样的接口叫做veth pair. 然后这样接口一个链接在容器上,接口的另一端连载网桥docker0上。docker0网桥和宿主机的物理网卡相连。
在这里插入图片描述

网络创建过程

(1) 创建一对虚拟接口,分别放到本地主机和新容器的命名空间中;
(2)本地主机一段的虚拟接口连接到默认的docker0网桥或指定网桥上,并具有一个以veth开头的唯一名字
(3) 容器一端的虚拟接口将放到新创建的容器中,并修改名字为eth0。这个接口只在容器的命名空间可见。
(4)从网桥可用地段中获取一个空闲地址分配给容器的eth0,并配置默认路由网关为docker0网卡的内部接口docker0的ip地址

容器启动网络配置参数

有5个可选值bridge、none、container、host和用户定义的网络:

–net=bridge:默认值,在Docker网桥docker0上为容器创建新的网络栈。❑–net=none:让Docker将新容器放到隔离的网络栈中,但是不进行网络配置。
–net=container:NAME_or_ID:让Docker将新建容器的进程放到一个已存在容器的网络栈中,新容器进程有自己的文件系统、进程列表和资源限制,但会和已存在的容器共享IP地址和端口等网络资源,两者进程可以直接通过lo环回接口通信。

–net=host:告诉Docker不要将容器网络放到隔离的命名空间中,即不要容器化容器内的网络。此时容器使用本地主机的网络,它拥有完全的本地主机接口访问权限。容器进程可以跟主机其他root进程一样打开低范围的端口,可以访问本地网络服务,比如D-bus,还可以让容器做一些影响整个主机系统的事情,比如重启主机。因此使用这个选项的时候要非常小心。如果进一步的使用–privileged=true参数,容器甚至会被允许直接配置主机的网络栈。

-net=user_defined_network:用户自行用network相关命令创建一个网络,通过这种方式将容器连接到指定的已创建网络上去。

容器互联

可以使用 --link参数来是容器互联

但是建议将容器加入自定义的Docker网络来连接多个容器,而不是使用–link参数

新建网络

docker network create -d bridge my-net

-d 参数指定 Docker 网络类型,有 bridge overlay

连接容器

运行一个容器并连接到新建的my-net网络

docker run -it --rm --name busybox1 --network my-net busybox sh

打开终端,在运行一个容器并加入到my-net网络

docker run -it --rm --name busybox2 --network my-net busybox sh

在打开一个终端 查看容器信息

docker container ls

这样就可以看到 busybox1容器和busyboy2容器建立了连接
可以有attach 命令 进去 任意一个容器 ping来测试容器之间 是否连接

如果有多个容器之间需要互相连接,推荐是用docker Cpmpose

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值