故事凌 故事凌 2月29日 Docker中的网络接口默认都是虚拟的接口。虚拟接口的最大优势 就是转发效率极高。这是因为Linux通过在内核中进行数据复制来 实现虚拟接口之间的数据转发,即发送接口的发送缓存中的数据 包将被直接复制到接收接口的接收缓存中,而无需通过外部物理 网络设备进行交换。对于本地系统和容器内系统来看,虚拟接口 跟一个正常的以太网卡相比并无区别,只是它速度要快得多 Docker容器网络就很好地利用了Linux虚拟网络技术,在本地主机 和容器内分别创建一个虚拟接口,并让它们彼此连通(这样的一 对接口叫做veth pair)。 一般情况下,Docker创建一个容器的时候,会具体执行如下操作: 安装docker的时候, 它会自动创建四个网络, host, container, bridge, none, 除了这些, docker还支持自定义网络 镜像:busybox集成了一百多个Linux的工具箱 示例: 示例: 示例: 示例: 示例 容器间可以通过IP, Docker DNS Server和joined容器三种方式 例如上面的ip: 192.168.1.3和192.168.1.4两个容器通信 joined 容器是另一种实现容器间通信的方式。它可以使两个或多 个容器共享一个网络栈,共享网卡和配置信息,joined 容器之间 可以通过 127.0.0.1 直接通信 容器的访问控制主要通过Linux上的iptables防火墙软件来进行管理 和实现。iptables是Linux系统流行的防火墙软件,在大部分发行版 中都自带。docker专题(五)-- docker网络
8. docker网络和容器的通信
8.1 docker网络通信的基本原理
8.2 docker默认网络模式
docker run -it centos:7 /bin/bash
# 进入到容器以后,
yum install -y net-tools && ifconfig
8.2 docker的网络模式
启动两个容器:第一个 docker run -it busybox /bin/sh ---> 使用bridge的模式
信息
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02
inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
第二个 docker run -it --network=container:d8c0a1aa2673 busybox /bin/sh
其中:d8c0a1aa2673是另一个容器的ID
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02
inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
8.3 docker network管理命令
8.3.1 显示网络列表
docker networkd ls
8.3.2 创建网络
docker network create <Option> <NetworkName>
## 可选参数
--config-from 复制其他网络配置
--driver 指定网络模式
--gateway 指定网关
--internal 限制只能内部访问
--ip-range 从子网范围分配容器IP
--ipv6 启用IPv6网络
--subnet 指定网段
docker network create centos-network
8.3.3 配置容器连接到指定的网络
docker network connect <Option> <Network> <Containner>
8.3.4 取消容器连接到指定的网络
docker network disconnect <Option> <Network> <Container>
8.3.5 查看网络详情
docker network inspect <Network>
8.3.6 删除网络
docker network rm <Network>
docker network rm centos-network
8.3.7 清理未使用的网络
docker network prune
8.3.8 启动容器指定网络
docker run -it --network=<Network> <Option> <Image>
8.3.9 自定义bridge模式
docker network create -d bridge --ip-range=192.168.1.0/24 --gateway=192.168.1.1 --subnet=192.168.1.0/24 bridge2
docker run -it --network=bridge2 --ip=192.168.1.3
docker run -it --network=bridge2 --ip=192.168.1.4
8.5 容器间的通信
8.5.1 IP通信
8.5.2 Docker DNS Server
docker run -it --network=bridge2 --name box1 busybox
docker run -it --network=bridge2 --name box2 busybox
8.5.3 Joined容器
(*)基于httpd的镜像创建容器
docker run -it --name box3 httpd
(*)使用Joined容器创建一个新的容器
docker run -it --network=container:box3 busybox
(*)测试:在第二个容器中执行wget 127.0.0.1
8.6容器访问控制
8.6.1 容器访问外部网络
sysctl -w net.ipv4.ip_forward=1
8.6.2 外部访问容器实现
docker run -it -p 80:80 centos bash