Docker----网络知识详解

目录

前言

 一、docker的原生网络

 1、bridge

2、host网络

3、none网络

二、docker自定义网络

1、docker自定义网络

2、创建自定义网桥

3、让不同子网能通信


前言

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


 一、docker的原生网络

server2:

docker network ls  #docker的原生网络【共有三个】
ip addr #docker安装后有一个docker0的桥接口
yum install -y  bridge-utils
brctl show

Docker----网络知识详解_第2张图片

 1、bridge

【没有一个公有ip只有宿主机可以直接访问】

docker run -d --name demo nginx  #开启一个容器
docker inspect demo   
#可以看到容器已经被分到一个ip地址【docker0网络端默认地址是172.17】

##注意ip分配是单调递增的

brctl show  
#所有容器内部网关都会指向docker0的接口

Docker----网络知识详解_第3张图片

docker run -it --rm busybox
--/ # ping baidu.com  #可以看到通信

Docker----网络知识详解_第4张图片

iptables -t nat -nL  #有一个伪装

【容器通过桥接到达宿主机,宿主机通过linux陆游功能到达eth0出去,出去做了伪装】 

Docker----网络知识详解_第5张图片

docker run -it --rm --network host busybox
--/ # ip addr

Docker----网络知识详解_第6张图片

2、host网络

【可以让容器共享网络,外部主机与容器直接通信,但是网络缺少隔离性】


【宿主机和容器共享相同网络,宿主机如果占了80端口,那么容器就不能占用】:

brctl show
docker ps
docker rm -f demo

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

docker ps   
#发现demo2没有运行

docker ps -a   
#可以看到demo2已经退出

docker logs demo2   
#查看demo2的日志:80端口已经被占用

docker rm -f demo2

 Docker----网络知识详解_第7张图片

3、none网络

【指禁用网络功能,只有lo接口】

docker run -it --rm --network none busybox #启动
--/ # ls
--/ # ip addr  #只有回环接口,没有网络接口


二、docker自定义网络

【这里的bridge和默认的bridge网络模式有区别,在于有无dn解析】

Docker----网络知识详解_第8张图片

 

1、docker自定义网络

docker network ls
docker ps
docker rm -f demo 
docker run -it --rm --name demo busybox
--/ # ping demo

Docker----网络知识详解_第9张图片

 【容器ip是动态单调递增的,但是不固定】

docker run -d --name demo1 nginx
docker inspect demo1 #ip为0.2
docker stop  demo1   #停掉demo1
docker run -d --name demo2 nginx  #创建demo2
docker inspect demo2  #ip为0.2
*因为demo1是停止的资源是释放状态

Docker----网络知识详解_第10张图片Docker----网络知识详解_第11张图片

docker ps
docker start demo1  #开启demo1
docker ps
docker inspect demo1  #可以看到ip是0.3
docker run -it --rm --name demo3 busybox  #创建demo3
--/ # ping demo3  #ping不通
--/ # ping demo2
--/ # ip addr  #没有dn解析ping不通,但是能获得ip地址
--/ # ping 172.17.0.3  #ip可以ping通

Docker----网络知识详解_第12张图片

Docker----网络知识详解_第13张图片


2、创建自定义网桥

docker ps
docker rm -f demo1
docker rm -f demo2  #删掉多余容器
docker network ls
docker network create --help
docker network create mynet1
docker network ls   #默认是桥接
docker network inspect mynet1  #查看mynet详情
ip addr show docker0

Docker----网络知识详解_第14张图片

Docker----网络知识详解_第15张图片

docker network  create --subnet 172.10.0.0/24 --gateway 172.10.0.1 mynet2 
#指定网段,不能和本机所有网段冲突

docker network ls
docker network  inspect mynet2

Docker----网络知识详解_第16张图片

docker run -d --name demo1 --network mynet1 --ip 172.18.0.10 nginx #报错,不支持指定ip【自动分配不能手动指定】
docker ps -a
docker rm demo1 
docker run -d --name demo1 --network mynet2 --ip 172.10.0.10 nginx  #mynet2可以指定
docker inspect demo1 
docker run -d --name demo2 --network mynet1 nginx  
docker ps

Docker----网络知识详解_第17张图片

docker inspect demo1  #demo1在mynet2里
docker inspect demo2  #demo2在mynet1里
docker run -it --rm --network mynet1 busybox
*注意不同的子网之前网络不通,是docker网络隔离作用
--/ # ping demo1
--/ # ping demo2  
docker run -it --rm --network mynet2 busybox
--/ # ping demo1
--/ # ping demo2
iptables -nL

Docker----网络知识详解_第18张图片

Docker----网络知识详解_第19张图片

Docker----网络知识详解_第20张图片

Docker----网络知识详解_第21张图片

3、让不同子网能通信

docker ps
docker network ls
docker run -it --name demo3 --network mynet1 busybox
--/ # ping demo1
--/ # ping demo2
--/ # ip addr
按住ctrl+p+q【不退出】
docker ps 
docker network connect mynet2 demo3  #把demo3接到mynet2里【默认接到mynet1】
docker attach demo3  #进入demo23
--/ # ip addr  *可以看到有两个网卡
--/ # ping demo1
--/ # ping demo2
*两个都能连通

Docker----网络知识详解_第22张图片

Docker----网络知识详解_第23张图片

Docker----网络知识详解_第24张图片

 

你可能感兴趣的:(docker,网络,容器)