企业运维实战--最全Docker学习笔记3.Docker网络知识详解

本文详细介绍了Docker的网络配置,包括原生网络、自定义网络、容器通信和跨主机容器网络的macvlan方案。在原生网络中,Docker使用docker0桥接容器;自定义网络允许指定网段和IP;容器通信可通过内建DNS解析或link实现;macvlan网络则实现了跨主机的直接通信,无需Linux桥接。
摘要由CSDN通过智能技术生成

企业运维实战--最全Docker学习笔记3.Docker网络知识详解


前言

Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。

网络模式含义
–network host容器与真实主机共享IP和端口
–network none指定关闭容器的网络功能,只保留内部的回环接口
birdge桥接模式会为每一个容器分配IP,容器通过docker0网桥以及iptables nat表配置与真实主机通信
container容器与另外一个容器共享IP和端口

一、Docker网络

1.原生网络

关掉harbor仓库

docker-compose stop

在这里插入图片描述

查看docker版本

docker version

查看原生网络

docker network ls

在这里插入图片描述

自动生成桥接docker0

ip addr show docker0

在这里插入图片描述

安装查看桥街工具

yum install -y bridge-utils
brctl show

在这里插入图片描述

在这里插入图片描述

查看docker0桥接

brctl show docker0

在这里插入图片描述

启动容器会生成虚拟网卡,自动分配ip

docker run -d --name demo nginx
brctl show

在这里插入图片描述

删除容器,虚拟网卡释放

docker rm -f demo
brctl show

在这里插入图片描述

–network host 表示虚拟机与宿主机同时使用IP和端口。不会生成虚拟网卡。

docker run -d --name demo --network host nginx
brctl show docker0

在这里插入图片描述

查看已经启动的nginx80端口

netstat -antlp

在这里插入图片描述

由于端口冲突,所以demo2无法启动

docker run -d --name demo2 --network host nginx
docker ps

在这里插入图片描述

删除测试容器,释放80端口

docker rm demo2
docker rm demo
docker rm -f demo
netstat -antlp

在这里插入图片描述

–network none指定关闭容器的网路功能,只留下回环接口。

docker run -it --rm --network none busybox

在这里插入图片描述

当容器停掉时,资源会释放,重新启动按照启动顺序分配动态ip

docker run -d --name demo1 nginx
docker run -d --name demo2 nginx
docker ps

在这里插入图片描述

docker inspect demo1

在这里插入图片描述

docker inspect demo2

在这里插入图片描述

关闭demo1、demo2,再重启,启动顺序为先demo2后demo1

docker stop demo1
docker stop demo2
docker start demo2
docker start demo1

再次查看demo1和demo2的网卡IP

docker inspect demo1

在这里插入图片描述

docker inspect demo2

在这里插入图片描述

2.自定义网络

自定义网络网桥mynet1

docker network create mynet1
docker network ls

在这里插入图片描述

使用自定义桥接拉起容器demo1,镜像为nginx,查看配置IP

docker run -d --name demo1 --network mynet1 nginx
ip addr

再次使用自定义桥接拉起容器busybox,查看IP

docker run -it --rm --network mynet1 busybox

在这里插入图片描述

终端中—ping demo1,可以ping通,内置DNS自动做了解析
在这里插入图片描述

自定义网段和ip

创建生成自定义ip和网关的网桥mynet

docker network create --subnet 172.30.0.0/24 --gateway 172.30.0.1 mynet1

在这里插入图片描述

使用mynet1拉起nginx,容器名为demo

docker run -d --name demo --network mynet1 --ip 172.30.0.9 nginx

查看分配的IP

docker inspect demo # 或者nginx的ID  docker inspect 4ceceb1799d1

在这里插入图片描述

再次使用创建的桥接拉起容器busybox

docker run -it --rm --network mynet1 busybox
ip addr #如果不指定,则动态分配IP

终端中可以ping通demo

在这里插入图片描述
容器添加双网卡实现彼此不同网段通信

按照之前的操作,不同网桥分配的IP网段是不同的,所以彼此之间也不能通信。
创建两个网卡mynet1、mynet2

docker network create --subnet 172.30.0.0/24 --gateway 172.30.0.1 mynet1
docker network create --subnet 172.31.0.0/24 --gateway 172.31.0.1 mynet2

使用mynet1网卡,拉起容器nginx

docker run -d --name demo --network mynet1 --ip 172.30.0.10 nginx

在这里插入图片描述查看demo容器ip

docker inspect demo

在这里插入图片描述使用mynet1拉起容器busybox,查看分配的ip

docker run -it --rm --network mynet1 busybox
ip addr

在这里插入图片描述ctrl+p+q 将终端退出

为demo添加第二个网卡

docker network connect mynet2  demo
#查看demo网卡信息
docker insoect demo
#有两条网卡信息

再次打开后台的busybox,发现可以ping通demo。

3.容器通信

从docker1.10版本开始,内嵌了DNS server,自带DNS解析功能。
在容器创建时使用–network=container:v1指定
处于这个模式下的 Docker 容器会共享一个网络栈,这样两个容器之间可以使用localhost高效快速通信。

–link 可以用来链接2个容器,格式

--link <name or id>:alias

name和id是源容器的name和id,alias是源容器在link下的别名。

容器如何访问外网是通过iptables的SNAT实现的。
在这里插入图片描述

外网访问容器用到了docker-proxy和iptables DNAT
宿主机访问本机容器使用的是iptables DNAT
外部主机访问容器或容器之间的访问是docker-proxy实现
在这里插入图片描述

4.跨主机容器网络–macvlan

macvlan网络方案实现
Linux kernel提供的一种网卡虚拟化技术。
无需Linux bridge,直接使用物理接口,性能极好。

打开网卡混杂模式

ip link set eth0 promisc on
ip addr show eth0

在这里插入图片描述
使用macvlan 创建网卡macvlan1,-o指定物理网卡

docker network create -d macvlan --subnet 172.30.0.0/24 --gateway 172.30.0.1 -o parent=eth0 macvlan1

在这里插入图片描述在这里插入图片描述
查看macvlan1信息

docker network inspect macvlan1

在这里插入图片描述
使用macvlan1拉起busybox容器,指定ip

docker run -it --rm --network macvlan1 --ip 172.30.0.10 busybox

在这里插入图片描述
server2虚拟机与server1操作相同

ip link set eth0 promisc on
 ip addr show eth0

在这里插入图片描述

docker network create -d macvlan --subnet 172.30.0.0/24 --gateway 172.30.0.1 -o parent=eth0 macvlan1
docker run -it --rm --name demo2 --network macvlan1 --ip 172.30.0.11 busybox

在这里插入图片描述

server1中可以ping通demo2。

macvlan会独占主机网卡,但可以使用vlan子接口实现多macvlan网络
vlan可以将物理二层网络划分为4096个逻辑网络,彼此隔离.

添加新的网卡eth1,开启混杂模式

ip link set up eth1
ip link set eth1 promisc on
ip addr show eth1

使用vlan子接口,-o parent=eth1.1

docker network create -d macvlan --subnet 172.21.0.0/24 --gateway 172.21.0.1 -o parent=eth1.1 macvlan2

server2操作与server1相同,分别打开一个终端,可以ping通。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值