Docker自定义网络以及网络连通操作
Posted @Kerry~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker自定义网络以及网络连通操作相关的知识,希望对你有一定的参考价值。
Docker自定义网络
由于使用Docker0默认网络,是无法实现通过服务名相互 ping 通操作,一般现在都是 docker自定义网络。
Docker如何自定义网络?
查看所有网络 docker network ls
[root@iZ2ze4zc54bfy36wjglfqsZ /]# docker network ls
NETWORK ID NAME DRIVER SCOPE
bac2fa49ec66 bridge bridge local
064163c429d0 host host local
d0e962ce0544 mynet bridge local
2d78385bb383 none null local
4941a2003d7c redis bridge local网络模式解释一下
bridge :桥接模式(默认)
none:不配置网络
host:和宿主机共享网络
container:容器网络连通(用的比较少)
创建网络
[root@iZ2ze4zc54bfy36wjglfqsZ /]# docker network create --help Usage: docker network create [OPTIONS] NETWORK Create a network Options: --attachable Enable manual container attachment --aux-address map Auxiliary IPv4 or IPv6 addresses used by Network driver (default map[]) --config-from string The network from which to copy the configuration --config-only Create a configuration only network -d, --driver string 网络模式 默认是桥接 (default "bridge") --gateway strings 网关(常用) --ingress Create swarm routing-mesh network --internal 限制外网网络连接到这个网络 --ip-range strings 从子一个ip范围分配容器ip --ipam-driver string IP Address Management Driver (default "default") --ipam-opt map Set IPAM driver specific options (default map[]) --ipv6 启动 IPv6 网络 --label list Set metadata on a network -o, --opt map Set driver specific options (default map[]) --scope string Control the network's scope --subnet strings 子网掩码(常用) 创建网络命令 [root@iZ2ze4zc54bfy36wjglfqsZ /]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet 网络模式:桥接 子网掩码 192.168.0.0/16 范围是 192.168.0.255 ~ 192.168.255.255 网关是 192.168.0.1 如果是 192.168.0.0/24 证明最多是 255 个网卡 查看创建网络 docker network ls
查看具体信息
测试启动两个容器,进行相互ping通测试
启动第一个容器
docker run -it --network mynet --name mycentos-net-01 centos /bin/bash
Ctrl+P+Q 退出启动第二个容器
docker run -it --network mynet --name mycentos-net-02 centos /bin/bash
Ctrl+P+Q 退出
测试两个通过容器名称是否可以ping通过操作
发现是可以相互 ping 通的,这时候就知道自定义网络比 --link 强大多了
自定义网络是可以通过服务名相互 ping 通的,而--link 不行,再者就是自定义网络可以发向相互ping
网络连通
思考一个这样的场景:
例如我使用docker0 网络运行了两个centos 01 和 centos02 服务,使用了 mynet 运行了 mycentos-net-01 和 mycentos-net-02 服务,现在需要用centos01 和 mycentos-net-02 互通网络,应该如何?
运行两个容器
[root@iZ2ze4zc54bfy36wjglfqsZ /]# docker run -it --name centos01 centos
[root@iZ2ze4zc54bfy36wjglfqsZ /]# docker run -it --name centos02 centos
都是Ctrl+P+Q 退出
测试ping
[root@iZ2ze4zc54bfy36wjglfqsZ /]# docker exec -it centos01 ping mycentos-net-01
ping: mycentos-net-01: Name or service not known
是无法 ping 通的原因是 docker0 和 mynet 是两个不同网段来的,怎么可能 ping 通,所以现在只能采用 容器 和 自定义网络 ping
centos01 ping mynet 操作
采用docker network connet 命令 Connect a container to a network
链接一个容器到一个网络
Usage: docker network connect [OPTIONS] NETWORK CONTAINER
[root@iZ2ze4zc54bfy36wjglfqsZ /]# docker network connect mynet centos01
思考一下为什么通过 connect 命令就可以通 跨网段 ping 呢?查看一下 mynet 网络
docker network inspect mynet
我们会发现在 mynet网络中,存在centos01,意思就是 connect 命令后,相当于 centos01网络配置添加到了 mynet中,理解为:阿里云服务器 一个官网ip 一个私网ip地址,那么一个容器 两个IP地址。
查看centos01 的 hosts 网络配置文件
docker exec -it centos01 cat /etc/hosts
结论:假设要跨网络操作别人,就需要使用docker network connect 连通!
以上是关于Docker自定义网络以及网络连通操作的主要内容,如果未能解决你的问题,请参考以下文章
第140天学习打卡(Docker --link 自定义网络 网络连通 部署Redis集群 发布SpringBoot镜像)
Docker 网络详解之使用自定义网络实现容器间通过容器名称互联
VSCode自定义代码片段14——Vue的axios网络请求封装