docker网络-network(上集)bridge、host、none、container模式

#1024程序节 | 征文#在这里插入图片描述

1 是什么

docker network,就是你使用ifconfig可以看到有一个名称是docker0

1.1 查看网络

ifconfig

在这里插入图片描述

1.2 查看docker里面网络信息

这里先简单看一下,后面会有详细的解释

docker network ls

在这里插入图片描述

2 network能干什么

1 容器间的互联和通信以及端口映射
2 容器IP变动时候可以通过服务名直接网络通信而不受到影响

3 用一用

3.1 常用基本命令

(1)所有的命令

学会使用--help命令

docker network --help

在这里插入图片描述

(2)查看命令的详细信息

docker network COMMAND --help

在这里插入图片描述
###(3)创建一个网络lemon_network

docker network create lemon_network

在这里插入图片描述

(4)删除网络

docker network rm lemon_network

在这里插入图片描述

(5)查看docker中的所有网络

docker network ls

在这里插入图片描述

(6)查看bridge网络的详细信息

docker network inspect bridge

在这里插入图片描述

3.2 网络模式

3.2.1 总体介绍

bridge 模式:使用–network bridge指定,默认使用docker0
host 模式:使用–network host
none 模式:使用–network none
container 模式:使用–network container:NAME或者容器ID指定

3.2.2 容器实例内默认网络IP生产规则

想法:
启动两个 ubuntu 容器,查看两个容器的 IP 地址,停止一个 ubuntu 容器,再新建一个 ubuntu 容器,查看新启动的容器的 IP 地址,如果新启动的容器占了删除的容器的 IP 地址,就证明docker容器内部的 ip 是有可能会发生改变的;如果没有占用,则 IP 地址是固定的。

(1)说明
docker run -it --name u1 ubuntu bash

在这里插入图片描述

docker run -it --name u2 ubuntu bash

在这里插入图片描述
启动两个Ubuntu实例 u1, u2 成功

docker ps

在这里插入图片描述
分别查看容器的 IP 地址
其实下面两条命令,将20改成21更好看一些些

docker inspect u1 | tail -n 20

在这里插入图片描述

docker inspect u2 | tail -n 20

在这里插入图片描述
启动新的 Ubuntu 容器 u3

docker run -it --name u3 ubuntu bash

在这里插入图片描述

docker rm u2 
docker ps

在这里插入图片描述
查看 u3 的容器IP

docker inspect u3 | tail -n 21

在这里插入图片描述

(2)结论

从上述例子,我们很容易可以看出docker容器内部的 IP 是有可能会发生改变的

3.2.3 案例说明

docker network inspect bridge | grep name

在这里插入图片描述

(1)bridge 模式
是什么

Docker服务器会默认创建一个 docker0 网桥,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker默认指定了 docker0 接口的 IP地址 和 子网掩码 ,让主机和容器之间可以通过网桥相互通信

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

网桥docker0创建一对 对等虚拟设备接口,一个是veth,另一个是eth0,成对匹配,这样一对接口称为veth pair

每个容器实例内部也有一个网卡,每个接口称为eth0;
docker0上面的每个veth匹配某个容器实例内部的eth0,两两配对,一一匹配。

案例

想法:
我们这里主要是要看到成对出现的 veth pair

启动两个 tomcat 的容器

docker run -d -p 8081:8080 --name tom1 tomcat
docker run -d -p 8082:8080 --name tom2 tomcat
docker ps

在这里插入图片描述
可以看出容器启动成功
在这里插入图片描述
这是之前启动的 Ubuntu 容器, 从图片中可以看到 veth pair

docker exec -it u1 bash
ip addr

如果提示 ip common not find,执行如下命令:

apt update
apt-get install iproute2
ip addr

在这里插入图片描述
在这里插入图片描述
这是启动的 tomcat 容器, 从图片中可以看到 veth pair

docker exec -it tom1 bash
ip addr

如果提示 ip common not find,执行如下命令:

apt update
apt-get install iproute2
ip addr

在这里插入图片描述
在这里插入图片描述
再到宿主机查看 IP 地址
记得是在宿主机下面执行下面的命令

ip addr | tail -n 16

在这里插入图片描述

(2)host 模式
是什么

直接使用宿主机的IP地址与外界进行通信,不再需要额外进行NAT转换。

NAT(Network Address Translation)是一种在IP数据包通过‌路由器或‌防火墙时重写源IP地址或目的IP地址的技术。

案例
docker run -d -p 8083:8080 --network host --name tom3 tomcat

在这里插入图片描述

docker ps

在这里插入图片描述
不需要加端口号

docker run -d --network host --name tom4 tomcat

在这里插入图片描述

docker inspect tom4 | tail -n 21

在这里插入图片描述
那我们没有端口,如何访问我们启动的容器呢?之前讲过,host模式和宿主机公用IP,所以我们使用宿主机IP即可
在这里插入图片描述

(3)none 模式
是什么

在none模式下,并不为Docker容器进行任何网络配置。即Docker容器没有网卡、IP、路由等信息,只有一个lo(Local,就是127.0.0.1本地回环),需要我们自己为Docker容器添加网卡、配置IP。

案例
docker run -d -p 8081:8080 --network none --name tom1 billygoo/tomcat-jdk8
docker exec -it tom1 bash
ip addr

如果出现已经命名过tom1的错误,使用docker rm 容器ID就可以了

在这里插入图片描述

docker inspect tom1 | tail -n 21

在这里插入图片描述

(4)container 模式
是什么

新建的容器和已经存在的一个容器共享一个网络ip配置而不是和宿主机共享。新建的容器不会创建自己的网卡、配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离开的。
在这里插入图片描述

看这张图片,容器1和容器2共享一个网络 IP,与 docker0,也就是3进行网络通信。

案例

(1)一个失败案例
使用tomcat,原因是公共的端口

docker run -d -p 8082:8080 --name tom2 billygoo/tomcat8-jdk8
docker run -d -p 8083:8080 --network container:tom2 --name tom3 billygoo/tomcat8-jdk8

如果出现已经命名过tom1的错误,使用docker rm 容器ID就可以了
在这里插入图片描述

(2)一个成功案例
Alpine操作系统是一个面向安全的轻型Linux发行版,镜像非常小巧,不到6M的大小,因此特别适合容器打包。

docker run -it --name alpine1 alpine /bin/sh
ip addr

在这里插入图片描述

docker run -it --network container:alpine1 --name alpine2 alpine /bin/sh
ip addr

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4 后记

自定义网络就放到下节分享吧,太多了,脑袋都写大了!

今天中午点外卖那个山姆上校牛肉卷,还是山姆超市里面买的好吃,原味的芝士卷就是最好吃的,别的都报吃,下次吃个山姆的叭。

家人们,如果我的文档对您有帮助的话,记得给我点个赞赞~

谢谢啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值