TNBLOG
首页
博客
视频
资源
问答
猿趣
手机
关于
搜索
收藏
便签
笔记
消息
创作
登录
剑轩
人生没有办法假设,我们不能站在后来的角度去责备当时无望、甚至是怯懦、犹豫的自己
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
CSS
15篇
微服务
41篇
Git
14篇
.NET
102篇
移动开发
33篇
软件架构
23篇
.NET Core
118篇
.NET MVC
11篇
英语
3篇
随笔
82篇
Bootstrap
3篇
Redis
21篇
编辑器
10篇
Js相关
15篇
虚拟化
8篇
更多
Oracle
7篇
Python
14篇
数据库
26篇
EF
17篇
微信
3篇
前端
149篇
消息队列
6篇
docker
41篇
多线程
1篇
Java
4篇
软件基础
2篇
C++
2篇
WCF
7篇
Linux
7篇
nginx
5篇
K8S
9篇
ABP
2篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2023
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术
原
Docker 自定义网络。Docker自定义网络实现容器互联
9216
人阅读
2022/9/4 23:20
总访问:
3514306
评论:
2
收藏:
0
手机
分类:
docker
## Docker 自定义网络 ### 1) 使用docker network 查看网络相关的帮助命令。如图所示 ``` docker network --help ```  可以看到网络相关的命令有connect、create、inspect、rm等。 ###2) 查看创建网络的帮助命令。如图所示 ``` docker network create --help ```  常用的有—driver指定网络模式、--gateway指定网关、--subnet指定子网。 ### 3) 使用命令查看一下目前docker内部的默认网络。如图所示 ``` docker network ls ```  可以看到里边的默认网络有很多,其中桥接模式有三个。 ### 4) 我们查看一下几个桥接网络的详情 查看一下名称叫bride的网络详情,如图所示 ``` docker network inspect bridge ```  可以看到其中的子网是172.17.0.0/16,网关是172.17.0.1 **查看一下名称叫docker\_gwbridge的网络详情,如图所示**  可以看到其中的子网是172.19.0.0/16,网关是172.19.0.1。 **还有另外一个桥接网络root_default,我们也可以看一下它的返回情况。** ``` [ { "Name": "root_default", "Id": "741b51653fac904c07a8457cd4f50971ef4de179a10082fe3329ec84fdb5edbd", "Created": "2022-08-22T09:37:24.69441739+08:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "172.18.0.0/16", "Gateway": "172.18.0.1" } ] }, "Internal": false, "Attachable": true, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": {}, "Options": {}, "Labels": { "com.docker.compose.network": "default", "com.docker.compose.project": "root", "com.docker.compose.version": "1.29.2" } } ] ``` 可以看到其中的子网是172.18.0.0/16,网关是172.18.0.1。 我们了解了目前桥接网络所使用的子网和网关这些,我们也可以来自定义一个桥接网络。要注意网段不要冲突了。我们可以考虑使用172.22.0.1这个网络 ### 5) 使用命令创建自定义网络。如图所示 ``` docker network create --driver bridge --subnet 172.22.0.0/16 --gateway 172.22.0.1 mynet ```  我们看到我们的自定义网络已经创建成功了。我们使用了—driver指定了网络模式、使用--gateway指定了网关、使用了--subnet指定了子网。当然也可以不用指定网关与子网它会自动识别。 自定义网络成功创建后,我们就可以在启动容器的时候使用我们创建的自定义网络了。 tn2>还有要注意一下,创建自定义网络指定网关,子网这些的时候要看一下自己的机器的网络环境,最好参考一下当前默认网络使用的子网和网关这些,否者可能会导致自定义网络影响宿主机的远程连接。比如我们这里的环境是虚拟机,远程连接使用的网段是192.168.6.xxx,如果我们自定义网络的时候也使用了192.168这类的特殊地址,就会造成远程连接失效。使用的docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet命令创建就会造成远程连接失效,应该这类地址范围太广了,而且太特殊了,和我们本地环境网络冲突,造成无法连接。 ### 6) 查看一下我们创建的网络的详情,如图所示。 ``` docker network inspect mynet ```  其中网络模式、网关、子网等关键信息都可以在上面看到。 ## Docker自定义网络实现容器互联 ### 1) 使用自定义网络创建一个服务, 如图所示。 ``` docker run -itd --name nginx-net-01 --net mynet -p 9100:80 nginx ```  使用命令查看一下网络详情,可以看到刚跑的容器网络配置加进来了,ip地址也分配了,是整个网段的第二个地址,如图所示。  当然直接访问是肯定没有问题的,如图所示。  我们如果把刚刚创建的容器删除掉,在查看一下网络详情,会发现容器相关的也自动被删除掉了,如图所示。  ### 2) 使用自定义网络在创建一个服务, 如图所示。 ``` docker run -itd --name nginx-net-02 --net mynet -p 9101:80 nginx ```  使用命令查看一下网络详情,可以看到刚跑的容器网络配置加进来了,ip地址也分配了,是整个网段的第三个地址,如图所示。  我们可以看到我们刚刚跑的两个容器,ip地址属于同一个网段那么他们应该就可以进行相互通信,下一步我们进行容器之间的网络互联测试。 ### 3) 测试容器之间的互联 先进入其中一个容器 ``` docker run -itd --name nginx-net-02 --net mynet -p 9101:80 nginx ``` 然后执行ping命令,执行ping命令的时候可能会出现docker 容器内部无法使用ping命令的错误。报错ping command not found,如图所示。  解决办法,使用如下命令解决 ``` apt-get update apt install iputils-ping //这个可装可不装 apt install net-tools ``` 安装之后在执行ping命令进行测试,通过容器2的ip进行ping测试,如图所示。 ``` ping 172.22.0.3 ```  通过容器2的容器名进行ping测试,如图所示。 ``` ping nginx-net-02 ```  可以看到不管通过容器2的ip地址还是容器名称都可以实现连接的,这在微服务的环境下是非常方便的。 测试的时候还可以使用如下命令进行测试,如图所示。 ``` docker exec -it nginx-net-01 ping nginx-net-02 ```  使用容器名称或者ip地址都可以。 tn2>如果不使用自定义网络,所有的容器在不指定网络情况下,都是由docker0路由的,Docker会给我们容器默认分配一个随机的可用IP地址,这些IP地址之间是可以进行网络交互的,但是无法通过容器名称来连接。这在微服务场景下就不是很科学了,因为在微服务部署的场景下,注册中心是使用服务名来唯一识别微服务的,而我们上线部署的时候微服务对应的IP地址可能会改动,所以我们需要使用容器名来配置容器间的网络连接,但是默认网络就不能使用容器名称来连接,虽然可以使用指定–link来实现容器名称进行连接,但是是单向的反过来就不行,所以我们还是推荐使用自定义网络。 ### 4) 实现不同网络间的容器互联 在没有使用connect命令的情况下,不同网络间的容器是无法进行网络连接的。我们下面进行详细的测试。 我们重新创建一个容器,不指定网络 ``` docker run -itd --name nginx-net-02 --net mynet -p 9101:80 nginx ``` 然后我们执行docker inspect nginx-net-03查看一下详情,主要是找到网络相关的信息,如图所示。  可以发现和我们前面创建的2个容器不在一个网段上面,我们进行ping测试 ``` docker exec -it nginx-net-01 ping nginx-net-03 docker exec -it nginx-net-01 ping 172.17.0.2 ``` 可以看到不管是进行容器名或者是容器的ip通信都是无法连通的,如图所示。  不同Docker网络之间的容器想要连接的话,需要把该容器注册到另一个容器所在的网络上,使用docker connect命令。 ``` docker network connect mynet nginx-net-03 ``` 设置成功之后我们使用命令查看一下我们自定义网络的详情,如图所示。 ``` docker network inspect mynet ```  可以看到我们刚刚连接的网络已经被注入进来了,也分配了ip地址。 重新执行命令进行容器之间的互联,如图所示。可以看到现在进行容器互联是完全没问题的。  我们再次查看容器nginx-net-03的详情,看看网络情况,如图所示。  我们可以看到容器nginx-net-03被分配了两个网络,默认的bridge与mynet,其实它能够和容器nginx-net-02与容器nginx-net-01通信,还是因为他们都使用了mynet这个自定义网络,让它们在同一个网段。 **视频地址:** 链接: https://pan.baidu.com/s/1Uvq7yoP5LN6ihuWtd4Rmdg?pwd=kdzf 提取码: kdzf 复制这段内容后打开百度网盘手机App,操作更方便哦
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}