Docker网络

Docker网络

这是个人笔记,观看他人教学视频整合的,视频底部有链接,侵删。

linux中,ip addr命令可以查看当前网卡
Docker网络_第1张图片

其中,docker0是docker帮我们生成的。

run一个镜像,查看容器的网卡:
Docker网络_第2张图片
宿主机ping容器:
Docker网络_第3张图片
可以看出,宿主机可以ping通容器。

容器如何和另一个容器相同网络?这就是Docker网络要解决的问题。

Docker网络原理

Docker为容器构造了一个路由器。每启动一个容器,Docker 就会为容器分配一个IP。Docker会创建一个网卡docker0桥接模式。
使用的是evth-pair技术。

承接上面的操作,在创建一个容器后,再次ip addr:
Docker网络_第4张图片
发现多了一个网卡,这个就那个容器的网卡。

就是这些种桥接的思想,完成了Docker容器间的网络通信。

Link

但是,这时候要与容器通信时,需要使用网卡配置的IP地址。为了使其能够通过容器名来连接,可以使用–link参数:

#启动两个tomcat
docker run -d -P --name tomcat01 tomcat
docker run -d -P --name tomcat02 --link tomcat01 tomcat
#进入tomcat02,并且ping tomcat01
docker exec -it tomcat02 ping tomcat01
这时可以发现可以ping通了。
(但是反向无法ping通,link是单向的)

Docker网络_第5张图片

link之后可以查看容器的host文件。里面就有tomcat01 ip的映射。
其实link也不常用。

自定义网络

docker network ls:显示docker的所有网络。
Docker网络_第6张图片
之前的命令其实有默认参数--net bridge
docker run-d -P --name tomcat01 --net bridge tomcat
这个是默认添加的,命令中不显示也是默认添加这个网卡。

网络模式

bridge	:桥接模式(默认就是这个模式)
none	:无配置模式,这种模式这,容器没有IP,无法和其他容器通信。
host	:和宿主机共享网络
container	:容器连通网络(用的最少)

配置一个自己的网络

通过自己配置一个网网络代替docker0,我们可以使docker的容器间可以直接通过名称连接通信。
命令:

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
#设置网关,子网

Docker网络_第7张图片
查看该网络的详情信息:
docker network inspect
Docker网络_第8张图片
可以看到,网关和子网掩码都已经配置成功。
接下来使用直接配置的网络测试容器:

docker run -d -P --name tomcat-net-01 --net mynet tomcat
docker run -d -P --name tomcat-net-02 --net mynet tomcat

不需要link,直接可以ping通容器名:
在这里插入图片描述

网络连通

当一个网络下的容器想要连通另一个网络中的容器时,需要将容器和网络连通。
简单来说。假设容器1在docker0中。容器2在mynet中,容器2想ping通容器1就需要使用network connect连通。
docker ps
在这里插入图片描述
tomcat01,tomcat02使用的是默认的docker0。
tomcat-net-01,tomcat-net-02使用方法的是mynet。
添加连接:
docker network connect mynet tomcat01
完成之后就能ping通了!Docker网络_第9张图片

笔记来源

该笔记是观看b站up主狂神的视频所记录的。
感谢狂神大佬的分享!
视频链接:https://www.bilibili.com/video/BV1og4y1q7M4

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